03/20/2023 08:42 AM
Hi All,
We are developing solution to import users from Ultipro HR system using OOB SOAP connector.
But, here we were asked to generate the username for users. Hence the attribute is not mapped with the list of attributes from feed. then we are using generate system username option and assign the same value to username filed.
However, this is not working as expected, if there is no mapping for username filed in the connection and it is skipping all records saying missing key filed.
Also, In the user import job i have kept reconciliation filed to Employee Id which we are going to get from Ultipro. But in the logs reconciliation filed was still showing as username. How do we change this configuration.
Logs::
KEY FIELD VALUE IS NULL OR EMPTY. SKIPPING RECORD.\n","stream":"stdout","time":"2023-03-20T15:18:59.101583738Z"}"
RECONCILIATIONFIELD= USERNAME\n","stream":"stdout","time":"2023-03-20T15:18:59.278294044Z"}"
Thanks
Sampath
03/21/2023 04:26 AM
Hello @sampath18
In the Global Configuration settings, I suggest you explore the option of utilizing the "Add Register User Rule" feature located under the Identity LifeCycle section.
If possible, could you please try this?
For your reference: https://docs.saviyntcloud.com/bundle/EIC-Admin-v23x/page/Content/Chapter06-EIC-Configurations/Config...
Thanks
03/21/2023 04:35 AM
Thanks for the response. I hope that issue i am trying to explain is bit different.
The feed we are getting is not sending username, So i used option to generate system username under user import job, and that calls my system username generation logic present under global configuration and same value is assigned to username. However, the feed is skipping the incoming records as it did not find the username mapping from the HR feed attributes. As per the logs it is looking for the username as key filed which we are not going to get. So how do I overcome this. As I already mentioned, I have kept reconciliation field value to EmployeeID in the job level. But still it did not work.
Thanks
Sampath
03/22/2023 11:47 PM
Hello @sampath18
Can you please share what is the Job Trigger Configuration? How are you setting the reconcilation field, and share the design of generating the system username? If possible can you also share the config file for the import account?
Thank you
03/23/2023 02:25 AM
Hi Sudesh,
I am using ultipro Soap connector to integrate one of Our HR system for users. from the feed username would not be sent. So i have written following json as per the avilable attributes.
I have used the following job type : User Import via a Connection (UserImportJob)
In the job config i have set generate system username = yes and reconciliation filed = EmployeeID
Please note generate system username has been set in global configuration with Advacne config. It looks like below
CASE when users.location ='110' THEN Concat("B01",upper(substring(users.firstname,1,1)),upper(substring(users.lastname,1,2))) END###
Above logic is working fine when username filed is mapped with employee Id attribute from the feed. but this is not we wanted to happen here. instead we want make systemusername = username. This would be used further to provision access on endpoints.
All we wanted to achive here is make employee id attribute to be considered as reconciliation field for the feed instead of username attribute.
Below is json for importing users.
{
"CONNECTION1": "Logon",
"REQUESTXML1": "<soap:Envelope xmlns:soap=\"http://www.w3.org/2003/05/soap-envelope\" xmlns:ns=\"http://www.ultipro.com/dataservices/bidata/2\"> <soap:Header xmlns:wsa=\"http://www.w3.org/2005/08/addressing\"><wsa:Action>http://www.ultipro.com/dataservices/bidata/2/IBIDataService/LogOn</wsa:Action></soap:Header> <soap:Body> <ns:LogOn> <ns:logOnRequest> <ns:UserName>\${USERNAME}</ns:UserName> <ns:Password>\${PASSWORD}</ns:Password> <ns:ClientAccessKey>****</ns:ClientAccessKey> <ns:UserAccessKey>*****</ns:UserAccessKey> </ns:logOnRequest> </ns:LogOn> </soap:Body> </soap:Envelope>",
"REQUESTPARAMS1": {
"Content-Type": "application/soap+xml;charset=utf-8"
},
"RESPONSEDATAPATH1": "Body.LogOnResponse.LogOnResult",
"RESPONSEMAPPING1": {
"SERVICEID": "ServiceId",
"CLIENTACCESSKEY": "ClientAccessKey",
"TOKEN": "Token",
"INSTANCEKEY": "InstanceKey"
},
"CONNECTION2": "Logon",
"REQUESTXML2": "<soap:Envelope xmlns:soap=\"http://www.w3.org/2003/05/soap-envelope\" xmlns:ns=\"http://www.ultipro.com/dataservices/bidata/2\"> <soap:Header xmlns:wsa=\"http://www.w3.org/2005/08/addressing\"><wsa:Action>http://www.ultipro.com/dataservices/bidata/2/IBIDataService/ExecuteReport</wsa:Action></soap:Header> <soap:Body> <ns:ExecuteReport> <ns:request> <ns:ReportPath>/content/folder[@name='zzzCompany Folders']/folder[@name='The Bridgespan Group, Inc.']/folder[@name='UltiPro']/folder[@name='Restricted Reports for Bain']/report[@name='Active and on Leave Employees_Link via Bain_Saviynt Service Acct']</ns:ReportPath> <ns:ReportParameters> <ns:ReportParameter> <ns:Name>Active and on Leave Employees_Link via Bain_Saviynt Service Acct</ns:Name> </ns:ReportParameter> </ns:ReportParameters> </ns:request> <ns:context> <ns:ServiceId>\${SERVICEID}</ns:ServiceId> <ns:ClientAccessKey>\${CLIENTACCESSKEY}</ns:ClientAccessKey> <ns:Token>\${TOKEN}</ns:Token> <ns:InstanceKey>\${INSTANCEKEY}</ns:InstanceKey> </ns:context> </ns:ExecuteReport> </soap:Body> </soap:Envelope>",
"REQUESTPARAMS2": {
"Content-Type": "application/soap+xml;charset=utf-8"
},
"RESPONSEDATAPATH2": "Body.ExecuteReportResponse.ExecuteReportResult",
"RESPONSEMAPPING2": {
"REPORTKEY": "ReportKey"
},
"CONNECTION3": "Report",
"REQUESTXML3": "<soap:Envelope xmlns:soap=\"http://www.w3.org/2003/05/soap-envelope\" xmlns:ns=\"http://www.ultipro.com/dataservices/bistream/2\"> <soap:Header xmlns:wsa=\"http://www.w3.org/2005/08/addressing\"> <ns:ReportKey>\${REPORTKEY}</ns:ReportKey> <wsa:Action>http://www.ultipro.com/dataservices/bistream/2/IBIStreamService/RetrieveReport</wsa:Action></soap:Header> <soap:Body> <ns:RetrieveReportRequest\></ns:RetrieveReportRequest> </soap:Body> </soap:Envelope>",
"REQUESTPARAMS3": {
"Content-Type": "application/soap+xml;charset=utf-8"
},
"RESPONSEDATAPATH3": "Body.StreamReportResponse.ReportStream.DECODEBASE64.data.row",
"USERMAPPING3":
"EMPLOYEEID:value(0),FIRSTNAME:value(1),PREFEREDFIRSTNAME:value(2),LASTNAME:value(3),customproperty12:value(4),EMPLOYEETYPE:value(5),COSTCENTER:value(6),LOCATIONDESC:value(7),JOBCODE:value(8),TITLE:value(9),JOBCODEDESC:value(10),JOB_FUNCTION:value(12),EMAIL:value(13),STARTDATE:value(14)",
"TEMPMAPPING3" : [
"STATUSKEY='1' Where customproperty12 in ('Active', 'Leave of Absence')",
"STATUSKEY='0' Where customproperty12 in ('Terminated') "
],
"CONNECTION4": "Logon",
"REQUESTXML4": "<soap:Envelope xmlns:soap=\"http://www.w3.org/2003/05/soap-envelope\" xmlns:ns=\"http://www.ultipro.com/dataservices/bidata/2\"> <soap:Header xmlns:wsa=\"http://www.w3.org/2005/08/addressing\"><wsa:Action>http://www.ultipro.com/dataservices/bidata/2/IBIDataService/LogOff</wsa:Action></soap:Header> <soap:Body> <ns:LogOff> <ns:context> <ns:ServiceId>${SERVICEID}</ns:ServiceId> <ns:ClientAccessKey>${CLIENTACCESSKEY}</ns:ClientAccessKey> <ns:InstanceKey>${INSTANCEKEY}</ns:InstanceKey> </ns:context> </ns:LogOff> </soap:Body> </soap:Envelope>",
"REQUESTPARAMS4": {
"Content-Type": "application/soap+xml;charset=utf-8"
},
"RESPONSEDATAPATH4": "Body.LogOffResponse.LogOffResult",
"RESPONSEMAPPING4": {
"STATUS": "Status"
}
}
03/23/2023 04:00 AM
Hello @sampath18 ,
In tackling this issue, a potential solution is the utilization of the Inline Processor Query.
To learn more about this approach and how it can be implemented, refer to the following resource: https://docs.saviyntcloud.com/bundle/EIC-Admin-v2022x/page/Content/Chapter03-User-Management/User-Im...
Please let us know if it helps.
Thanks
03/23/2023 04:39 AM
Hi Sudesh,
I have used inline process query. But are you suggesting here to use in line process query to have generate system username and username logic from "PREPROCESSQUERIES" instead of using generate system username from global config. i currently have below one according my needs but this does not for setting username as systemusername generated can not be set to username attribute as this data not present in newuserdata table.
{
"ADDITIONALTABLES": {
"USERS": "SELECT USERKEY,USERNAME,location,EMPLOYEEID,SYSTEMUSERNAME,customer FROM USERS",
"TATTR": "SELECT attribute1,attribute2,datasetname,attribute3 FROM DATASET_VALUES",
"CUSTOMER": "SELECT customerkey,customername FROM CUSTOMER"
},
"COMPUTEDCOLUMNS": [
"customer",
"username",
"location"
],
"TABLEINDEXES": {
"currentusers":["username","location","EMPLOYEEID"]
},
"PREPROCESSQUERIES": [
"DELETE from NEWUSERDATA where NEWUSERDATA.EMPLOYEEID NOT IN ('200651','200555')",
"UPDATE NEWUSERDATA SET USERNAME = NEWUSERDATA.systemusername",
"UPDATE NEWUSERDATA SET location = (select attribute1 from CURRENTTATTR where datasetname = 'Active_Directory_OUs' and attribute2 = NEWUSERDATA.LOCATIONDESC)",
"UPDATE NEWUSERDATA SET customer = (select currentcustomer.customername from currentcustomer where currentcustomer.customername = '****')"
]
}
03/29/2023 01:10 AM - edited 03/29/2023 02:18 AM
Hello @sampath18 ,
As I Understand you have added the rule under “system username generation”.
“Add Register Rule” is the first rule which will be triggered when user creations happen. So we suggest you keep the system generation rule in “Add Register Rule” as you want systemusername and username to be the same.
And add the mapping of username to systemusername generation rule under this config.
PFA Screenshot below
Please let us know if it helps.
Thanks
03/29/2023 04:58 AM
While importing users into saviynt we have option as set yes or no to generate system username of our choice but not for the username attribute. However, i have tried the way you have mentioned. it still did not work. It was unable to generate username as per logic in the username rule config.
Thanks
Sampath
03/30/2023 05:26 AM
Please find the attached logs which error related to recon filed as username
Thanks
Sampath
03/31/2023 03:30 AM
Hello @sampath18 ,
It appears that there may be an issue with the SOAP Connector. Could you please raise a Freshdesk support ticket, similar to the one you raised in the past at "https://saviynt.freshdesk.com/a/tickets/1611807", so that our engineering team can investigate and resolve the issue?
Thanks,
04/03/2023 09:42 AM
As suggested i have created FD ticket.
https://saviynt.freshdesk.com/support/tickets/1616042
I request you to take look at this ticket to provide quick solution as you were working on this.
Thanks
Sampath
04/03/2023 08:40 PM
Hi @sampath18
Thank you for creating the FD ticket. Our team will work on resolving the issue and will keep you updated on the progress through the FD ticket.
Thanks,