Click HERE to see how Saviynt Intelligence is transforming the industry. |
03/19/2024 12:57 AM - last edited on 03/20/2024 08:46 AM by Sunil
Hi,
as proposed we try to replace our custom query jobs with the different methods listed. One of them is taking care of the job based on the Sav4Sav REST Connector.
Setup:
1. Creation of Analytics Report
2. Configuration of importUserJSON
3. Configuration of UpdateUserJSON
4. Creation of Update User Rule
What is working:
1,2,4 are confirmed working. On import the data from the report gets written to the user attribues. The Update User Rule also gets triggered after defined condition is met and creates an Update User Task (Update Login), which is also getting successfully provisioned.
What is not working:
3 - The completed task has not updated the mentioned fields from the report. So the report is working with ImportUserJSON, BUT NOT with UpdateUserJSON.
Which leads me to the following questions:
1. Should it be possible to use UpdateUserJSON with an analytics report to update user attributes?
Currently used UpdateUserJSON:
{
"actions": {
"Update Login": {
"call": [
{
"name": "Update",
"connection": "userAuth",
"url": "[URL]/ECM/api/v5/FetchRuntimeControlsData ",
"httpMethod": "POST",
"httpContentType": "application/json",
"httpParams": "{\"analyticsid\":\"12\"}",
"httpHeaders": {
"Authorization": "${access_token}"
},
"colsToPropsMap": {
"username": "USERNAME~#~char",
"customproperty28": "CUSTOMPROPERTY28~#~char"
},
"userResponsePath": "result",
"pagination": {
"offset": {
"offsetParam": "offset",
"batchParam": "max",
"batchSize": 500,
"totalCountPath": "completeResponseMap.totalcount"
}
}
}
]
}
}
}
Best regards
Alex
[This message has been edited by moderator to disable url hyperlink]
Solved! Go to Solution.
03/19/2024 03:15 AM
Hi @Alex
The JSON used for UpdateUserJSON is incorrect. Please refer to the second example in the below documentation under UpdateUserJSON. You must have 2 calls in this case.
1. First call is to call the analytics control
2. Use the response from the first call to update the user attribute.
Let me know if this helps!
03/19/2024 04:52 AM
Hi @naveenss ,
thanks for the input. I thought the same, but there is a small thing which does confuse me. In the developers handbook only the example is provided for UpdateAccountJSON, which offers the accountIDPath. If assume the same is not available on the UpdateUserJSON.
Do you have an example query also for UpdateUserJSON?
Thanks!
03/19/2024 06:50 AM
Hi @Alex Ideally accountIDPath will not be applicable for UpdateUserJSON. Please see the below forum post that might help you.
https://forums.saviynt.com/t5/identity-governance/updateuserjson-is-failing/m-p/80767#M51805
03/19/2024 08:05 AM
Hi @naveenss , thanks for the confirmation. The mentioned link does not really help as they are using a single call and calling a third party application.
My case would be a multi call on the Sav4Sav connector with UpdateUserJSON.
Also in the doc portal are not really any related articles, same goes for the API reference docu.
Best regards
Alex
03/20/2024 08:10 AM
As I still not able to get this working and don't find any helpful thread or documentation on this topic. I will provide my current try here.
UpdateUserJSON:
{
"actions": {
"Update Login": {
"call": [
{
"name": "call1",
"connection": "userAuth",
"url": "url/ECM/api/v5/FetchRuntimeControlsData",
"httpMethod": "POST",
"httpContentType": "application/json",
"httpParams": "{\"analyticsid\":\"12\",\"attributes\":{\"username\":\"${user.username}\"}}",
"httpHeaders": {
"Authorization": "${access_token}"
},
"successResponses": {
"statusCode": [
200,
201
]
}
},
{
"name": "call2",
"connection": "userAuth",
"url": "url/ECM/api/v5/updateUser",
"httpMethod": "POST",
"httpParams": "{\"username\":\"${response.call1.result[0].USERNAME}\",\"customproperty28\":\"${response.call1.result[0].CUSTOMPROPERTY28}\"}",
"httpHeaders": {
"Authorization": "${access_token}"
},
"httpContentType": "application/json",
"successResponses": {
"message": "User Updated Successfully",
"statusCode": [
200,
201
]
},
"unsuccessResponses": {
"statusCode": [
500,
403,
409,
412
]
}
}
]
}
}
}
Response message of call1:
{
"result": [
{
"USERNAME": "abc12345",
"CUSTOMPROPERTY28": "teststring"
}
],
"msg": "Success",
"displaycount": 1,
"total": 1,
"errorCode": 0
}
The task is completed, but the provisioning comments provide the following information:
{"Update Login":{"headers":null,"message":{"errorCode":"1","message":" Users not found with username ${response.call1.result[0].USERNAME}"},"statusCode":412,"description":null,"status":"Failed"}}
It seems like it cannot insert the value from Call1. So either the reference value is wrong or the setup of the depending calls.
Maybe someone can help with sufficient documentation for the updateUserJSON.
Thanks
03/20/2024 09:10 AM
Hi @Alex , Can you try the below JSON?
{
"actions": {
"Update Login": {
"call": [{
"name": "Update Login",
"connection": "userAuth",
"url": "url/ECM/api/v5/FetchRuntimeControlsData",
"httpMethod": "POST",
"httpContentType": "application/json",
"httpParams": "{\"analyticsid\":\"12\",\"attributes\":{\"username\":\"${user.username}\"}}",
"httpHeaders": {
"Authorization": "${access_token}"
},
"successResponses": {
"statusCode": [
200,
201
]
}
}, {
"name": "Update Login",
"connection": "userAuth",
"url": "url/ECM/api/v5/updateUser",
"httpMethod": "POST",
"httpParams": "{\"username\":\"${response.'Update Login'.message.result[0].USERNAME}\",\"customproperty28\":\"${response.'Update Login'.message.result[0].CUSTOMPROPERTY28}\"}",
"httpHeaders": {
"Authorization": "${access_token}"
},
"httpContentType": "application/json",
"successResponses": {
"message": "User Updated Successfully",
"statusCode": [
200,
201
]
},
"unsuccessResponses": {
"statusCode": [
500,
403,
409,
412
]
}
}
]
}
}
}
03/20/2024 09:45 PM
Just thinking how system will know which call 2 execute first ?
03/20/2024 09:33 AM
@naveenss This worked! Thank you so much. So for updateUserJSON you are not allowed to name the call with custom values. You need to stick to actions names.
Just theoretically spoken. What would happen, if I include an unrelated third/fourth API call for update login. So more or less as second set of the already existing call. How would it be possible to differ between the different calls, if they are all named 'update login'.