Hey everyone!
We recently purchased SailPoint ISC, and I have started working on some of the transformations we will need to properly build out our identity profiles. I have had success with some of the easier transforms like lookups, but I am having some difficulty with a transform that requires slightly more complex logic.
I have 2 attributes coming from a source called NERM_msft and NERM_login, which are being mapped to identity attributes respectively. I need to create a transform which looks at the values of those 2 attributes, either coming from the source, or once on the identity (Not sure if using identity attributes or source attributes is easier for this) and creates a new identity attribute based on which values are found in the NERM_msft and NERM_login.
Table of conditional statements I want to resolve to
DeviceLogin IG + MSFT selected → Premium | ![]() |
---|---|
DeviceLogin IG + no MSFT → Basic | ![]() |
DeviceLogin Client + MSFT Suite → PremiumAlt | ![]() |
DeviceLogin Client + Teams + Outlook → Mobile Comms | ![]() |
DeviceLogin Client + only Teams → Mobile Comms | ![]() |
DeviceLogin Client + only Outlook → Mail Only | ![]() |
Else fallback → ID Only | ![]() |
I am struggling to decide which would be the best type to perform something like this. Right now I was attempting to use the conditional type, with something like this:
{
"name": "EmployeeSubtype_Expression",
"type": "conditional",
"attributes": {
"expression": "($nermDevicelogin eq 'IG') and (($nermMsft co 'Teams') or ($nermMsft co 'MSFT Suite') or ($nermMsft co 'Outlook (Email)'))",
"positiveCondition": "$premium",
"negativeCondition": {
"type": "conditional",
"attributes": {
"expression": "($nermDevicelogin eq 'IG') and (($nermMsft eq '') or ($nermMsft eq null))",
"positiveCondition": "$basic",
"negativeCondition": {
"type": "conditional",
"attributes": {
"expression": "($nermDevicelogin eq 'Client') and ($nermMsft co 'MSFT Suite')",
"positiveCondition": "$premiumAlt",
"negativeCondition": {
"type": "conditional",
"attributes": {
"expression": "($nermDevicelogin eq 'Client') and (($nermMsft co 'Teams') and ($nermMsft co 'Outlook (Email)'))",
"positiveCondition": "$mobileComms",
"negativeCondition": {
"type": "conditional",
"attributes": {
"expression": "($nermDevicelogin eq 'Client') and ($nermMsft co 'Teams')",
"positiveCondition": "$mobileComms",
"negativeCondition": {
"type": "conditional",
"attributes": {
"expression": "($nermDevicelogin eq 'Client') and ($nermMsft co 'Outlook (Email)')",
"positiveCondition": "$mailOnly",
"negativeCondition": "$idOnly"
}
}
}
}
}
}
}
}
}
},
"nermDevicelogin": {
"type": "identityAttribute",
"attributes": {
"name": "nermDevicelogin"
}
},
"nermMsft": {
"type": "identityAttribute",
"attributes": {
"name": "nermMsft"
}
},
"premium": {
"type": "static",
"attributes": {
"value": "Premium"
}
},
"basic": {
"type": "static",
"attributes": {
"value": "Basic"
}
},
"premiumAlt": {
"type": "static",
"attributes": {
"value": "PremiumAlt"
}
},
"mobileComms": {
"type": "static",
"attributes": {
"value": "Mobile Communications"
}
},
"mailOnly": {
"type": "static",
"attributes": {
"value": "Mail Only"
}
},
"idOnly": {
"type": "static",
"attributes": {
"value": "ID Only"
}
}
}
}
However I am not getting the values I expect from the conditions. I have a feeling something in my code is being written wrong but I am not completely sure what it is. Above code was written with help from CHATGPT so I am sure something is amiss. Any help that can be given or guidance would be greatly appreciated!
Thank you!