End-To-End Integration with SAP Successfactors Cloud HCM Intelligent services
This document guides you through End-to-End Integration & setup of SAP Cloud HCM Intelligent Services. For Integrating Successfactors Intelligent services we used third party cloud Middleware (Boomi) platform. Boomi platform will host SOAP based Web-services that will be consumed by Successfactors Intelligent services.
Here are few assumptions:
*********************************
Intelligent services are enabled in your Instance from Provisioning tool.
Proper RBP settings are enabled in your demo Instance to Setup/Access Events (Intelligent Services). Detailed Instructions can be found in Admin/implementation documents.
Admin document reference: https://websmp205.sap-ag.de/~sapidb/012002523100013479612015E
Implementation guide: https://websmp101.sap-ag.de/~sapidb/012002523100013990962015E
Step by step procedure to raise Intelligent Service Events from EC.
1) Per recommendations in Administration guide (Publishing Events Using SuccessStore), please import pre-defined Smart rules into demo Instance using Admin tool.
2) Verify rule are successfully imported into demo instance.
3) Associate Imported rule to entity that should trigger this event. In our test we used “Change Manager event” service.
Admin Center >> Manage Business Configuration >> JobInfo >> Trigger Rules >> Save
Make sure for Base Object, Job Information Model is selected.
4) Next, define Subscriber that will consume this Intelligent service.
Admin Center >> Event Notification Subscription >> Subscriber Tab >> Add Subscriber (top corner). Provide Subscriber Id, Name. Group and Client are optional fields and then click Save.
5) Define Event Listener (SEB External event). This is the final step in EC to define Subscriber and Event notification.
Authentication to Webservice (SOAP based) is Basic. End point to Notification URL for this example is defined in Boomi Platform.
Now that we have completed Intelligent services setup in EC, its time to define Event Listener in Third Party platform. We used Boomi Platform for this demo but it can built in any middleware.
Define Webservice Listener in Boomi Platform. Complete steps are attached in document.
Step 1: Select Web Service Connector object from design pallet. Set Action as Listen
Step 2: Add operation to Connector. For this test I loaded Request and Response from Intelligent Service Implementation Guide. Request and Response profiles are attached.
Step 3: Mapper that consumes Request from Intelligent service and format’s return response for Confirmation. Sample request and response are attached for reference.
Step 4: Deploy Boomi process and set Web-service settings. Make sure Authentication is [Basic] and create user/token for Web-service authentication. This Username and Token is what is used in EC Subscriber/SEB External Event settings.
This completes SOAP Web-service setup in Middleware.And now Web-Service is ready to Intelligent service Events.
As mentioned earlier for this exercise we are going to use “Change Manager Event” Intelligent Service. To fire this event (Change Manager) we will have to “Take Action” on any Employee in EC and change his/her supervisor. It is assumed that when we “Take Action” in EC workflow steps are followed. After workflow steps are complete Event will be raised in Employee central.
If all the steps are followed an Event should raise in EC. Event raised can be viewed from Event Notification Audit Log under Admin Tools/Center.
Admin Center >> Event Notification Audit Log.
To see that service is successful invoked, view Event details and check request and response.
SOAP Request:
SOAP Response:
Boomi Web-services log showing that Intelligent Service was able to trigger Event upon Manager change in EC.
-Bhargav
Thanks for posting Bhargav. I was looking for more information on how to set up and test Intelligent Services. This is very timely and a good use case.
Thanks Permanand. Glad it was Informative.
We configured this also but keep getting this error message, any idea's why?
Looks like Webservice listener is not active. Are you able to invoke webservice from any SAOP client ?
It is working now. The authentication was not set correctly.
Bram
I have no authorization, It is connected directly to webserver where the service is running and there is no access from any place. (I'm not using boomi in my scenario)
I also get same error.
Can you help me on point # 5 where the end point URL is mentioned,
Should we add "Simple URL Path" with end point URL or "Soap URL Path"?
also at the end of the error message i see "Invalid HTTP server response [404] - Unknown operation for /execute"
Please share more information on these areas. Thank you in advance.
Regards
Velmurugan
Can anyone help me with this error?
Are you able to invoke your WebService from SOAP client ?
Yes.. I am able to invoke WebService and the process is running without any result. But in SF side i can see above error under response text tab.
-Vel
Please check namespace in original attached xml. I had difficultly initially with wrong namespaces.
-Bhargav
The namespace details are correct. I tried running again today and it is different error now,
Caused by: org.jboss.remoting.CannotConnectException: Can not connect http client invoker. Response: OK/200.
But Boomi process has been invoked and i could see the request xml data. However response is showing this error in SF page.
-Vel
Did you return response back to calling Web-service from EC ?
yes.. there is a return response mentioned already as per this blog. And the process is also getting triggered in Dell Boomi.
When i View request xml document in Boomi, i dont see "changeFields" parameter's value. I can see other values of request XML, like entity, date, publishedBy, etc.
and form SF event notification audit log shows,
"Exception=[Cannot process response message]"
"Cannot obtain SOAPBody from SOAPMessage"
Not sure where and what i am missing here.
-Vel
Hi, This is very informative. Thank you.
When configured the same, got below error message. Please help me if am missing anything...
Caused by: java.lang.NumberFormatException: For input string: "JobInformation"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:495)
at java.lang.Integer.valueOf(Integer.java:585)
at com.sun.xml.bind.DatatypeConverterImpl._parseInt(DatatypeConverterImpl.java:104)
at com.sun.xml.bind.v2.model.impl.RuntimeBuiltinLeafInfoImpl$18.parse(RuntimeBuiltinLeafInfoImpl.java:683)
at com.sun.xml.bind.v2.model.impl.RuntimeBuiltinLeafInfoImpl$18.parse(RuntimeBuiltinLeafInfoImpl.java:686)
at com.sun.xml.bind.v2.runtime.reflect.TransducedAccessor$CompositeTransducedAccessorImpl.parse(TransducedAccessor.java:241)
at com.sun.xml.bind.v2.runtime.unmarshaller.LeafPropertyLoader.text(LeafPropertyLoader.java:61)
From error it has to do with Data Type conversion. Make sure right data type values are returned to Webservice.
Bhargav
Thanks Bhargav for the information. Tested this in my instance. Works great 🙂
Dear Bhargav,
thank you much for the Blog Post.
My setup is working 50%, it send Data from Successfactors to Boomi and Boomi receive the Information well. But I'm not able to send a valid Response from Boomi to SF.
In Event Notification Log I receive following Response. I'm not sure which namespace is valid, in your Blog it's http://notification.event.successfactors.com but I found some Posts with namespace = com.successfactors.event.notification.
Can you be so kind and post a sample withe the XML files?
Kind regards,
Christian
Exception=[Cannot dispatch message]
StackTrace=[javax.xml.ws.WebServiceException: Cannot dispatch message
at org.jboss.ws.core.jaxws.client.DispatchImpl.handleInvokeException(DispatchImpl.java:369)
at org.jboss.ws.core.jaxws.client.DispatchImpl.invoke(DispatchImpl.java:136)
at com.successfactors.alert.app.endpoint.soap.SoapEndpoint.deliver(SoapEndpoint.java:159)
at com.successfactors.outbound.component.JAXWSProducer.process(JAXWSProducer.java:54)
at org.apache.camel.util.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:61)
at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:460)
at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:190)
at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:109)
at org.apache.camel.processor.MulticastProcessor.doProcessParallel(MulticastProcessor.java:823)
at org.apache.camel.processor.MulticastProcessor.access$200(MulticastProcessor.java:84)
at org.apache.camel.processor.MulticastProcessor$1.call(MulticastProcessor.java:319)
at org.apache.camel.processor.MulticastProcessor$1.call(MulticastProcessor.java:304)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:812)
Caused by: java.io.IOException: Could not transmit message
at org.jboss.ws.core.client.RemotingConnectionImpl.invoke(RemotingConnectionImpl.java:211)
at org.jboss.ws.core.client.SOAPRemotingConnection.invoke(SOAPRemotingConnection.java:77)
at org.jboss.ws.core.jaxws.client.DispatchImpl.invokeInternalSOAP(DispatchImpl.java:240)
at org.jboss.ws.core.jaxws.client.DispatchImpl.invokeInternal(DispatchImpl.java:169)
at org.jboss.ws.core.jaxws.client.DispatchImpl.invoke(DispatchImpl.java:132)
... 14 more
Caused by: org.jboss.remoting.CannotConnectException: Can not connect http client invoker. Cannot create SOAP envelope from: {http://notification.event.successfactors.com}ExternalEventResponse. Response: OK/200.
at org.jboss.remoting.transport.http.HTTPClientInvoker.useHttpURLConnection(HTTPClientInvoker.java:380)
at org.jboss.remoting.transport.http.HTTPClientInvoker.transport(HTTPClientInvoker.java:149)
at org.jboss.remoting.MicroRemoteClientInvoker.invoke(MicroRemoteClientInvoker.java:143)
at org.jboss.remoting.Client.invoke(Client.java:1936)
at org.jboss.remoting.Client.invoke(Client.java:789)
at org.jboss.ws.core.client.RemotingConnectionImpl.invoke(RemotingConnectionImpl.java:190)
... 18 more
Caused by: java.lang.IllegalArgumentException: Cannot create SOAP envelope from: {http://notification.event.successfactors.com}ExternalEventResponse
at org.jboss.ws.core.soap.SOAPEnvelopeImpl.<init>(SOAPEnvelopeImpl.java:70)
at org.jboss.ws.core.soap.EnvelopeBuilderDOM.build(EnvelopeBuilderDOM.java:124)
at org.jboss.ws.core.soap.EnvelopeBuilderDOM.build(EnvelopeBuilderDOM.java:96)
at org.jboss.ws.core.soap.MessageFactoryImpl.createMessage(MessageFactoryImpl.java:266)
at org.jboss.ws.core.soap.SOAPMessageUnMarshaller.read(SOAPMessageUnMarshaller.java:84)
at org.jboss.remoting.transport.http.HTTPClientInvoker.readResponse(HTTPClientInvoker.java:562)
at org.jboss.remoting.transport.http.HTTPClientInvoker.useHttpURLConnection(HTTPClientInvoker.java:334)
... 23 more
].
Response XML:
<ExternalEventResponse xmlns="com.successfactors.event.notification">
<responsePayload>
<entityId>EmpJob</entityId>
<status>0</status>
<statusDate>2017-02-01T00:00:00-05:00</statusDate>
<statusDetails>Success</statusDetails>
</responsePayload>
</ExternalEventResponse>
Dear Bhargav,
thank you for your Feedback.
I've add two namespaces to my XML Response Profile:
Then assigned 1. to the Envelope and Header Element. And assigned 2. to ExternalEventResponse.
With this two different namespaces I'm able to send Response back from Boomi to SF EC.
I try it with the namespace from your screenshot "com.successfactors.event.notification" which is not working. I'm a beginner with XML and namespace, why you use the reverse order?
Attached you find Screenshots from my XML which is now working.
Thank you for your support and your Blog Post, which was a great help.
Regards,
Christian
Hi Bhargav,
We have done the setting as required on SF system but still don't see any events in Even Notification Log and also temperorily I assigned a one sample SOAP URL . Can you let me know how this mapping of fields from SF Event Publishing to our developed SOAP URL is mapped .
Regards,
Kishore.S
I'm sorry Kishore to mention that I didn't follow your question.
To raise events in EC did you make sure that you are selecting right model ?
<<<< Make sure for Base Object, Job Information Model is selected. >>>
Thanks,
-Bhargav
Hi Bhargav,
I am able to see the event in the event audit log.
Would it be possible to elaborate regarding the request and response we need to design from middleware for example if I use SAP PI system instead of Boomi . I am assuming that I need to build a synchronous WSDL with the request and response .
Regards,
Kishore.S
Hi Kishore,
From the time I wrote this blog quite a few enhancements were maid to Intelligent services but basic concept is same.
I'm not sure if WSDL with request and response is hosted some where in documentation but, if it is not avail please open support ticket with SAP and ask for WSDL on event notifications.
If I discover anything I will update this note.
Thanks,
-Bhargav
Hi,
Really helpful article. This is related to EC, curious if you or anyone have experience doing the same with other modules such as recruitment? I've tried following the same steps steps with recruitment rules but experience some limitations in my way..
Thanks,
Ines
Please look into integration center which has some of inbuilt features for RCM module.
Bhargav
Hi Bhargav,
Those detailed admin and implementation guide links doesnt works. Do you have any alternative links which can be used here.
Many Thanks!!