cancel
Showing results for 
Search instead for 
Did you mean: 

Success Factors implementation through PI errors

harish_babu5
Participant
0 Kudos

Hi all

I am trying to connect an ECC system to Success Factors through SAP PI and we are facing issues. I am on dual stack SAP PI and I aam doing Employee Data INtegration.

There are three interfaces, Login Query , Usetupsert and Logout query.

The Login query is taking the company ID, user ID and password to the Success Factors. The session ID from Success Factors is sent in payload and it is not being passed to the ECC system. The mapping is using two UDFs. I changed that and did a field to field mapping and now the session ID is reaching SAP ECC.

However I am getting error in userupsert. Invalid SFAPI session. SFWebserviceFaultException.

I also see three Login Query sessions being triggered from ECC.

Does anyone knows why this is happening?

Harish

Accepted Solutions (1)

Accepted Solutions (1)

bhavesh_kantilal
Active Contributor
0 Kudos

I assume you are using the standard SFIHCM01 content and you have modified the login response mapping to copy the SessionID from the payload response. I have had this issue as well.

If that is the case, then make sure you concat the content JSESSIONID= to this, ie your login response mapping output for sessionID should be JESSIONID=<actualSESSIONID from the LoginResponse payload> .


Use a Concat statement with a Constant JSESSIONID= and /loginResponse/result/sessionId and map this to /loginResponse/result/sessionId

This will make sure that ECC when trigger the Upsert will also send JSESSIONID=<sessionID> to PI and then this will get added to the HTTP Header "Cookie"

Regards

Bhavesh


harish_babu5
Participant
0 Kudos

HI Bhavesh

The SAP standard content is not working and very confusing as well!

I have used many modules, Axis Receiver and at times I get error related to axis handlers too. I always felt SOAP Axis Receiver to be a real head ache!

In loginResponse, SAP is using two UDFs to map to the SessionID. I removed the UDFs and mapped directly to loginResponse and now the SessionID is reaching Success Factors. But it is opening multiple logins.

In userUpsertConfiguration mapping, it's more complex. There is one XSL mapping following the message mapping. I tried all permutations and combinations. I mapped the higher node over sessionid directly and it's throwing error. Then I tried without XSL mapping, again I am getting errors.

Do you have any links to the adapter module configs. I have gotten different links and I wonder whether the issue is with that.

I am sending company, username and password in the payload

Harish

bhavesh_kantilal
Active Contributor
0 Kudos

Hello Harish,

I just retried my SF Employee Synchronization with standard content.

Only change required was in the SFSFloginResponse_to_HCMloginResponse as below


Concat JSESSIONID= to the sessionID from SF

Channel Module Parameters are the default parameters that you can get by using Option Apply Template.

Do Note: The reason for this change required is a SF issue where SF returns 2 HTTP headers called SetCookie in its response leading to PI using the wrong HTTP Header. I am not sure if this is a issue only with out Test SF Tenant but as this is not under SAP support, we have not been able to figure this out.

Regards

Bhavesh

harish_babu5
Participant
0 Kudos

Hi Bhavesh

I wonder whether my modules in both channels, login response and userupsert are correct. I have attached screenshots of the module configurations in both channels.

Can you please check and confirm whether they are right? Or if you could provide some screenshots of your existing module configs, it will also help.

Regards

Harish

bhavesh_kantilal
Active Contributor
0 Kudos

Harish,

Your channel used in the UPSERT Request is missing the Prop Module. This is not mandatory but add the same.

In addition, can you check what does the Login Response Message Dynamic configuration contain and share the same here? That will confirm whether the issue you have is the same as I have.

Adding JSESSIONID= to the LoginResponse mapping alone should solve the problem but do share the above info to confirm the same.

harish_babu5
Participant
0 Kudos

HI Bhavesh

I reimported the Standard content and now I am getting error in the Login Request channel. I am not getting login response with Dynamic Configuration.

The screenshot you pasted, are they of Login channel or userupser channel?

My Login_Response channel configs are not proper, I guess. I am trying to solve it. I am getting this error

MP: exception caught with cause org.apache.axis.ConfigurationException: handler.type is not set

org.apache.axis.ConfigurationException: handler.type is not set

at com.sap.aii.adapter.axis.modules.HandlerCore.process(HandlerCore.java:66)

at com.sap.aii.adapter.axis.modules.HandlerBean.process(HandlerBean.java:86)

at sun.reflect.GeneratedMethodAccessor731.invoke(Unknown Source)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:597)

at com.sap.engine.services.ejb3.runtime.impl.RequestInvocationContext.proceedFinal(RequestInvocationContext.java:47)

at com.sap.engine.services.ejb3.runtime.impl.AbstractInvocationContext.proceed(AbstractInvocationContext.java:166)

at com.sap.engine.services.ejb3.runtime.impl.Interceptors_StatesTransition.invoke(Interceptors_StatesTransition.java:19)

at com.sap.engine.services.ejb3.runtime.impl.AbstractInvocationContext.proceed(AbstractInvocationContext.java:179)

at com.sap.engine.services.ejb3.runtime.impl.Interceptors_Resource.invoke(Interceptors_Resource.java:50)

at com.sap.engine.services.ejb3.runtime.impl.AbstractInvocationContext.proceed(AbstractInvocationContext.java:179)

at com.sap.engine.services.ejb3.runtime.impl.Interceptors_Transaction.doWorkWithAttribute(Interceptors_Transaction.java:37)

at com.sap.engine.services.ejb3.runtime.impl.Interceptors_Transaction.invoke(Interceptors_Transaction.java:21)

at com.sap.engine.services.ejb3.runtime.impl.AbstractInvocationContext.proceed(AbstractInvocationContext.java:179)

at com.sap.engine.services.ejb3.runtime.impl.Interceptors_MethodRetry.invoke(Interceptors_MethodRetry.java:46)

at com.sap.engine.services.ejb3.runtime.impl.AbstractInvocationContext.proceed(AbstractInvocationContext.java:179)

at com.sap.engine.services.ejb3.runtime.impl.AbstractInvocationContext.proceed(AbstractInvocationContext.java:191)

at com.sap.engine.services.ejb3.runtime.impl.Interceptors_StatelessInstanceGetter.invoke(Interceptors_StatelessInstanceGetter.java:23)

at com.sap.engine.services.ejb3.runtime.impl.AbstractInvocationContext.proceed(AbstractInvocationContext.java:179)

at com.sap.engine.services.ejb3.runtime.impl.Interceptors_SecurityCheck.invoke(Interceptors_SecurityCheck.java:25)

at com.sap.engine.services.ejb3.runtime.impl.AbstractInvocationContext.proceed(AbstractInvocationContext.java:179)

at com.sap.engine.services.ejb3.runtime.impl.Interceptors_ExceptionTracer.invoke(Interceptors_ExceptionTracer.java:17)

at com.sap.engine.services.ejb3.runtime.impl.AbstractInvocationContext.proceed(AbstractInvocationContext.java:179)

at com.sap.engine.services.ejb3.runtime.impl.DefaultInvocationChainsManager.startChain(DefaultInvocationChainsManager.java:138)

at com.sap.engine.services.ejb3.runtime.impl.DefaultEJBProxyInvocationHandler.invoke(DefaultEJBProxyInvocationHandler.java:172)

at com.sap.engine.services.ejb3.runtime.impl.DefaultEJBProxyInvocationHandler.invoke(DefaultEJBProxyInvocationHandler.java:99)

at com.sun.proxy.$Proxy1075.process(Unknown Source)

at com.sap.aii.af.app.mp.ejb.ModuleProcessorBean.process(ModuleProcessorBean.java:264)

at sun.reflect.GeneratedMethodAccessor909.invoke(Unknown Source)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:597)

at com.sap.engine.services.ejb3.runtime.impl.RequestInvocationContext.proceedFinal(RequestInvocationContext.java:47)

at com.sap.engine.services.ejb3.runtime.impl.AbstractInvocationContext.proceed(AbstractInvocationContext.java:166)

at com.sap.engine.services.ejb3.runtime.impl.Interceptors_StatesTransition.invoke(Interceptors_StatesTransition.java:19)

at com.sap.engine.services.ejb3.runtime.impl.AbstractInvocationContext.proceed(AbstractInvocationContext.java:179)

at com.sap.engine.services.ejb3.runtime.impl.Interceptors_Resource.invoke(Interceptors_Resource.java:50)

at com.sap.engine.services.ejb3.runtime.impl.AbstractInvocationContext.proceed(AbstractInvocationContext.java:179)

at com.sap.engine.services.ejb3.runtime.impl.Interceptors_Transaction.doWorkWithAttribute(Interceptors_Transaction.java:37)

at com.sap.engine.services.ejb3.runtime.impl.Interceptors_Transaction.invoke(Interceptors_Transaction.java:21)

at com.sap.engine.services.ejb3.runtime.impl.AbstractInvocationContext.proceed(AbstractInvocationContext.java:179)

at com.sap.engine.services.ejb3.runtime.impl.Interceptors_MethodRetry.invoke(Interceptors_MethodRetry.java:46)

at com.sap.engine.services.ejb3.runtime.impl.AbstractInvocationContext.proceed(AbstractInvocationContext.java:179)

at com.sap.engine.services.ejb3.runtime.impl.AbstractInvocationContext.proceed(AbstractInvocationContext.java:191)

at com.sap.engine.services.ejb3.runtime.impl.Interceptors_StatelessInstanceGetter.invoke(Interceptors_StatelessInstanceGetter.java:23)

at com.sap.engine.services.ejb3.runtime.impl.AbstractInvocationContext.proceed(AbstractInvocationContext.java:179)

at com.sap.engine.services.ejb3.runtime.impl.Interceptors_SecurityCheck.invoke(Interceptors_SecurityCheck.java:25)

at com.sap.engine.services.ejb3.runtime.impl.AbstractInvocationContext.proceed(AbstractInvocationContext.java:179)

at com.sap.engine.services.ejb3.runtime.impl.Interceptors_ExceptionTracer.invoke(Interceptors_ExceptionTracer.java:17)

at com.sap.engine.services.ejb3.runtime.impl.AbstractInvocationContext.proceed(AbstractInvocationContext.java:179)

at com.sap.engine.services.ejb3.runtime.impl.DefaultInvocationChainsManager.startChain(DefaultInvocationChainsManager.java:138)

at com.sap.engine.services.ejb3.runtime.impl.DefaultEJBProxyInvocationHandler.invoke(DefaultEJBProxyInvocationHandler.java:172)

at com.sap.engine.services.ejb3.runtime.impl.DefaultEJBProxyInvocationHandler.invoke(DefaultEJBProxyInvocationHandler.java:99)

at com.sun.proxy.$Proxy576.process(Unknown Source)

at com.sap.aii.af.app.listener.AFWListenerBean.onMessage(AFWListenerBean.java:430)

at sun.reflect.GeneratedMethodAccessor908.invoke(Unknown Source)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:597)

at com.sap.engine.services.ejb3.runtime.impl.RequestInvocationContext.proceedFinal(RequestInvocationContext.java:47)

at com.sap.engine.services.ejb3.runtime.impl.AbstractInvocationContext.proceed(AbstractInvocationContext.java:166)

at com.sap.engine.services.ejb3.runtime.impl.Interceptors_StatesTransition.invoke(Interceptors_StatesTransition.java:19)

at com.sap.engine.services.ejb3.runtime.impl.AbstractInvocationContext.proceed(AbstractInvocationContext.java:179)

at com.sap.engine.services.ejb3.runtime.impl.Interceptors_Resource.invoke(Interceptors_Resource.java:50)

at com.sap.engine.services.ejb3.runtime.impl.AbstractInvocationContext.proceed(AbstractInvocationContext.java:179)

at com.sap.engine.services.ejb3.runtime.impl.Interceptors_Transaction.doWorkWithAttribute(Interceptors_Transaction.java:37)

at com.sap.engine.services.ejb3.runtime.impl.Interceptors_Transaction.invoke(Interceptors_Transaction.java:21)

at com.sap.engine.services.ejb3.runtime.impl.AbstractInvocationContext.proceed(AbstractInvocationContext.java:179)

at com.sap.engine.services.ejb3.runtime.impl.Interceptors_MethodRetry.invoke(Interceptors_MethodRetry.java:46)

at com.sap.engine.services.ejb3.runtime.impl.AbstractInvocationContext.proceed(AbstractInvocationContext.java:179)

at com.sap.engine.services.ejb3.runtime.impl.AbstractInvocationContext.proceed(AbstractInvocationContext.java:191)

at com.sap.engine.services.ejb3.runtime.impl.Interceptors_StatelessInstanceGetter.invoke(Interceptors_StatelessInstanceGetter.java:23)

at com.sap.engine.services.ejb3.runtime.impl.AbstractInvocationContext.proceed(AbstractInvocationContext.java:179)

at com.sap.engine.services.ejb3.runtime.impl.Interceptors_SecurityCheck.invoke(Interceptors_SecurityCheck.java:25)

at com.sap.engine.services.ejb3.runtime.impl.AbstractInvocationContext.proceed(AbstractInvocationContext.java:179)

at com.sap.engine.services.ejb3.runtime.impl.Interceptors_ExceptionTracer.invoke(Interceptors_ExceptionTracer.java:17)

at com.sap.engine.services.ejb3.runtime.impl.AbstractInvocationContext.proceed(AbstractInvocationContext.java:179)

at com.sap.engine.services.ejb3.runtime.impl.DefaultInvocationChainsManager.startChain(DefaultInvocationChainsManager.java:138)

at com.sap.engine.services.ejb3.runtime.impl.DefaultEJBProxyInvocationHandler.invoke(DefaultEJBProxyInvocationHandler.java:172)

at com.sap.engine.services.ejb3.runtime.impl.DefaultEJBProxyInvocationHandler.invoke(DefaultEJBProxyInvocationHandler.java:99)

at com.sun.proxy.$Proxy559.onMessage(Unknown Source)

at com.sap.engine.messaging.impl.spi.ServicesImpl.deliver(ServicesImpl.java:361)

at com.sap.aii.adapter.xi.ms.XIEventHandler.onDeliver(XIEventHandler.java:1216)

at com.sap.engine.messaging.impl.core.queue.consumer.RequestConsumer.onMessage(RequestConsumer.java:75)

at com.sap.engine.messaging.impl.core.queue.Queue.run(Queue.java:1099)

at com.sap.engine.messaging.runtime.MSWorkWrapper.run(MSWorkWrapper.java:58)

at com.sap.engine.core.thread.impl3.ActionObject.run(ActionObject.java:37)

at java.security.AccessController.doPrivileged(Native Method)

at com.sap.engine.core.thread.impl3.SingleThread.execute(SingleThread.java:185)

at com.sap.engine.core.thread.impl3.SingleThread.run(SingleThread.java:302)


Harish

bhavesh_kantilal
Active Contributor
0 Kudos

My screen shot was the channel for upsert operation.

your login channel was perfect as well.

what was the change you did when you say you reimported the standard content?

also are you using the apply template option when you create the soap channels?

harish_babu5
Participant
0 Kudos

I edited the SAP mapping and connected sessionID in login response to sessionID in login response.

Today inorder to raise an OSS message, I imported the standard content again and erased all the changes.

I am not using tempplate options. I got a message that I don't have BASIS 7.02

bhavesh_kantilal
Active Contributor
0 Kudos

Would suggest you import SAP basis 702 so you can apply template. Delete the same

post the same. makes life much more easier.

harish_babu5
Participant
0 Kudos

HI Bhavesh

It's like this now, in the login response, the SessionID is sent from the Success Factors. After the PI mapping, it's coming like this.

<sessionId>$Version=0; </sessionId>

<msUntilPwdExpiration>9223372036854775807</msUntilPwdExpiration>

I have attached the Dynamic Configuration screen shot along with this.

Please check and confirm whether it was the same error you faced.

Regards

Harish

harish_babu5
Participant
0 Kudos

And this is my mapping

SFSFloginResponse_to_HCMloginResponse

The sessionid on the SFSF is not mapped, instead they have used two UDFs. Perhaps I can try by concataneating the second UDF with JSESSIONID

Regards

Harish

bhavesh_kantilal
Active Contributor
0 Kudos
  • The dynamic configuration is having cookie[0] . Not sure why it comes like that in your case. Recheck the comminicatiion channel And see if you have some typo.
  • if you plan to change the mapping of SAP, the simplest change is the change I have mentioned as in my screen shot. Have you tried to make the mapping as I have previously suggested and shared a screen shot?
bhavesh_kantilal
Active Contributor
0 Kudos

Hi Harish,

To add to my previous response, the good news from your Dynamic Configuration says, that the issue I have with my SF tenant does not occur on yours as the entire Cookie is available including the JESSIONID in a single line.,

What you would need to investigate is - why is Dynamic Configuration having this as SetCookie[0].

This Dynamic Configuration is set in the Login SOAP Axis Channel using the dcres and dcres2 modules / handlers. From your previous screen shot this was perfect and hence please do re-check if this is set correctly in your new set up.

From what I see i see not reason for a mapping change in your case ( In our case this was needed as we use a Non Supported SF tenant and thats a bug on the same Tenant ).

Regards

Bhavesh

harish_babu5
Participant
0 Kudos

Hi Bhavesh

I have raised an OSS message and we still are unable to figure that out. I will update once it is solved. Now that I raised an OSS message I reverted back to the standard content as it was when downloaded from market place

I am not sure about the non supported SF tenant. How do I confirm that?

I was checking  an SAP document. The axis module configurations in that is vastly different to the channel template. provided by SAP. When I try that I am getting many errors. I wonder which I should follow?

Regards

Harish Babu

bhavesh_kantilal
Active Contributor
0 Kudos

Hello Harish,

Did you check why the DynamicConfiguration comes as SetCookie[0] instead of SetCookie? This is what is causing the issue.

The default configuration from SAP as per SFIHCM01 should work in your case as the issue I have is that my HTTP Header has multiple Cookie's when my SF Tenant responds back to me.

In your case, that is not the case and hence I would say focus on figuring out why SetCookie[0] is being set when the module configuration for DynamicConfiguration says - SetCookie.

Regards

Bhavesh

harish_babu5
Participant
0 Kudos

Hi Bhavesh

After a long troubleshooting the error is resolved and it's working fine!

Fisrtly, there was problem with the standard content.

Note 1869807 -SFSFI: PI Content Correction for HTTP Cookie Handling

This deals with the incorrect handling of cookies.

In this two patches are mentioned. I downloaded them and applied on the ESR.

Secondly, applied note 1838921 in PI system which provides some correction for SOAP Axis adapter too.

Finally, I had to do some changes as per the document attached to the first note. They have provided two screenshots for the LoginChannel and I updated accordingly.

After this the interface started working perfectly.

Thanks a lot for the help

Regards

Harish

Answers (2)

Answers (2)

markangelo_dihiansan
Active Contributor
0 Kudos

Hi Harish,

Can you check if in the Upsert request, the sessionId is included in the payload? We have had the same trouble here and the solution was to create another program that will include the sessionId. Another solution would be to use the SFSF adapter.

Regards,

Mark

harish_babu5
Participant
0 Kudos

Hi Mark

I have read that the standard content will not work with SFSF adapter.

If I am to use that, I have to create DT, MT, SI and also the proxy code, right?

The scenario is not working and I face issues with the module configuration in SOAP Axis Receiver communication channel too

Harish

0 Kudos

Hi Harish,

Please check note 2150199 - "Invalid SFAPI Session"...

Best regards,

Bence