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

New accounts getting suspended in Rest import account

Jaya
Regular Contributor II
Regular Contributor II

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. 

Thanks
Jaya Karothia
29 REPLIES 29

sk
All-Star
All-Star

@Jaya : Can you please share CreateAccountJSON as well


Regards,
Saathvik
If this reply answered your question, please Accept As Solution and give Kudos to help others facing similar issue.

Jaya
Regular Contributor II
Regular Contributor II

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
			]
		}
	}]
}
Thanks
Jaya Karothia

@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
                ]
            }
        }
    ]
}

 


Regards,
Saathvik
If this reply answered your question, please Accept As Solution and give Kudos to help others facing similar issue.

SumathiSomala
All-Star
All-Star

 

@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 "

 

 

Regards,
Sumathi Somala
If this reply answered your question, please Accept As Solution and give Kudos.

Jaya
Regular Contributor II
Regular Contributor II

Hi @SumathiSomala @sk 

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).

Thanks
Jaya Karothia

@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?


Regards,
Saathvik
If this reply answered your question, please Accept As Solution and give Kudos to help others facing similar issue.

Jaya
Regular Contributor II
Regular Contributor II

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.

Thanks
Jaya Karothia

What is accountid & cp11 of suspended account 


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

Jaya
Regular Contributor II
Regular Contributor II

Hi @rushikeshvartak 

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"
}

Thanks
Jaya Karothia

Whats value in saviynt ?


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

Jaya
Regular Contributor II
Regular Contributor II

Hi @rushikeshvartak 

I think you've redirected me to right direction CP11 for this ID is null in Saviynt.

Jaya_1-1703405634933.png

 

 

 

Thanks
Jaya Karothia

Here reconciliation key is account id please check if that’s populated or not


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

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

Jaya
Regular Contributor II
Regular Contributor II

Hi @rushikeshvartak 

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. 

Thanks
Jaya Karothia

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 


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

Jaya
Regular Contributor II
Regular Contributor II

Hi @rushikeshvartak 

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.

 

Thanks
Jaya Karothia

@Jaya : AccountID of suspended account is matching with values you are getting from postman? like this

"Id": "a1c8d000003oJhAAAU",


Regards,
Saathvik
If this reply answered your question, please Accept As Solution and give Kudos to help others facing similar issue.

Jaya
Regular Contributor II
Regular Contributor II

Yes @sk those are matching.

Thanks
Jaya Karothia

Remove - 

    "inactivateAccountsNotInFile": false,

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

Hi Rushikesh,

Issue remains same even after removing above line.

Thanks,

Sitarasmi

adarshk
Saviynt Employee
Saviynt Employee

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

Sitarasmi
Regular Contributor
Regular Contributor

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

You can create support ticket and share logs there


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

Hi Rushikesh,

Thanks, we shared the logs separately with Adarsh.

Regards,

Sitarasmi

hirenp
New Contributor III
New Contributor III

Hi @Sitarasmi 

Did you receive any resolution on this as we are seeing same issue with our integration with servicenow

Sitarasmi
Regular Contributor
Regular Contributor

Hi Hiren,

We received many inputs here, as you can see. Unfortunately nothing worked & issue remains same.

Thanks,

Sitarasmi

{
"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}"
}
}
}
}
}
}

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

Hi Rushikesh,

This is still not working. Issue remains same.

Thanks,

Sitarasmi

Sitarasmi
Regular Contributor
Regular Contributor

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