Skip to Content

Connecting Successfactors APIs Using SOAP UI

Dear All,

Many of us are now struggling on how we can call or rather to check the data on the Successfactors API (called as SFAPI) from outside of SFSF. In order to do this we can simply achieve by using SOAP UI tool.

This is a quick reference document, primarily shows the steps on how to check the SFAPIs using SOAP UI. While implementing the integration with Successfactors, this will be very much helpful in terms of checking and testing on the SFAPIs.

Below are the few simple steps by which we can easily connect and fetch the data(verify) from Successfactors(SFSF) using SOAP UI tool.

Case: We will first fetch some records from User API and update the First Name of a specific User.

1. Install SOAP UI.

  Capture.JPG

2. Open the SOAP UI. Click on File -> New SOAP Project.

3. Enter a meaningful Project Name.

4. Put the specific url corresponding to the SFSF data center on the Initial WSDL location from the below list (You can also save the WSDL file on your system    and take that file using the Browse option).

Here we are using:https://salesdemo4.successfactors.com/sfapi/v1/soap?wsdl

Capture.JPG

5. Press OK.

    Capture.JPG

6. In case there is a problem in direct communication, a proxy needs to be set up to connect to this webservice from SOAP UI.

    Capture.JPG

7. The project will be created and it can be viewed on the left hand side. Exploring the project we can see the list of operations to execute them.

Login – To login into the Successfactor. A session ID will be returned once the login operation is successful. This SessionID will be required for all the next subsequent operation.

Logout – Logout from the session.

Query – For Querying the Data from the APIs. First 250 records will be fetched.

QueryMore – If there are more than 250 records and query returns first 250 records then QueryMore can be used to fetch the next set of records.

Upsert – Data Manipulation, Update and Insert.

Insert – Insert Data

Update – Update Data.

First of all, we have to execute the login method/operation. Once it is successful, a session ID will be returned. We have to use this sessionID every time we execute any opretaion. For this business case scenario, we will first use the login operation then Query operation to fetch the records and then we will use Update operation to update one field for a particular record.

8. Login Operation: Explore Login -> double click on the request. On the right hand side request page, put the CompanyID,Username and password that we use to login in the successfactor. Enter the proper endpoint url in the End Point url section. Here it is : Web Services

Copy the SessionID from the response.

    Capture.JPG

9. Query Operation: Explore Query-> double click on the request. On the right hand side request page, put the query into the QueryString parameter. This query is similar to the same as pl/sql query language. Under the param section use name = maxRows and Value =5 to fetch only 5 recrds from the Successfactors.

Click on the Header Section->click on the plus sign to add a custom header on the HTTP Header. Write Cookie on the LHS and on the RHS put JSESSIONID=<copied session id from the login response>.

Please see the screenshot for more clarity.

    Capture.JPG

10. Update Operation: Now let’s consider we want to update the first name for one of the User (Example USR-67).

                                  Capture.JPG

    Now we want to change the first Name to John. In order to do this, let’s use Update operation. Explore the Update operation, click on request. Use the      same JsessionID into the Header section of the HTTP request. Use the type, id and first name as shown in the below screenshot.

              Capture1.JPG

    Response shows that the update operation is now successful, In order to check the updated records we can also check this by Query operation using a where clause.

11. Querying the Updated Record: Now we can again query the data based on the id to check whether the record has been updated successfully or not. The query string will have the where clause to fetch the right record. Here for this case the query is – Select firstName, lastName From User Where id = ‘USR-67’.

Remember to provide the same SessionID in the HTTP header property. Follow the below screenshot.

              Capture.JPG

This shows that Successfactors APIs can be accessed from outside world using SOAP. This tool (SOAP UI) shows on how to access the SFSF via the SFAPIs in case we want to quickly check the data.

Note: We can also create a Test suite in SOAP UI to test this.

Assumption: The Login User has to have the access to the SFAPI.

Thanks

14 Comments
You must be Logged on to comment or reply to a post.
  • Hi Abhradeep

    This is really helpful and very useful, thanks for sharing your efforts!

    What would you use for OData API’s?

    Regards

    Stuart

    • Great blog Abhradeep, to the point and no rehashing of SAP documents. Thank you.

      Stuart,  SAP SuccessFactors provides these API to interface with their system. We can create and consuming data via these API and they are addition to the SOAP API, for simpler and better interfacing.We can use any middleware tool since they follow standard OData protocol. The popular ones we use with SuccessFactors are Dell Boomi, SAP HCI, SAP PI, and there are more. You can find more details at, http://help.sap.com/hr_api

    • Hi Abhradeep, Though I’m able to login directly into the webpage of successfactors, i’m unable to login when i test the Login wsdl file through SOAP UI.

      Below is the error i do get

      INFO:Error getting response for [SFAPISoapBinding.login.Request 1]:java.net.ConnectoException: Connection refused; connect

      Can you please let me know why i’m unable to connect?

      Thanks,

      Raj

  • Hello all,

    Could you help me? Thank you!!

    I had been testing the following service in Soap UI from Successfactors certificate:

    – SFSFSessionHandlingLoginQueryResult.

    The error in Soap UI:

       <SOAP:Body>

          <SOAP:Fault>

             <faultcode>SOAP:Server</faultcode>

             <faultstring>Server Error</faultstring>

             <detail>

                <s:SystemError xmlns:s=”http://sap.com/xi/WebService/xi2.0“>

                   <context>XIAdapter</context>

                   <code>ADAPTER.JAVA_EXCEPTION</code>

                   <text>com.sap.engine.interfaces.messaging.api.exception.MessagingException: com.sap.aii.af.service.mapping.MappingException: Mapping failed

      at com.sap.aii.adapter.soap.web.SOAPHandler.processSOAPtoXMB(SOAPHandler.java:773)

    I had verified the mapping and I didn’t find any error… Have you ever seen that? Could you help me to solve this problem?

    Thank you all!

  • Hello,

    I am try to query the records from successfoactors instance using soap request.

    select  Id, start_date from EmpEmployment where Id = ‘User-12’


    when i send request with above query which is working and retruning responce XML but when i send request with the same query and changing the where condition with date filed, I’m getting error

    <ns2:errorCode>QUERY_FAILURE</ns2:errorCode>

    <ns2:errorMessage>Query failure! Error: Failed to query</ns2:errorMessage>

    XML Request sent:

    <soapenv:Envelope xmlns:soapenv=”http://schemas.xmlsoap.org/soap/envelope/” xmlns:urn=”urn:sfobject.sfapi.successfactors.com”>

       <soapenv:Header/>

       <soapenv:Body>

          <urn:query>

             <urn:queryString>select  Id, start_date from EmpEmployment where start_date = ‘1998-10-05’</urn:queryString>

             <!–Zero or more repetitions:–>

             <urn:param>

                <urn:name>maxRows</urn:name>

                <urn:value>800</urn:value>

             </urn:param>

          </urn:query>

       </soapenv:Body>

    </soapenv:Envelope>


    can any one help me with an example to query records with date,datetime field in where condition?


    Thank you,

    Sathish

  • Hi Abhradeep,

    You are great Abhradeep.

    Really, this is very useful blog for who is working and searching document of SuccessFactor API (SFAPI) SOAP web service.

    Thanks for sharing your efforts!

    Thanks & Regards

    Ananth

  • For any kind of integration with SAP Successfactors , this is the must have course.
    The course Details at: https://www.youtube.com/watch?v=1OtUTsHi_jE

    Such a comprehensive course and taught in from the scratch, just the one I would recommend for any integration consultant and architect; its made available with money back guarantee , like it or money will be returned in 30 days.
    Following is the course content, wherein more than 90% of the sessions are having hands on practical sessions and not only involving ppt slides:
    Section 1: Introduction
    1. Introduction
    Section 2: SFAPI : Successfactors SFAPI URI and wsdl
    2. What is the Data Center URL
    3. Data Center URL significance
    4. Gathering Data Center URL
    5. Gathering Data Center URL continuation
    6.* Further Steps , SFAPI URL and others
    7. Formulation of SFAPI URL
    8. SFAPI wsdl
    9. SFAPI Enabled?
    Section 3: Soap UI Set Up
    10. SOAP UI Download and Install
    11. SOAP UI Configuration changes, in view of Successfactors’ TLS v1.0 disablement
    Section 4*: Creating an API User ID to make SFAPI call
    12. Creating an User ID for the SFAPI calls
    13. Creating User IDs via Option 1(Provisioning)
    14. Creating API User IDs via Option 2.1 (Successfactors Application UI)
    15. Creating API User IDs Option 2.2 (Import Employee via SFSF Application UI)
    Section 5*: Setting the Password for the API User
    16. Setting the Passwords for the API User IDs created above
    17. Setting the Password for the API User – Option 1.1
    18. Setting the Password for the API User – Option 1.2
    19. Setting the Password for the API User – Option 2
    20. Setting Password for the User – Option 3 and 4
    21. Considerations when SSO is enabled
    22. Considerations for SSO – Enabling the loginMethod field
    23. Making First SFAPI call !
    Section 6: SFAPI Methods And Parameters
    24. SFAPI Methods
    25. Understanding SFAPI wsdl
    26. Preparation for the Hands ON Sessions on API calls
    27. Setting API User login exception
    28. Making the call to SFSF to retrieve the List of the SFAPI SFObjects
    29. Making the SFAPI Call for Session Management and MetaData Inspection methods
    30. SFAPI call for Data Query Category (query and queryMore)
    31. SFAPI call for Data Manipulation Category (upsert call)
    32. SFAPI Call for Asynchronous Operations
    Section 7: OData : Tools to make the OData call
    33. Postman Set Up
    34. SOAPUI : Making Rest Calls from SoapUI
    35. Advanced Rest Client from Chrome
    36. Chrome/FireFox Browser
    Section 8: Odata Basics (with relation to Successfactors Odata service)
    37. Odata Introduction and Structure Components
    38. OData Basics : Service Document vs. Service Metadata Document
    39. OData Basics : Entity Metadata Document-comparison with other documents
    40. OData Basics : How to gather Service Document , Service and Entity Metadata Docs
    41. OData Basics : Understanding Service Metadata Document – EntitySets , EntityType
    42. OData Basics : Understanding Service Metadata Document – AssociationSet and Type
    43. OData Basics : Understanding Service Metadata Document – Navigation Property
    44. OData Basics : Understanding Service Metadata Document – Function Imports
    45. OData Basics : Understanding Entity Metadata Document
    Section 9: OData URI
    46. OData URI : Introduction and How to gather the service root uri for Odata calls
    47. OData URI : URI and its components – All components
    48. OData URI : URI and its components – Resource Path -part I
    49. OData URI : URI and its components – Resource Path -part II
    50. OData URI : URI and its components – Query Options
    Section 10: OData Query Options
    51. OData Query Options: $orderby
    52. OData Query Options: $top and $skip
    53. OData Query Options: $top + $skip combined with $orderby
    54. OData Query Options: $filter – Introduction
    55. OData Query Options: $filter-supported Logical Operators
    56. OData Query Options: $filter-supported Arithematic Operators
    57. OData Query Options: $filter-supported Grouping ,Customized & String Operators
    58. DateTime and DateTimeOffset DataType fields
    59. OData Query Options: $filter – supported DateTime Operators -Part I
    60. Time DataType fields
    61. OData Query Options: $filter-supported DateTime Operators -Part II
    62. OData Query Options: $filter-supported Numeric Datatypes
    63. OData Query Options: $filter-supported Boolean Datatype
    64. OData Query Options: $expand
    65. OData Query Options: $format
    66. OData Query Options: $select
    67. OData Query Options: $inlinecount
    Section 11: OData API User Permissions
    68. OData : creating an API user and assigning the password
    Section 12: Effective Dated Entities
    69. Effective Dated Entities – What are They?
    70. Effective Dated Entities – How are they defined?
    71. Effective Dated Entities – The Concept
    72. Effective Dated Entities – Advanced Concept
    73. Different Modes in which Data can be entered in Successfactors
    74. Concept of fromDate, toDate and asOfDate for Effective Dated Entities
    75. Concept of fromDate, toDate and asOfDate for Advanced Effective Dated Entities
    76. Initial data entry : Impact on effective dated objects
    77. Correction Mode data entry : Impact on effective dated objects
    78. Edit Mode data entry : Impact on effective dated objects
    79. Insert and Delete Mode data entry :Impact on effective dated objects
    Section 13: Effective Dated Entities behavior with Navigation
    80. Effective Dated Entities behavior with Navigation : Rules
    81. Effective Dated Entities behavior with Navigation : Advanced navigation concepts
    Section 14: Effective Dated Entities : How can they be queried
    82. Effective Date Entities: multiple parameters available to query ’em
    83. Effective Dated Entities: Querying involving from/to/asOfDate
    84. Effective Dated Entities: Querying involving start/endDate
    85. Effective Dated Entities: Logic system follows when from/to/asOfDate are present
    86. Effective Dated Entities: lastModifiedOn\DateTime parameters Rules
    87. Effective Dated Entities-filter by lastModifiedDateTime scenarios Part-I
    88. Effective Dated Entities-filter by lastModifiedDateTime scenarios Part-II
    89. Effective Dated Entities-filter by lastModifiedDateTime scenarios Part-III
    90. Effective Date Entities-filter by lastModifiedDateTime – Final Algorithm
    Section 15: Effective Date Entities – Behavior with $expand
    91. Effective Dated Entities behavior with $expand – Rules
    92. Effective Dated Entities behavior with $expand – Further understanding – partI
    93. Effective Dated Entities behavior with $expand – Further understanding – partII
    Section 16: OData APIs : Push Operations
    94. OData APIs : Push Operations : Overview
    Section 17: OData APIs : Push Operations : INSERT
    95. Section Overview : OData APIs : INSERT
    96. INSERT : Is the operation supported by entity, required fields, URI, HTTP Verb
    97. INSERT : Request Body : Are all fields supported for the operation?
    98. INSERT : Allowable Field Values – Data Types and MaxLength
    99. INSERT : Allowable Field Values – PickLists
    100. INSERT : Allowable Field Values – MDF Objects
    101. INSERT : Allowable Field Values – Navigation Links
    102. INSERT : Allowable Field Values – OptionId or ExternalCode (PickList values)
    103. INSERT : Perform Insert on the Entity via OData API
    104. INSERT : Can Multiple Calls be posted in one OData Call
    Section 18: OData APIs : Operations on Links
    105. OData APIs : Links Overview
    106. OData APIs : Query Operation On Links/Navigation
    107. OData APIs : Create Operation on Links
    108. OData APIs : Delete Operation On Links
    109. OData APIs : Update Operation On Links
    Section 19: OData APIs : Push Operations: UPDATE
    110. UPDATE : Perform Update on the Entity via OData API
    111. UPDATE : Perform a Replace Operation
    112. UPDATE : Perform a Merge Operation
    113. UPDATE : Some additional differences between Replace and Update Operation
    Section 20: OData APIs : Push Operations : UPSERT
    114. UPSERT : Introduction and initial call
    115. UPSERT : Demystifying User and PerPerson relationship – a specific challenge
    116. UPSERT : Further discussion over Upsert
    117. UPSERT : processing parameter purgeType (full)
    118. UPSERT : Which all entities support purgeType=full
    119. UPSERT : processing parameter purgeType (incremental)
    120. UPSERT : purgeType behavior with NO_OVERWRITE property of Entity
    121. UPSERT : Understanding the EmpGlobalAssignment Object
    122. UPSERT : processing parameter suppressUpdateOfIdenticalData
    123. UPSERT : processing parameter fileLocale
    124. UPSERT : Multiple Requests in one call
    125. UPSERT : Multiple Inline Entity Types in one call -Part 1
    126. UPSERT : Multiple Inline Entity Types in one call -Part 2
    127. UPSERT : Avenue for Performance Improvement of Upsert call
    Section 21: OData APIs : Operation : DELETE
    128. DELETE : Deleting the entities

    129. Use Case : Creating and Querying PickList entries
    130. Use Case : Function Import : Add or remove users from the Static Group

  • New to SAP Successfactors.  Followed this article to query the Candidate entity and was successful.  However I have not been able to insert .  Can you please provide an example of an insert or update.  What are businesskeys and what needs to go in there.  The following is what I see for update.

    Is it better to use the SOAP API or the Odata API.

     

    <urn:update>
          <urn:type>Candidate$201</urn:type>
          <!–1 or more repetitions:–>
          <urn:sfobject>
               <!–You have a CHOICE of the next 2 items at this level–>
               <!–Optional:–>
               <urn:id>?</urn:id>
               <!–Optional:–>
               <urn:businessKeys>
                    <!–You may enter ANY elements at this point–>
               </urn:businessKeys>
               <urn:type>?</urn:type>
               <!–You may enter ANY elements at this point–>
          </urn:sfobject>

    </urn:update>

     

    Thank You.