I set up a pretty common flow: Name = First Middle Last
However, when the middle name is empty, I don't want two blanks between first and last name. So, how's this for a custom expression? (Note that I'm assuming that first and last name are always present.)
Trim(givenName+" "+HR_MIDDLE_NAME)+" "+sn
Submit, import, sync. Now I run a full sync from my target MA. No errors. We're good, right? Not so fast; let's check the attribute flow. No flow into Name.
Okay, so let's run a full sync preview on one of the connectors. The status of the flow is Error. (Good luck finding an error message.)
- Full sync preview
            - 
                    Connector updates
                    - 
                            Export attribute flow
                            - Outbound sync rules
 
 
- 
                            Export attribute flow
                            
 
- 
                    Connector updates
                    
| 
Status | 
MV attribute | 
Mapping type | 
Data source attribute | 
Initial value | 
Final value | 
| 
Error | 
sync-rule-mapping - expression | 
NAME | 
(Unchanged) | 
So what happened? Evidently, FIM doesn't like it when you concatenate an attribute that isn't present on the metaverse object. (Has a funny way of showing it though, doesn't it?)
For my reference and yours, here are the results of other experiments that I ran on this flow.
- HR_MIDDLE_NAME is not present in MV
- (Assume givenName and sn are always present)
| 
Description | 
Function | 
Flow definition | 
Result/status | 
|---|---|---|---|
| 
MV attribute not present, embedded expr in Trim | 
CustomExpression | 
Trim(givenName+" "+HR_MIDDLE_NAME)+" "+sn | 
Error | 
| 
Same expression but using concat feature in portal interface | 
Concat | 
Trim(CustomExpression(givenName+" "+HR_MIDDLE_NAME))+" "+sn | 
Error | 
| 
Added IsPresent check and removed Trim | 
CustomExpression | 
givenName+IIF(IsPresent(HR_MIDDLE_NAME)," "+HR_MIDDLE_NAME,"")+" "+sn | 
Success | 
| 
Trim function with no assumptions | 
CustomExpression | 
Trim( 
""+ 
IIF(IsPresent(givenName),givenName,"")+ 
" "+ 
IIF(IsPresent(HR_MIDDLE_NAME),HR_MIDDLE_NAME,"")+ 
" "+ 
IIF(IsPresent(sn),sn,"") 
) | 
Parse failure: 
Parameter of function Trim does not match | 
| 
(Test embedded expr in Trim) | 
CustomExpression | 
Trim(givenName+" "+sn) | 
(Success) | 
| 
(Test MV attribute not present in Trim) | 
CustomExpression | 
givenName+" "+HR_MIDDLE_NAME+" "+sn | 
(Error) | 
 
No comments:
Post a Comment