and more in a single search tool across platforms. Read the announcement here. |
12/22/2023 04:12 AM
Hi All,
We are facing issue while importing accounts from a REST connector.
Account status of new accounts which is being created for new joiners is getting changed to Suspended from import services when we run data import reconciliation Job, although accounts are active at application side.
We are noticing this issue only for new accounts, existing account are getting sync correctly.
Connection Json-
{
"authentications": {
"userAuth": {
"authType": "oauth2",
"url": "https://xxx.com/services/oauth2/token",
"httpMethod": "POST",
"httpParams": {
"client_id": "x",
"client_secret": "x",
"grant_type": "refresh_token",
"refresh_token": "x"
},
"httpHeaders": {
"Content-Type": "application/x-www-form-urlencoded"
},
"httpContentType": "application/x-www-form-urlencoded",
"authError": [
"Unable to authenticate the client",
"Invalid OAuth token Bearer"
],
"retryFailureStatusCode": [
401,
403
],
"errorPath": "",
"maxRefreshTryCount": 5,
"tokenResponsePath": "access_token",
"refreshType": "RefreshToken",
"tokenType": "Bearer",
"accessToken": "Bearer abcd"
}
}
}
ImportaccountEntJson-
{
"accountParams": {
"connection": "userAuth",
"processingType": "SequentialAndIterative",
"statusAndThresholdConfig": {
"statusColumn": "account.status",
"activeStatus": [
"true"
],
"deleteLinks": true,
"accountThresholdValue": 10000,
"accountsInImportAction": "Active",
"correlateInactiveAccounts": false,
"inactivateAccountsNotInFile": false,
"deleteAccEntForActiveAccounts": true
},
"call": {
"call1": {
"callOrder": 0,
"stageNumber": 0,
"http": {
"url": "https://xxx.com/services/data/v49.0/query/?q=select+id,name,status__c,isActive__c,Email__c,Business_Pillar__c,Salesforce_Record__c,Title__c,Line_Manager__c,Grade__c,Department__c+from+Employee__c",
"httpHeaders": {
"Authorization": "${access_token}",
"Accept": "application/json"
},
"httpContentType": "application/json",
"httpMethod": "GET"
},
"listField": "records",
"keyField": "accountID",
"statusConfig": {
"active": "true",
"inactive": "false"
},
"colsToPropsMap": {
"accountID": "Id~#~char",
"name": "Name~#~char",
"displayName": "Name~#~char",
"customproperty11": "Status__c~#~char",
"customproperty12": "Email__c~#~char",
"customproperty30": "isActive__c~#~bool",
"customproperty20": "Business_Pillar__c~#~char",
"customproperty21":"Salesforce_Record__c~#~char",
"customproperty31": "Title__c~#~char",
"customproperty32": "Line_Manager__c~#~char",
"customproperty32": "Grade__c~#~char",
"customproperty32": "Department__c~#~char"
},
"pagination": {
"nextUrl": {
"nextUrlPath": "${response?.completeResponseMap?.next_page==null?null:response.completeResponseMap.next_page}"
}
}
}
}
}
}
Please suggest what could be the issue.
12/22/2023 07:29 AM
12/22/2023 07:59 AM
Hi @sk
PFB CreateAccountJson
{
"accountIdPath": "call1.message.id",
"dateFormat": "yyyy-MM-dd'T'HH:mm:ssXXX",
"responseColsToPropsMap": {
"accountID": "Id~#~char"
},
"call": [{
"name": "call1",
"connection": "userAuth",
"url": "https://xxx.com/services/data/v49.0/sobjects/Employee__c",
"httpMethod": "POST",
"httpParams": "{\"First_Name__c\":\"${user.preferedFirstName}\",\"Last_Name__c\":\"${user.lastname}\",\"Salutation__c\":\"${user.title}\",\"Title__c\":\"${if(user.employeeType=='Permanent'){user.customproperty16}else if(user.employeeType=='Fixed Term Contract'){user.customproperty16}else if(user.employeeType=='Unpaid Work Placement'){user.customproperty16}else if(user.employeeType=='Summer Worker'){user.customproperty16}else if(user.employeeType=='Non Executive Director Board'){user.customproperty16}else if(user.employeeType=='Internship'){user.customproperty16}else if(user.employeeType=='Apprenticeship'){user.customproperty16}else{user.customproperty31}}\",\"Business_Pillar__c\":\"${user.customproperty1}\",\"Department__c\":\"${user.customproperty2}\",\"Line_Manager__c\":\"${managerAccount?.accountID}\",\"Team__c\":\"${user.customproperty2}\",\"Email__c\":\"${user.email}\",\"Site__c\":\"${user.location}\",\"Status__c\":\"Staff\",\"Grade__c\":\"${user.customproperty17}\",\"Contract_Type__c\":\"${if(user.customproperty6=='Zensar'){'Contractor (Zensar)'}else{user.employeeType}}\",\"Start_Date__c\":\"${new java.text.SimpleDateFormat(\"YYYY-MM-dd\").format(user.startdate)}\",\"Phone__c\":\"${user.phonenumber==null? '': user.phonenumber}\",\"Employee_Number__C\":\"${user.employeeid}\",\"Mobile__c\":\"${user.customproperty5==null? ' ': user.customproperty5}\"}",
"httpHeaders": {
"Authorization": "${access_token}",
"Accept": "application/json"
},
"httpContentType": "application/json",
"successResponses": {
"statusCode": [
201
]
}
}]
}
12/22/2023 08:09 AM
@Jaya : Try below JSON for CreateAccountJSON and see if that fixes it.
{
"accountIdPath": "call1.message.Id",
"dateFormat": "yyyy-MM-dd'T'HH:mm:ssXXX",
"call": [
{
"name": "call1",
"connection": "userAuth",
"url": "https://xxx.com/services/data/v49.0/sobjects/Employee__c",
"httpMethod": "POST",
"httpParams": "{\"First_Name__c\":\"${user.preferedFirstName}\",\"Last_Name__c\":\"${user.lastname}\",\"Salutation__c\":\"${user.title}\",\"Title__c\":\"${if(user.employeeType=='Permanent'){user.customproperty16}else if(user.employeeType=='Fixed Term Contract'){user.customproperty16}else if(user.employeeType=='Unpaid Work Placement'){user.customproperty16}else if(user.employeeType=='Summer Worker'){user.customproperty16}else if(user.employeeType=='Non Executive Director Board'){user.customproperty16}else if(user.employeeType=='Internship'){user.customproperty16}else if(user.employeeType=='Apprenticeship'){user.customproperty16}else{user.customproperty31}}\",\"Business_Pillar__c\":\"${user.customproperty1}\",\"Department__c\":\"${user.customproperty2}\",\"Line_Manager__c\":\"${managerAccount?.accountID}\",\"Team__c\":\"${user.customproperty2}\",\"Email__c\":\"${user.email}\",\"Site__c\":\"${user.location}\",\"Status__c\":\"Staff\",\"Grade__c\":\"${user.customproperty17}\",\"Contract_Type__c\":\"${if(user.customproperty6=='Zensar'){'Contractor (Zensar)'}else{user.employeeType}}\",\"Start_Date__c\":\"${new java.text.SimpleDateFormat(\"YYYY-MM-dd\").format(user.startdate)}\",\"Phone__c\":\"${user.phonenumber==null? '': user.phonenumber}\",\"Employee_Number__C\":\"${user.employeeid}\",\"Mobile__c\":\"${user.customproperty5==null? ' ': user.customproperty5}\"}",
"httpHeaders": {
"Authorization": "${access_token}",
"Accept": "application/json"
},
"httpContentType": "application/json",
"successResponses": {
"statusCode": [
201
]
}
}
]
}
12/22/2023 07:38 AM - edited 12/22/2023 07:38 AM
@Jaya Most of the objects you have mapped as custom attributes.
Can you please confirm all these are custom objects created in Salesforce?
In ImportaccountEntJson map the status column with correct custompropertyx, which stores the account status.
"statusColumn":" Custompropertyx "
12/22/2023 08:11 AM - edited 12/22/2023 08:23 AM
Yes, all these custom attributes exist at application end and this connection was working from almost 2+ yrs, suddenly we are getting this problem.
Here account status is not true or false, we are setting 'Staff' for active users and 'Left' or Inactive users and this is defined in Status_threshould_config
{
"statusAndThresholdConfig": {
"accountThresholdValue": 10000,
"inactivateAccountsNotInFile": false,
"statusColumn": "customproperty11",
"activeStatus": [
"Staff"
],
"inactivateEntsNotInFeed": false,
"entThresholdValue": {
"entType": {
"Group": {
"ent": 100
},
"Role": {
"ent": 100
}
}
}
}
}
Is there any limit of account that we have to define in EIC (here 6000+ accounts were imported as of now).
12/22/2023 08:30 AM
@Jaya : There is not such limit as long as you have implemented pagination. Please try the JSON I shared for CreateAccount and see if that fixes it. Also just to clarify issue is only with new accounts that got created through Saviynt rest all existing accounts it is working fine right?
Also you mentioned this is working for 2+ years, So are you saying this new account issue was not there all these while? If so do you see any modifications done to JSONs?
12/22/2023 09:44 AM
Sure @sk we'll try this JSON, as this is a production issue, so I have to wait for a new joiner creation for this application (we are unable to replicate this is Dev).
Yes, it is only for new accounts, and this was working perfectly before with same JSON codes, suddenly we are getting this issue with no changes.
12/22/2023 09:42 AM
What is accountid & cp11 of suspended account
12/22/2023 09:58 AM
PFB response from postman for an ID whose status is suspended in Saviynt and at application side Status__c(or custom11) is "Staff" which means active.
{
"attributes": {
"type": "Employee__c",
"url": "/services/data/v49.0/sobjects/Employee__c/a1c8d000003oJhAAAU"
},
"Id": "a1c8d000003oJhAAAU",
"OwnerId": "0054J0000063shcQAA",
"Name": "abcd",
"Department__c": "People and Culture",
"Email__c": "abcd@xx",
"First_Name__c": "abcd",
"Grade__c": "Band One",
"Last_Name__c": "Attoh",
"Lead_Record__c": "00Q8d00000L8rCgEAJ",
"Length_of_Service__c": "-11 days",
"Line_Manager__c": "a1c2X000005Fk5xQAC",
"Salutation__c": "Mr.",
"Site__c": "Central London",
"Start_Date__c": "2024-01-02",
"Status__c": "Staff",
"Team__c": "People and Culture",
"Title__c": "HR Consultant Partner - Apprentice",
"Contract_Type__c": "Permanent",
"Employee_Number__c": "52128",
"Business_Pillar__c": "Support",
"Current_Line_Manager_Status__c": "Staff"
}
12/22/2023 10:05 AM
Whats value in saviynt ?
12/24/2023 12:14 AM
I think you've redirected me to right direction CP11 for this ID is null in Saviynt.
12/24/2023 06:28 AM
Here reconciliation key is account id please check if that’s populated or not
12/28/2023 12:55 AM
Hi Rushikesh,
I am from Jaya's team. Yes, the account id field is populated.
But the other attributes page is not at all visible for such users where we want to see the reconciled data.
Please guide what could be the issue.
Thanks,
Sitarasmi
01/03/2024 03:56 AM
Any further suggestions on this? Account ID field is getting populated for all accounts but other fields are not populating. Application team confirmed they haven't done any changes.
01/03/2024 04:45 AM
Account id does not have any extra space / junk characters?
try to remove status threshold config from import json and add in separate status threshold config
01/04/2024 02:12 AM
No account Id doesn't have any junk/characters.
We have tried by removing status threshold from import but there is no change, issue still persist.
01/03/2024 07:15 AM
01/03/2024 07:24 AM
Yes @sk those are matching.
01/04/2024 08:30 PM
Remove -
"inactivateAccountsNotInFile": false,
01/04/2024 10:26 PM
Hi Rushikesh,
Issue remains same even after removing above line.
Thanks,
Sitarasmi
01/10/2024 11:00 PM
Hi @Sitarasmi
Can you initiate a new account creation for new joiner and run the recon.
share the log snippet for the same.
Thanks,
Adarsh Kulkarni
01/11/2024 12:38 AM
Hi Adarsh,
A new joiner created today & account is suspended from import.
Unable to attach log file here. Please suggest alternate way to share.
Thanks,
Sitarasmi
01/11/2024 08:21 PM
You can create support ticket and share logs there
01/11/2024 10:41 PM
Hi Rushikesh,
Thanks, we shared the logs separately with Adarsh.
Regards,
Sitarasmi
01/12/2024 11:41 AM
Hi @Sitarasmi
Did you receive any resolution on this as we are seeing same issue with our integration with servicenow
01/14/2024 09:47 PM
Hi Hiren,
We received many inputs here, as you can see. Unfortunately nothing worked & issue remains same.
Thanks,
Sitarasmi
01/14/2024 05:36 PM
{
"accountParams": {
"connection": "userAuth",
"processingType": "SequentialAndIterative",
"statusAndThresholdConfig": {
"statusColumn": "customproperty30",
"activeStatus": [
"true"
],
"deleteLinks": true,
"accountThresholdValue": 10000,
"accountsInImportAction": "Active",
"correlateInactiveAccounts": false,
"inactivateAccountsNotInFile": false,
"deleteAccEntForActiveAccounts": true
},
"call": {
"call1": {
"callOrder": 0,
"stageNumber": 0,
"http": {
"url": "https://xxx.com/services/data/v49.0/query/?q=select+id,name,status__c,isActive__c,Email__c,Business_Pillar__c,Salesforce_Record__c,Title__c,Line_Manager__c,Grade__c,Department__c+from+Employee__c",
"httpHeaders": {
"Authorization": "${access_token}",
"Accept": "application/json"
},
"httpContentType": "application/json",
"httpMethod": "GET"
},
"listField": "records",
"keyField": "accountID",
"statusConfig": {
"active": "true",
"inactive": "false"
},
"colsToPropsMap": {
"accountID": "Id~#~char",
"name": "Name~#~char",
"displayName": "Name~#~char",
"customproperty11": "Status__c~#~char",
"customproperty12": "Email__c~#~char",
"customproperty30": "isActive__c~#~bool",
"customproperty20": "Business_Pillar__c~#~char",
"customproperty21":"Salesforce_Record__c~#~char",
"customproperty31": "Title__c~#~char",
"customproperty32": "Line_Manager__c~#~char",
"customproperty32": "Grade__c~#~char",
"customproperty32": "Department__c~#~char"
},
"pagination": {
"nextUrl": {
"nextUrlPath": "${response?.completeResponseMap?.next_page==null?null:response.completeResponseMap.next_page}"
}
}
}
}
}
}
01/23/2024 12:05 AM
Hi Rushikesh,
This is still not working. Issue remains same.
Thanks,
Sitarasmi
01/23/2024 10:08 PM
Hi All,
We even tried to create a new connection, endpoint ,security system & new recon job with same configurations. While running the account recon job, its bringing only 2000 accounts into Saviynt. While in target there are 2459 accounts. Is there something configured to restrict the no. of accounts in Saviynt as we can see in logs - pullObjectsByRest - objectList.size : 2000
Logs
024-01-23 10:31:23,416 [quartzScheduler_Worker-1] DEBUG rest.RestProvisioningService -
2024-01-23 10:31:23,416 [quartzScheduler_Worker-1] DEBUG rest.RestUtilService - pullObjectsByRest - responseStatusCode ::200
2024-01-23 10:31:23,422 [quartzScheduler_Worker-1] DEBUG rest.RestProvisioningService - Entered getResponseHeaders method
2024-01-23 10:31:23,422 [quartzScheduler_Worker-1] DEBUG rest.RestProvisioningService - responseError : null
2024-01-23 10:31:23,422 [quartzScheduler_Worker-1] DEBUG rest.RestProvisioningService - isAuthError: false
2024-01-23 10:31:23,422 [quartzScheduler_Worker-1] DEBUG rest.RestProvisioningService - pullObjectsByRest - responseMap.size : 4
2024-01-23 10:31:23,422 [quartzScheduler_Worker-1] DEBUG rest.RestProvisioningService - pullObjectsByRest - objectList.size : 2000
2024-01-23 10:31:23,422 [quartzScheduler_Worker-1] DEBUG rest.RestProvisioningService - Decrementing connectionParamMap.refreshTryCount : 0
2024-01-23 10:31:23,424 [quartzScheduler_Worker-1] DEBUG rest.RestProvisioningService - Inside importAccountsFull:persistAccounts, pptTypeSep : ~#~
2024-01-23 10:31:28,008 [https-jsse-nio-443-exec-119] ERROR sessionlistner.SaviyntHttpSessionEventListener - Invalid http.Session.timeout from Config Table http.Session.timeout
2024-01-23 10:31:29,765 [quartzScheduler_Worker-1] DEBUG services.ImportUtilityService - isImportSuccess: true
2024-01-23 10:31:29,765 [quartzScheduler_Worker-1] DEBUG services.ImportUtilityService - Entered markStatusBasedOnThreshold
2024-01-23 10:31:29,765 [quartzScheduler_Worker-1] DEBUG services.ImportUtilityService - Inside markAccountStatus
2024-01-23 10:31:29,765 [quartzScheduler_Worker-1] DEBUG services.ImportUtilityService - Start setActiveAccountStatus
2024-01-23 10:31:29,766 [quartzScheduler_Worker-1] DEBUG services.ImportUtilityService - Setting Batch Size from config = 1000
Can anyone please check & suggest.
Thanks,
Sitarasmi