Announcing the Saviynt Knowledge Exchange unifying the Saviynt forums, documentation, training,
and more in a single search tool across platforms. Read the announcement here.

Success factor Reconciliation not working with specific user filter

Diwakar
Regular Contributor
Regular Contributor

We have Successfactor url that is being used for all users reconciliation to Saviynt. However when same url is being used for single user then reconciliation is not working. We already checked the url in postman its giving the response. Below is the url we are using for single user recon.

https://api2.successfactors.eu/odata/v2/EmpJob?$select=businessUnit,businessUnitNav/name,companyNav/... eq 'a85****')&userNav/status%20in%20't','f' &$format=json

 

Please help to check if we are missing something when using the url for specific user.

31 REPLIES 31

SB
Saviynt Employee
Saviynt Employee

Can you add the url value in a text file and share. Looks like some values are getting trimmed. Also, can you share the log file for the import where you ran for 1 user.


Regards,
Sahil

Diwakar
Regular Contributor
Regular Contributor

@SB Please find the attached url value in the text file and logs. Please suggest next.

DixshantValecha
Saviynt Employee
Saviynt Employee

Hi @Diwakar,

There are a few things you might want to check:

  1. User ID: Ensure that the user ID ‘a85****’ you’re using in the URL is correct and exists in SuccessFactors.
  2. API Permissions: Check if the API user has the necessary permissions to access the data of the specific user.
  3. Data Availability: The user might not have any data under the ‘EmpJob’ entity in SuccessFactors. You can check this by logging into SuccessFactors and manually checking the user’s data.
  4. Filtering: The filters you’re using in the URL might be too restrictive, causing no data to be returned. You can try removing some filters to see if that helps.
  5. Postman Settings: Since the URL is working in Postman, make sure that the same headers and settings are being used in Saviynt.

Please share details requested by @SB further assitance.

Diwakar
Regular Contributor
Regular Contributor

@SB @DixshantValecha 

There are a few things you might want to check:

  1. User ID: Ensure that the user ID ‘a85****’ you’re using in the URL is correct and exists in SuccessFactors.---It Exists in Successfactors.
  2. API Permissions: Check if the API user has the necessary permissions to access the data of the specific user...API got all necessary permissions.
  3. Data Availability: The user might not have any data under the ‘EmpJob’ entity in SuccessFactors. You can check this by logging into SuccessFactors and manually checking the user’s data....We verified user is present in SF.
  4. Filtering: The filters you’re using in the URL might be too restrictive, causing no data to be returned. You can try removing some filters to see if that helps.-------The same filter is working in postman and we are getting the user response.
  5. Postman Settings: Since the URL is working in Postman, make sure that the same headers and settings are being used in Saviynt.-----Exactly same headers and settings are used in Saviynt as well.

Logs and url are shared in the text file as well. Please suggest next.

GSR
New Contributor III
New Contributor III
 

 

Please try

$filter=employmentNav/userNav/username+eq+'a85****'+and+employmentNav/userNav/status%20in%20't','f' &$format=json

 

Hi @GSR,

Please let me know what you are requesting for.

Diwakar
Regular Contributor
Regular Contributor

@GSR This is working. However job is not running properly its being stopped without end-date. Please suggest if we could modify in another way.

DixshantValecha
Saviynt Employee
Saviynt Employee

Hi @Diwakar,

The logs show an attempt to make a request to the SuccessFactors API endpoint https://api2.successfactors. with a complex query involving various select, expand, and filter parameters. However, the logs indicate an error related to an illegal character in the query at index 2699.

Here are a few observations and suggestions based on the provided logs:

  1. Illegal Character Error: The error suggests there is an illegal character in the query at index 2699. You may want to review the query at that position in the URL to identify and fix any issues with special characters or formatting.

  2. Query Complexity: The query being sent to the SuccessFactors API is quite complex and involves multiple parameters. Ensure that the query is correctly formatted, and all parameters are specified according to the SuccessFactors API documentation.

DixshantValecha
Saviynt Employee
Saviynt Employee

Hi @Diwakar,

Kindly review the updated URL I have provided, where I have implemented some changes. Please validate the modifications and inform us if additional details are required for further clarification. Your prompt feedback is appreciated.

Diwakar
Regular Contributor
Regular Contributor

@DixshantValecha 

I tried with your updated url however its still not working and got some different error in postman only. Please suggest next.

Diwakar_0-1701185006815.png

 

SB
Saviynt Employee
Saviynt Employee

Can you escape the $ in your url and then try

\\$


Regards,
Sahil

Diwakar
Regular Contributor
Regular Contributor

@SB I removed $ from the url and then run the postman but its giving some wierd output with some junk values and in Saviynt job is failing. Attaching the url.

SB
Saviynt Employee
Saviynt Employee

We don't need to remove the $ but just escape it using \\. So your url value would look something like below only in the JSON created for Saviynt. Please update the $ where ever it is used in the url and then try. If it still does not work, share the url value you tried with in notepad file.

status in ('t','f')&\\$format=json

 


Regards,
Sahil

Diwakar
Regular Contributor
Regular Contributor

@SB Its still the same, attaching updated url. Please suggest next.

Thanks,

Diwakar.

can you try encoded url

 

https://api2.successfactors.eu/odata/v2/EmpJob?$select=businessUnit,businessUnitNav/name,companyNav/countryOfRegistrationNav/externalName_defaultValue,companyNav/countryOfRegistrationNav/numericCountryCode,companyNav/externalCode,companyNav/name,costCenter,customString22Nav/externalCode,customString22Nav/externalName_defaultValue,customString44,customString50Nav/externalCode,customString50Nav/externalName,department,departmentNav/name,division,divisionNav/name,emplStatusNav/picklistLabels/label,employeeClassNav/picklistLabels/label,employmentNav/empJobRelationshipNav/lastModifiedOn,employmentNav/endDate,employmentNav/lastModifiedOn,employmentNav/personNav/customString1Nav/externalCode,employmentNav/personNav/emergencyContactNav/lastModifiedOn,employmentNav/personNav/homeAddressNavDEFLT/lastModifiedOn,employmentNav/personNav/lastModifiedOn,employmentNav/personNav/personalInfoNav/customString7Nav/picklistLabels/label,employmentNav/personNav/personalInfoNav/firstName,employmentNav/personNav/personalInfoNav/lastName,employmentNav/personNav/personalInfoNav/middleName,employmentNav/personNav/personalInfoNav/salutationNav/localeLabel,employmentNav/personNav/personalInfoNav/suffixNav/localeLabel,employmentNav/personNav/phoneNav/areaCode,employmentNav/personNav/phoneNav/countryCode,employmentNav/personNav/phoneNav/lastModifiedOn,employmentNav/personNav/phoneNav/phoneNumber,employmentNav/personNav/phoneNav/phoneTypeNav/externalCode,employmentNav/userNav/defaultLocale,employmentNav/userNav/lastModified,eventNav/externalCode,hireDate,isHomeWorker,jobTitle,lastModifiedOn,location,locationNav/addressNavDEFLT/address1,locationNav/addressNavDEFLT/address2,locationNav/addressNavDEFLT/city,locationNav/addressNavDEFLT/zipCode,locationNav/name,managerId,position,positionNav/employeeClassNav/label_defaultValue,positionNav/parentPosition/code,seqNumber,startDate,userId,userNav/email,userNav/lastModified,userNav/teamMembersSize,userNav/status,userNav/username&$expand=businessUnitNav,companyNav/countryOfRegistrationNav,customString22Nav,customString50Nav,departmentNav,divisionNav,emplStatusNav/picklistLabels,employeeClassNav/picklistLabels,employmentNav/empJobRelationshipNav,employmentNav/personNav/customString1Nav,employmentNav/personNav/emergencyContactNav,employmentNav/personNav/homeAddressNavDEFLT,employmentNav/personNav/personalInfoNav/customString7Nav/picklistLabels,employmentNav/personNav/personalInfoNav/salutationNav,employmentNav/personNav/personalInfoNav/suffixNav,employmentNav/personNav/phoneNav/phoneTypeNav,employmentNav/userNav,eventNav,locationNav/addressNavDEFLT,positionNav/employeeClassNav,positionNav/parentPosition,userNav&$filter=startswith(userNav/username,%27a%27)&(userNav/username

Regards,
Rushikesh Vartak
If you find the response useful, kindly consider selecting Accept As Solution and clicking on the kudos button.

Diwakar
Regular Contributor
Regular Contributor

@rushikeshvartak  I tried but again same error, pls suggest next.

Diwakar_0-1701373095893.png

 

Please recheck url on above post vs what you have updated/


Regards,
Rushikesh Vartak
If you find the response useful, kindly consider selecting Accept As Solution and clicking on the kudos button.

Diwakar
Regular Contributor
Regular Contributor

@rushikeshvartak Can you please re-confirm the url, as it seems to be incomplete, check the last line. Please clarify.

 

https://api2.successfactors.eu/odata/v2/EmpJob?$select=businessUnit,businessUnitNav/name,companyNav/...

Diwakar
Regular Contributor
Regular Contributor

@rushikeshvartak @SB @DixshantValecha  Any other further suggestion, we are not getting much help in Fresh Desk as well. Unable to find any root cause or error for these and terminated users count are keep on increasing but Saviynt unable to detect and reconcile those users.

We kindly need your help to fix this ASAP.

Rajesh-R
Saviynt Employee
Saviynt Employee
  1. URL is not well-formed.
  2. Try the following:
https://api2.successfactors.eu/odata/v2/EmpJob?$select=businessUnit,businessUnitNav/name,companyNav/countryOfRegistrationNav/externalName_defaultValue,companyNav/countryOfRegistrationNav/numericCountryCode,companyNav/externalCode,companyNav/name,costCenter,customString22Nav/externalCode,customString22Nav/externalName_defaultValue,customString44,customString50Nav/externalCode,customString50Nav/externalName,department,departmentNav/name,division,divisionNav/name,emplStatusNav/picklistLabels/label,employeeClassNav/picklistLabels/label,employmentNav/empJobRelationshipNav/lastModifiedOn,employmentNav/endDate,employmentNav/lastModifiedOn,employmentNav/personNav/customString1Nav/externalCode,employmentNav/personNav/emergencyContactNav/lastModifiedOn,employmentNav/personNav/homeAddressNavDEFLT/lastModifiedOn,employmentNav/personNav/lastModifiedOn,employmentNav/personNav/personalInfoNav/customString7Nav/picklistLabels/label,employmentNav/personNav/personalInfoNav/firstName,employmentNav/personNav/personalInfoNav/lastName,employmentNav/personNav/personalInfoNav/middleName,employmentNav/personNav/personalInfoNav/salutationNav/localeLabel,employmentNav/personNav/personalInfoNav/suffixNav/localeLabel,employmentNav/personNav/phoneNav/areaCode,employmentNav/personNav/phoneNav/countryCode,employmentNav/personNav/phoneNav/lastModifiedOn,employmentNav/personNav/phoneNav/phoneNumber,employmentNav/personNav/phoneNav/phoneTypeNav/externalCode,employmentNav/userNav/defaultLocale,employmentNav/userNav/lastModified,eventNav/externalCode,hireDate,isHomeWorker,jobTitle,lastModifiedOn,location,locationNav/addressNavDEFLT/address1,locationNav/addressNavDEFLT/address2,locationNav/addressNavDEFLT/city,locationNav/addressNavDEFLT/zipCode,locationNav/name,managerId,position,positionNav/employeeClassNav/label_defaultValue,positionNav/parentPosition/code,seqNumber,startDate,userId,userNav/email,userNav/lastModified,userNav/teamMembersSize,userNav/status,userNav/username&$expand=businessUnitNav,companyNav/countryOfRegistrationNav,customString22Nav,customString50Nav,departmentNav,divisionNav,emplStatusNav/picklistLabels,employeeClassNav/picklistLabels,employmentNav/empJobRelationshipNav,employmentNav/personNav/customString1Nav,employmentNav/personNav/emergencyContactNav,employmentNav/personNav/homeAddressNavDEFLT,employmentNav/personNav/personalInfoNav/customString7Nav/picklistLabels,employmentNav/personNav/personalInfoNav/salutationNav,employmentNav/personNav/personalInfoNav/suffixNav,employmentNav/personNav/phoneNav/phoneTypeNav,employmentNav/userNav,eventNav,locationNav/addressNavDEFLT,positionNav/employeeClassNav,positionNav/parentPosition,userNav&$filter=%28%28startswith%28userNav/username,%27a%27%29%29%20and%20%28userNav/username%20eq%20%27a85****%27%29%20and%20%28userNav/status%20in%20%28%27t%27,%27f%27%29%29%29&$format=json

Thanks
Rajesh Ramalingam
Saviynt India

Diwakar
Regular Contributor
Regular Contributor

@Rajesh-R Thanks for your response. this is the url to import single user. So can you please also confirm the url which will be importing all users from Source(SF). I tried to frame from your url only. Can you please check and confirm(attached).

Rajesh-R
Saviynt Employee
Saviynt Employee

@Diwakar 

This looks ok.

when you are filtering - the filtering is a case sensitive filter for ODATA API. Always test your api in postman before integrating with Saviynt.

Refer: https://userapps.support.sap.com/sap/support/knowledge/en/2772208

Refer: https://help.sap.com/docs/SAP_IoT/fffd6ca18e374c2e80688dab5c31527f/075e41f5538c4a6fa1176db1ba03f602....


Thanks
Rajesh Ramalingam
Saviynt India

Diwakar
Regular Contributor
Regular Contributor

@Rajesh-R Thanks for the update. I tried to use the url shared by you however getting below error. Please suggest further.

Diwakar_0-1702369285295.png

Thanks,

Diwakar.

Rajesh-R
Saviynt Employee
Saviynt Employee

@Diwakar  - If you want to bring all users - just drop $filter from your query. Use below

 

https://api2.successfactors.eu/odata/v2/EmpJob?$select=businessUnit,businessUnitNav/name,companyNav/countryOfRegistrationNav/externalName_defaultValue,companyNav/countryOfRegistrationNav/numericCountryCode,companyNav/externalCode,companyNav/name,costCenter,customString22Nav/externalCode,customString22Nav/externalName_defaultValue,customString44,customString50Nav/externalCode,customString50Nav/externalName,department,departmentNav/name,division,divisionNav/name,emplStatusNav/picklistLabels/label,employeeClassNav/picklistLabels/label,employmentNav/empJobRelationshipNav/lastModifiedOn,employmentNav/endDate,employmentNav/lastModifiedOn,employmentNav/personNav/customString1Nav/externalCode,employmentNav/personNav/emergencyContactNav/lastModifiedOn,employmentNav/personNav/homeAddressNavDEFLT/lastModifiedOn,employmentNav/personNav/lastModifiedOn,employmentNav/personNav/personalInfoNav/customString7Nav/picklistLabels/label,employmentNav/personNav/personalInfoNav/firstName,employmentNav/personNav/personalInfoNav/lastName,employmentNav/personNav/personalInfoNav/middleName,employmentNav/personNav/personalInfoNav/salutationNav/localeLabel,employmentNav/personNav/personalInfoNav/suffixNav/localeLabel,employmentNav/personNav/phoneNav/areaCode,employmentNav/personNav/phoneNav/countryCode,employmentNav/personNav/phoneNav/lastModifiedOn,employmentNav/personNav/phoneNav/phoneNumber,employmentNav/personNav/phoneNav/phoneTypeNav/externalCode,employmentNav/userNav/defaultLocale,employmentNav/userNav/lastModified,eventNav/externalCode,hireDate,isHomeWorker,jobTitle,lastModifiedOn,location,locationNav/addressNavDEFLT/address1,locationNav/addressNavDEFLT/address2,locationNav/addressNavDEFLT/city,locationNav/addressNavDEFLT/zipCode,locationNav/name,managerId,position,positionNav/employeeClassNav/label_defaultValue,positionNav/parentPosition/code,seqNumber,startDate,userId,userNav/email,userNav/lastModified,userNav/teamMembersSize,userNav/status,userNav/username&$expand=businessUnitNav,companyNav/countryOfRegistrationNav,customString22Nav,customString50Nav,departmentNav,divisionNav,emplStatusNav/picklistLabels,employeeClassNav/picklistLabels,employmentNav/empJobRelationshipNav,employmentNav/personNav/customString1Nav,employmentNav/personNav/emergencyContactNav,employmentNav/personNav/homeAddressNavDEFLT,employmentNav/personNav/personalInfoNav/customString7Nav/picklistLabels,employmentNav/personNav/personalInfoNav/salutationNav,employmentNav/personNav/personalInfoNav/suffixNav,employmentNav/personNav/phoneNav/phoneTypeNav,employmentNav/userNav,eventNav,locationNav/addressNavDEFLT,positionNav/employeeClassNav,positionNav/parentPosition,userNav&$format=json

 


Thanks
Rajesh Ramalingam
Saviynt India

Diwakar
Regular Contributor
Regular Contributor

@Rajesh-R Thanks for the update. We have to use at-least one filter(like username starts with 'a') so that we can import only personal accounts from source. I have prepared the same and getting output from postman. Let us know if we can use the same for Saviynt import. Url attached

Rajesh-R
Saviynt Employee
Saviynt Employee

@Diwakar - This will work. Please test it in the JSON.


Thanks
Rajesh Ramalingam
Saviynt India

Diwakar
Regular Contributor
Regular Contributor

@Rajesh-R we tested and url is although working but we are still not receiving terminated users from source. We have multiple url working but none of them are reconciling terminated users from source.

Please suggest next.

Thanks,

Diwakar.

Rajesh-R
Saviynt Employee
Saviynt Employee

@Diwakar - If your URL is working now with the JSON and the problem is only the desired data not coming into Saviynt., the right point of contact would be the SuccessFactors Team.

Please validate with the specific application team to understand how to pull terminated users and they will help with the SuccessFactors Odata API.

Please make sure you encode the filter value and use it in the JSONs.

If your Recon is working with the above url - I think you can mark that as a solution and close this thread.


Thanks
Rajesh Ramalingam
Saviynt India

Diwakar
Regular Contributor
Regular Contributor

@Rajesh-R The thing is when we run the same url in postman we can see the terminated users but while import these terminated users are not getting picked up. Any suggestion on this? Already we are working on this issue against Separate fresh desk ticket, however we are not getting much help there as well.

Thanks,

Diwakar.

Rajesh-R
Saviynt Employee
Saviynt Employee

@Diwakar 

Could you share your complete ImportUserJSON?


Thanks
Rajesh Ramalingam
Saviynt India

Diwakar
Regular Contributor
Regular Contributor

@Rajesh-R Please find the attached complete ImportUserJson. Please suggest.

Thanks,

Diwakar.