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

Padding numbers to systemusername when character count is less than certain number

nvachhani
Regular Contributor
Regular Contributor

Using an advanced query in the systemusername generation rule, how can we pad numbers to systemusername if the character count is say less than 4? I understand I can use RPAD to do this, but that also truncates values if the string is greater than the minimum you have specified.

22 REPLIES 22

rushikeshvartak
All-Star
All-Star

Share current configuration.


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

Current configuration is:

First 5 letters of lastname

First letter of firstname

First letter of middlename

Auto Increment number for duplicates

 

We need to add a clause to ensure this does not produce a systemusername with less than 4 characters, if so, we need to add numbers in order to reach 4 characters.

Share actual configuration implemented in saviynt


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

concat(RPAD((LEFT(REPLACE(users.firstname,' ',''), 5)),(LEFT(REPLACE(users.lastname,' ',''), 1)),(LEFT(REPLACE(users.middlename,' ',''), 1))), 4, '0') # concat(RPAD((LEFT(REPLACE(users.firstname,' ',''), 5)),(LEFT(REPLACE(users.lastname,' ',''), 1)),(LEFT(REPLACE(users.middlename,' ',''), 1))), 4, '0') + 1

 

This would truncate systemusername if longer than 4 characters

LEFT(
CONCAT(
LEFT(users.lastname, 5),
LEFT(users.firstname, 1),
LEFT(users.middlename , 1),
LPAD(FLOOR(RAND() * 10000), 5, '0')),5)


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

This generates the following systemusername:

 

LEFTCONCATLEFTlastname5LEFTfirstname1LEFTmiddlename1LPADFLOORRAND100005051

nvachhani
Regular Contributor
Regular Contributor

The following works for systemusernames less than 4 characters but truncates the result if it is larger than 4 characters:

 

LEFT((CONCAT(LEFT(users.lastname, 5), LEFT(users.firstname, 1), LEFT(users.middlename , 1), LPAD(FLOOR(RAND() * 1000), 4, '0'))), 4)

Great it was just spacing and new line issue


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

But this still truncates the systemusername if it is larger than 4 characters

nvachhani
Regular Contributor
Regular Contributor

Any help with this? This still truncates the systemusername if it is larger than 4 characters and fails entirely if any value such as middlename is null

IF(LENGTH(CONCAT(LEFT(users.lastname, 5), LEFT(users.firstname, 1), LEFT(users.middlename , 1))) >= 4, CONCAT(LEFT(users.lastname, 5), LEFT(users.firstname, 1), LEFT(users.middlename , 1)), LEFT(CONCAT(LEFT(users.lastname, 5), LEFT(users.firstname, 1), LEFT(users.middlename , 1), LPAD(FLOOR(RAND() * 1000), 4, '0')), 4) )


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

nvachhani
Regular Contributor
Regular Contributor

This no longer truncates if value is greater than 4 but still fails if a value is missing like middlename. Some users will not have this value, is there a check we can do in the query?

IF(LENGTH(CONCAT(LEFT(ifnull(users.lastname,''), 5), LEFT(ifnull(users.firstname,''), 1), LEFT(ifnull(users.middlename,'') , 1))) >= 4, CONCAT(LEFT(ifnull(users.lastname,''), 5), LEFT(ifnull(users.firstname,''), 1), LEFT(ifnull(users.middlename,'') , 1)), LEFT(CONCAT(LEFT(ifnull(users.lastname,''), 5), LEFT(ifnull(users.firstname,''), 1), LEFT(ifnull(users.middlename,'') , 1), LPAD(FLOOR(RAND() * 1000), 4, '0')), 4) )


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

Did above one worked ?


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

IF(LENGTH(CONCAT(LEFT(ifnull(users.lastname,''), 5), LEFT(ifnull(users.firstname,''), 1), LEFT(ifnull(users.middlename,'') , 1))) >= 4, CONCAT(LEFT(ifnull(users.lastname,''), 5), LEFT(ifnull(users.firstname,''), 1), LEFT(ifnull(users.middlename,'') , 1)), LEFT(CONCAT(LEFT(ifnull(users.lastname,''), 5), LEFT(ifnull(users.firstname,''), 1), LEFT(ifnull(users.middlename,'') , 1), LPAD(FLOOR(RAND() * 1000), 4, '0')), 4) )###IF(LENGTH(CONCAT(LEFT(ifnull(users.lastname,''), 5), LEFT(ifnull(users.firstname,''), 1), LEFT(ifnull(users.middlename,'') , 1))) >= 4, CONCAT(LEFT(ifnull(users.lastname,''), 5), LEFT(ifnull(users.firstname,''), 1), LEFT(ifnull(users.middlename,'') , 1)), LEFT(CONCAT(LEFT(ifnull(users.lastname,''), 5), LEFT(ifnull(users.firstname,''), 1), LEFT(ifnull(users.middlename,'') , 1), LPAD(FLOOR(RAND() * 1000), 4, '0')), 4) )###IF(LENGTH(CONCAT(LEFT(ifnull(users.lastname,''), 5), LEFT(ifnull(users.firstname,''), 1), LEFT(ifnull(users.middlename,'') , 1))) >= 4, CONCAT(LEFT(ifnull(users.lastname,''), 5), LEFT(ifnull(users.firstname,''), 1), LEFT(ifnull(users.middlename,'') , 1)), LEFT(CONCAT(LEFT(ifnull(users.lastname,''), 5), LEFT(ifnull(users.firstname,''), 1), LEFT(ifnull(users.middlename,'') , 1), LPAD(FLOOR(RAND() * 1000), 4, '0')), 4) )###IF(LENGTH(CONCAT(LEFT(ifnull(users.lastname,''), 5), LEFT(ifnull(users.firstname,''), 1), LEFT(ifnull(users.middlename,'') , 1))) >= 4, CONCAT(LEFT(ifnull(users.lastname,''), 5), LEFT(ifnull(users.firstname,''), 1), LEFT(ifnull(users.middlename,'') , 1)), LEFT(CONCAT(LEFT(ifnull(users.lastname,''), 5), LEFT(ifnull(users.firstname,''), 1), LEFT(ifnull(users.middlename,'') , 1), LPAD(FLOOR(RAND() * 1000), 4, '0')), 4) )###IF(LENGTH(CONCAT(LEFT(ifnull(users.lastname,''), 5), LEFT(ifnull(users.firstname,''), 1), LEFT(ifnull(users.middlename,'') , 1))) >= 4, CONCAT(LEFT(ifnull(users.lastname,''), 5), LEFT(ifnull(users.firstname,''), 1), LEFT(ifnull(users.middlename,'') , 1)), LEFT(CONCAT(LEFT(ifnull(users.lastname,''), 5), LEFT(ifnull(users.firstname,''), 1), LEFT(ifnull(users.middlename,'') , 1), LPAD(FLOOR(RAND() * 1000), 4, '0')), 4) )


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

The solution provided does not work for duplicates, in the logs I can see it just generates the same name five times and then fails since it is duplicate

nvachhani
Regular Contributor
Regular Contributor

How can this be modified to auto increment for duplicates? The below has been tried but the systemusername generated is '1.0'

 

 

IF(LENGTH(CONCAT(LEFT(ifnull(users.lastname,''), 5), LEFT(ifnull(users.firstname,''), 1), LEFT(ifnull(users.middlename,'') , 1))) >= 4, CONCAT(LEFT(ifnull(users.lastname,''), 5), LEFT(ifnull(users.firstname,''), 1), LEFT(ifnull(users.middlename,'') , 1)), LEFT(CONCAT(LEFT(ifnull(users.lastname,''), 5), LEFT(ifnull(users.firstname,''), 1), LEFT(ifnull(users.middlename,'') , 1), LPAD(FLOOR(RAND() * 1000), 4, '0')), 4) ) ### IF(LENGTH(CONCAT(LEFT(ifnull(users.lastname,''), 5), LEFT(ifnull(users.firstname,''), 1), LEFT(ifnull(users.middlename,'') , 1))) >= 4, CONCAT(LEFT(ifnull(users.lastname,''), 5), LEFT(ifnull(users.firstname,''), 1), LEFT(ifnull(users.middlename,'') , 1)), LEFT(CONCAT(LEFT(ifnull(users.lastname,''), 5), LEFT(ifnull(users.firstname,''), 1), LEFT(ifnull(users.middlename,'') , 1), LPAD(FLOOR(RAND() * 1000), 4, '0')), 4)) +1

IF(LENGTH(CONCAT(LEFT(ifnull(users.lastname,''), 5), LEFT(ifnull(users.firstname,''), 1), LEFT(ifnull(users.middlename,'') , 1))) >= 4, CONCAT(LEFT(ifnull(users.lastname,''), 5), LEFT(ifnull(users.firstname,''), 1), LEFT(ifnull(users.middlename,'') , 1)), LEFT(CONCAT(LEFT(ifnull(users.lastname,''), 5), LEFT(ifnull(users.firstname,''), 1), LEFT(ifnull(users.middlename,'') , 1), LPAD(FLOOR(RAND() * 1000), 4, '0')), 4) ) ### IF(LENGTH(CONCAT(LEFT(ifnull(users.lastname,''), 5), LEFT(ifnull(users.firstname,''), 1), LEFT(ifnull(users.middlename,'') , 1))) >= 4, CONCAT(LEFT(ifnull(users.lastname,''), 5), LEFT(ifnull(users.firstname,''), 1), LEFT(ifnull(users.middlename,'') , 1)), LEFT(CONCAT(LEFT(ifnull(users.lastname,''), 5), LEFT(ifnull(users.firstname,''), 1), LEFT(ifnull(users.middlename,'') , 1), LPAD(FLOOR(RAND() * 1000+1), 4, '0')), 4))


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

nvachhani
Regular Contributor
Regular Contributor

I am seeing the same issue, the logs are producing the same systemusername in the second case and thus failing.

IF(LENGTH(CONCAT(LEFT(ifnull(users.lastname,''), 5), LEFT(ifnull(users.firstname,''), 1), LEFT(ifnull(users.middlename,'') , 1))) >= 4, CONCAT(LEFT(ifnull(users.lastname,''), 5), LEFT(ifnull(users.firstname,''), 1), LEFT(ifnull(users.middlename,'') , 1)), LEFT(CONCAT(LEFT(ifnull(users.lastname,''), 5), LEFT(ifnull(users.firstname,''), 1), LEFT(ifnull(users.middlename,'') , 1), LPAD(FLOOR(RAND() * 1000), 4, '0')), 4) ) ### IF(LENGTH(CONCAT(LEFT(ifnull(users.lastname,''), 5), LEFT(ifnull(users.firstname,''), 1), LEFT(ifnull(users.middlename,'') , 1))) >= 4, CONCAT(LEFT(ifnull(users.lastname,''), 5), LEFT(ifnull(users.firstname,''), 1), LEFT(ifnull(users.middlename,'') , 1)), LEFT(CONCAT(LEFT(ifnull(users.lastname,''), 5), LEFT(ifnull(users.firstname,''), 1), LEFT(ifnull(users.middlename,'') , 1), LPAD(FLOOR(RAND() * 100+1), 4, '0')), 4))


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

nvachhani
Regular Contributor
Regular Contributor

Unfortunately it is still failing, I have attached the logs for clarity. It still produces same systemusername as first rule.

Refer https://forums.saviynt.com/t5/identity-governance/advance-config-for-systemusername-creation-excludi...


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