SailPoint Recommendation for LCS

Hello everyone,

I was wondering if any knows what the current recommendation for LCS management is currently. I know that this can be managed via Cloud Rules, Transforms, and Workflows. Each of which have there own pros and cons to using one over the other.

Currently in my tenant we are using the transform method. I need to modify this process to include a prehire logic to the process. After reviewing the current configuration of the transforms I am seeing that this was set up by a partner in a very complex manner.

While I understand why this is so complex (this was built pre-workflow) I am really wondering if I can simplify the process to be able to better algin with it being able to be managed by a team of 5. With only 1 member of that team with any development experience. Any recommendations welcome.

Example of current process:

WD - Static - Lifecycle State

Calls the following Transforms

  • Transform - Static - isHotTerm
  • DateCompare - HireDate to TermDate
  • Transform - DateCompare - Involuntary Term

Json of transform

{
    "id": "Redacted",
    "name": "WD - Static - Lifecycle State",
    "type": "static",
    "attributes": {
        "IS_RESCINDED": {
            "attributes": {
                "values": [
                    {
                        "attributes": {
                            "attributeName": "IS_RESCINDED",
                            "sourceName": "Workday Production Sandbox"
                        },
                        "type": "accountAttribute"
                    },
                    "null"
                ]
            },
            "type": "firstValid"
        },
        "activeFlag": {
            "attributes": {
                "attributeName": "ACTIVE__c",
                "sourceName": "Workday Production Sandbox"
            },
            "type": "accountAttribute"
        },
        "terminationFlag": {
            "attributes": {
                "attributeName": "TERMINATED__c",
                "sourceName": "Workday Production Sandbox"
            },
            "type": "accountAttribute"
        },
        "terminationReason": {
            "attributes": {
                "values": [
                    {
                        "attributes": {
                            "attributeName": "Term Reason Code__c",
                            "sourceName": "Workday Production Sandbox"
                        },
                        "type": "accountAttribute"
                    },
                    "null"
                ]
            },
            "type": "firstValid"
        },
        "onLeaveFlag": {
            "attributes": {
                "values": [
                    {
                        "attributes": {
                            "attributeName": "Status__c",
                            "sourceName": "Workday Production Sandbox"
                        },
                        "type": "accountAttribute"
                    },
                    "null"
                ]
            },
            "type": "firstValid"
        },
        "isHotTerm": {
            "attributes": {
                "id": "Transform - Static - isHotTerm"
            },
            "type": "reference"
        },
        "hireDate_termDate": {
            "attributes": {
                "id": "DateCompare - HireDate to TermDate"
            },
            "type": "reference"
        },
        "involuntaryTerm": {
            "attributes": {
                "id": "Transform - DateCompare - Involuntary Term"
            },
            "type": "reference"
        },
        "value": "#if( $IS_RESCINDED.equals(\"true\") && !$activeFlag.equals(\"1\") )inactive#elseif( $terminationReason.equals(\"Involuntary\") && $hireDate_termDate.equals(\"terminate\") && ( $activeFlag.equals(\"0\") && $terminationFlag.equals(\"1\") ))$involuntaryTerm#elseif( !$onLeaveFlag.equals(\"null\") && $onLeaveFlag.equals(\"LOA\") )leave#elseif( $activeFlag.equals(\"1\") && $terminationFlag.equals(\"0\") )active#elseif( $activeFlag.equals(\"0\") && $terminationFlag.equals(\"1\") )$isHotTerm#{else}unknown#end"
    },
    "internal": false
}

Transform - Static - isHotTerm

Calls the following Transforms

  • DateCompare - Pre Term and Inactive for LCS

Json of transform

{
    "id": "Redacted",
    "name": "WD - Static - isHotTerm",
    "type": "static",
    "attributes": {
        "termReason": {
            "attributes": {
                "input": {
                    "attributes": {
                        "values": [
                            {
                                "attributes": {
                                    "attributeName": "Term SubReason Code__c",
                                    "sourceName": "Workday Production Sandbox"
                                },
                                "type": "accountAttribute"
                            },
                            {
                                "attributes": {
                                    "attributeName": "Term Reason Code__c",
                                    "sourceName": "Workday Production Sandbox"
                                },
                                "type": "accountAttribute"
                            },
                            "null"
                        ]
                    },
                    "type": "firstValid"
                },
                "substring": "Involuntary"
            },
            "type": "indexOf"
        },
        "inactiveOrPreTerm": {
            "attributes": {
                "id": "DateCompare - Pre Term and Inactive for LCS"
            },
            "type": "reference"
        },
        "value": "#if( $termReason == -1 )$inactiveOrPreTerm#{else}inactive#end"
    },
    "internal": false
}

DateCompare - HireDate to TermDate

Json of transform

{
    "id": "Redacted",
    "name": "DateCompare - HireDate to TermDate",
    "type": "dateCompare",
    "attributes": {
        "firstDate": {
            "attributes": {
                "input": {
                    "attributes": {
                        "values": [
                            {
                                "attributes": {
                                    "sourceName": "Workday Production Sandbox",
                                    "attributeName": "Hire Date__c"
                                },
                                "type": "accountAttribute"
                            },
                            {
                                "attributes": {
                                    "sourceName": "Workday Sandbox",
                                    "attributeName": "Hire Date__c"
                                },
                                "type": "accountAttribute"
                            },
                            "2021-08-06"
                        ]
                    },
                    "type": "firstValid"
                },
                "inputFormat": "yyyy-MM-dd",
                "outputFormat": "ISO8601"
            },
            "type": "dateFormat"
        },
        "secondDate": {
            "attributes": {
                "input": {
                    "attributes": {
                        "values": [
                            {
                                "attributes": {
                                    "sourceName": "Workday Production Sandbox",
                                    "attributeName": "Term Date__c"
                                },
                                "type": "accountAttribute"
                            },
                            {
                                "attributes": {
                                    "sourceName": "Workday Sandbox",
                                    "attributeName": "Term Date__c"
                                },
                                "type": "accountAttribute"
                            },
                            "1900-08-07"
                        ]
                    },
                    "type": "firstValid"
                },
                "inputFormat": "yyyy-MM-dd",
                "outputFormat": "ISO8601"
            },
            "type": "dateFormat"
        },
        "operator": "GTE",
        "positiveCondition": "active",
        "negativeCondition": "terminate"
    },
    "internal": false
}

Transform - DateCompare - Involuntary Term

Calls the following Transforms

  • Transform - DateMath - getCurrentDate

Json of transform

{
    "id": "Redacted",
    "name": "Transform - DateCompare - Involuntary Term",
    "type": "dateCompare",
    "attributes": {
        "firstDate": {
            "type": "dateFormat",
            "attributes": {
                "input": {
                    "attributes": {
                        "input": {
                            "attributes": {
                                "expression": "+1d/h",
                                "roundUp": true,
                                "input": {
                                    "attributes": {
                                        "input": {
                                            "attributes": {
                                                "values": [
                                                    {
                                                        "attributes": {
                                                            "attributeName": "Term Date__c",
                                                            "sourceName": "Workday Production Sandbox"
                                                        },
                                                        "type": "accountAttribute"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "attributeName": "Term Date__c",
                                                            "sourceName": "Workday Sandbox"
                                                        },
                                                        "type": "accountAttribute"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "attributeName": "Term Date__c",
                                                            "sourceName": "Workday Test Data"
                                                        },
                                                        "type": "accountAttribute"
                                                    },
                                                    "2999-12-13"
                                                ]
                                            },
                                            "type": "firstValid"
                                        },
                                        "inputFormat": "yyyy-MM-dd",
                                        "outputFormat": "ISO8601"
                                    },
                                    "type": "dateFormat"
                                }
                            },
                            "type": "dateMath"
                        },
                        "begin": 0,
                        "end": 10
                    },
                    "type": "substring"
                },
                "inputFormat": "yyyy-MM-dd",
                "outputFormat": "ISO8601"
            }
        },
        "secondDate": {
            "attributes": {
                "id": "Transform - DateMath - getCurrentDate"
            },
            "type": "reference"
        },
        "operator": "gt",
        "positiveCondition": "active",
        "negativeCondition": "inactive"
    },
    "internal": false
}

DateCompare - Pre Term and Inactive for LCS

Calls the following Transforms

  • Transform - DateCompare - Determine Preterm LCS

Json of transform

{
    "id": "Redacted",
    "name": "DateCompare - Pre Term and Inactive for LCS",
    "type": "dateCompare",
    "attributes": {
        "firstDate": {
            "type": "dateFormat",
            "attributes": {
                "input": {
                    "attributes": {
                        "input": {
                            "attributes": {
                                "expression": "+3d/d",
                                "roundUp": false,
                                "input": {
                                    "attributes": {
                                        "input": {
                                            "attributes": {
                                                "values": [
                                                    {
                                                        "attributes": {
                                                            "attributeName": "Term Date__c",
                                                            "sourceName": "Workday Production Sandbox"
                                                        },
                                                        "type": "accountAttribute"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "attributeName": "Term Date__c",
                                                            "sourceName": "Workday Sandbox"
                                                        },
                                                        "type": "accountAttribute"
                                                    },
                                                    "2999-12-31"
                                                ]
                                            },
                                            "type": "firstValid"
                                        },
                                        "inputFormat": "yyyy-MM-dd",
                                        "outputFormat": "ISO8601"
                                    },
                                    "type": "dateFormat"
                                }
                            },
                            "type": "dateMath"
                        },
                        "begin": 0,
                        "end": 10
                    },
                    "type": "substring"
                },
                "inputFormat": "yyyy-MM-dd",
                "outputFormat": "ISO8601"
            }
        },
        "secondDate": {
            "attributes": {
                "input": {
                    "attributes": {
                        "expression": "now/d",
                        "roundUp": false
                    },
                    "type": "dateMath"
                },
                "inputFormat": "yyyy-MM-dd'T'hh:mmX",
                "outputFormat": "ISO8601"
            },
            "type": "dateFormat"
        },
        "operator": "gte",
        "positiveCondition": {
            "attributes": {
                "id": "Transform - DateCompare - Determine Preterm LCS"
            },
            "type": "reference"
        },
        "negativeCondition": "inactive"
    },
    "internal": false
}

Transform - DateMath - getCurrentDate

Json of transform

{
    "id": "Redacted",
    "name": "Transform - DateMath - getCurrentDate",
    "type": "dateMath",
    "attributes": {
        "expression": "now-5h/s",
        "roundUp": false
    },
    "internal": false
}

Transform - DateCompare - Determine Preterm LCS

Json of transform

{
    "id": "Redacted",
    "name": "Transform - DateCompare - Determine Preterm LCS",
    "type": "dateCompare",
    "attributes": {
        "firstDate": {
            "type": "dateFormat",
            "attributes": {
                "input": {
                    "attributes": {
                        "input": {
                            "attributes": {
                                "expression": "+1d/h",
                                "roundUp": true,
                                "input": {
                                    "attributes": {
                                        "input": {
                                            "attributes": {
                                                "values": [
                                                    {
                                                        "attributes": {
                                                            "attributeName": "Term Date__c",
                                                            "sourceName": "Workday Production Sandbox"
                                                        },
                                                        "type": "accountAttribute"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "attributeName": "Term Date__c",
                                                            "sourceName": "Workday Sandbox"
                                                        },
                                                        "type": "accountAttribute"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "attributeName": "Term Date__c",
                                                            "sourceName": "Workday Test Data"
                                                        },
                                                        "type": "accountAttribute"
                                                    },
                                                    "2999-12-13"
                                                ]
                                            },
                                            "type": "firstValid"
                                        },
                                        "inputFormat": "yyyy-MM-dd",
                                        "outputFormat": "ISO8601"
                                    },
                                    "type": "dateFormat"
                                }
                            },
                            "type": "dateMath"
                        },
                        "begin": 0,
                        "end": 10
                    },
                    "type": "substring"
                },
                "inputFormat": "yyyy-MM-dd",
                "outputFormat": "ISO8601"
            }
        },
        "secondDate": {
            "type": "dateMath",
            "attributes": {
                "expression": "now-6h/s",
                "roundUp": false
            }
        },
        "operator": "gt",
        "positiveCondition": "active",
        "negativeCondition": "preterm"
    },
    "internal": false
}

Critera for LCS

LSC State Critera
PreHire HireDate__c >= now.AddDays(-1) {User should move from PreHire to Active 24 hours before starting}
Active HireDate__c <= now.AddDays(-1) {User should move from PreHire to Active 24 hours before starting}
PreTerm User should move into PreTerm on last day worked.
Inactive This should be term date +3 days
Purge This needs to be retired
Leave This is a place holder for furture use

Based on the details you provided, it looks like your LCS states are all based on dates (ie hire date, start date, NOW, Involuntary Term, Pre-Term, TermDate, InactiveDate)

From these, I am guessing these date determine the LCS the user is in (Pre-hire, Active, Involuntary-Term, Pre-Term, Terminated, Inactive)

What would be a good place to start if you want to add the new date AND streamline the Transform would be to start by defining the LCS state by it’s start and end values in a spreadsheet. For example:

LCS Criteria
Pre-hire ( HireDate IS Null || HireDate > NOW )
Active ( HireDate < NOW & ( Involuntary-Term Not Null & NOW < Involuntary-Term ) & ( TermDate Not Null & NOW < TermDate ) )
Pre-term ( HireDate < NOW & ( Involuntary-Term IS Null ) & ( NOW-30 > TermDate) )
Terminated (TermDate NOT Null & NOW > TermDate & NOW < TermDate+60)
Inactive (TermDate NOT Null & NOW >= TermDate+60)

From here, you’ll be better equiped to start defining the Transform. It looks like the previous partner used referenced transforms to make the process easier to implement the parts, but might be more complex to determine what exectly it is doing. Having a Spreadsheet like this can assist to make sure that these referenced transforms are producing the correct results.

1 Like

Thank you for the reply. To better help others I have edited the original post with exact transforms that are being used to do the calculations. This is going to be a topic I think that will be ever evolving as business needs change.

Perhaps you can polish this up and submit it to ISC Community Knowledge Base :slight_smile:

Sure once I have everything built 100% our and working that would be a great idea to share this out for others.

1 Like

Looking at your update, it looks like the previous partner used Referenced Transforms to calculate the individual values for the Attributes, and then used them in a Velocity Template of a Static Transform. If you look at the Value in the first one (WD - Static - Lifecycle State), that is what is calculating the output, based on the attributes further up in the Transform. If you make it easier to read, you get this (I added the "RETURN: " line for clarity):

#if ( 
    $IS_RESCINDED.equals(\"true\") && 
	!$activeFlag.equals(\"1\") )
		RETURN: inactive
#elseif ( 
    $terminationReason.equals(\"Involuntary\") &&
	$hireDate_termDate.equals(\"terminate\") && 
	( $activeFlag.equals(\"0\") && $terminationFlag.equals(\"1\") ))
		RETURN: $involuntaryTerm
#elseif( 
	!$onLeaveFlag.equals(\"null\") && 
	$onLeaveFlag.equals(\"LOA\") )
		RETURN: leave
#elseif ( 
	$activeFlag.equals(\"1\") && 
	$terminationFlag.equals(\"0\") )
		RETURN: active
#elseif( 
	$activeFlag.equals(\"0\") && 
	$terminationFlag.equals(\"1\") )
		RETURN: $isHotTerm
#{else}
		RETURN: unknown
#end

So for your case, if you would like to add a new Pre-hire state, you would need to define the values you need to calculate that state, and create one or more transforms (if needed) to do that. You can then use the transforms to populate attributes as was previously done. Those attrivuted can then be added to this Velocity Template to be used to populate your LCS. Your Velocity code could then look something like this:

#if ( 
    $IS_RESCINDED.equals(\"true\") && 
	!$activeFlag.equals(\"1\") )
		RETURN: inactive
#elseif ( 
    $terminationReason.equals(\"Involuntary\") &&
	$hireDate_termDate.equals(\"terminate\") && 
	( $activeFlag.equals(\"0\") && $terminationFlag.equals(\"1\") ))
		RETURN: $involuntaryTerm
#elseif( 
	!$onLeaveFlag.equals(\"null\") && 
	$onLeaveFlag.equals(\"LOA\") )
		RETURN: leave
#elseif ( 
	$activeFlag.equals(\"1\") && 
	$terminationFlag.equals(\"0\") )
		RETURN: active
#elseif( 
	$activeFlag.equals(\"0\") && 
	$terminationFlag.equals(\"1\") )
		RETURN: $isHotTerm
#elseif( 
	$prehireFlag.equals(\"1\") && 
	$terminationFlag.equals(\"0\") )
		RETURN: pre-hire
#{else}
		RETURN: unknown
#end

In my previous post, I mentioned putting the details into a table, which would work here, except you would have one table that defined how the LCS calculation was built from the attributes, and one that would have how each attribute is calculated.

Given that there are many ways to handle calculating the LCS state, I am not sure there is one method that is considered best practice. At this point, the method used has been chosen and is not a bad implementation, just a little complex to understand initially. I would recommend that you continue with this method, and add your state to it, unless there is a really compelling reason to switch.

1 Like

I was able to build a transform that I think will do the trick. When I tried to apply this Transform to the parent transform it broke the logic in a different transform. Caused 90% of the attributes to be in Error. The error message was the same just different transform called. Any ideas why this would break that transform? When I removed what I added everything worked again.

Error Message

{677FFDD6-79B3-4841-8A1C-453235F53769}T

#Code that broke the other transform

        "PreHire": {
            "attributes": {
                "id": "Transform - Calculate PreHire LifeCycleState"
            },
            "type": "reference"
        },

"#if( 
           $IS_RESCINDED.equals(\"true\") && 
           !$activeFlag.equals(\"1\") 
)
Returns inactive

#elseif(
           $PreHire.equals(\"prehire\") &&  
           $terminationFlag.equals(\"0\") 
)
Returns $PreHire
#elseif( 
           $terminationReason.equals(\"Involuntary\") && 
           $hireDate_termDate.equals(\"terminate\") && 
           ( $activeFlag.equals(\"0\") && 
           $terminationFlag.equals(\"1\") )
)
Returns $involuntaryTerm
#elseif( 
           !$onLeaveFlag.equals(\"null\") && 
           $onLeaveFlag.equals(\"LOA\") 
)
Returns leave
#elseif( 
           $activeFlag.equals(\"1\") && 
           $terminationFlag.equals(\"0\") 
)
Returns active
#elseif( 
           $activeFlag.equals(\"0\") && 
           $terminationFlag.equals(\"1\") 
)
Returns $isHotTerm
#{else}
Retuens unknown
#end"

New Transform

{
    "id": "Redacted",
    "name": "Transform - Calculate PreHire LifeCycleState",
    "type": "dateCompare",
    "attributes": {
        "requiresPeriodicRefresh": "true",
        "WorkdayHireDate": {
            "attributes": {
                "firstDate": {
                    "attributes": {
                        "expression": "now+1d/d",
                        "roundUp": false
                    },
                    "type": "dateMath"
                },
                "secondDate": {
                    "attributes": {
                        "input": {
                            "attributes": {
                                "values": [
                                    {
                                        "attributes": {
                                            "attributeName": "Hire Date__c",
                                            "sourceName": "Workday Production Sandbox"
                                        },
                                        "type": "accountAttribute"
                                    }
                                ]
                            },
                            "type": "firstValid"
                        },
                        "inputFormat": "yyyy-MM-dd",
                        "outputFormat": "ISO8601"
                    }
                },
                "type": "dateFormat"
            },
            "operator": "GTE",
            "positiveCondition": "active",
            "negativeCondition": "prehire"
        },
        "type": "dateCompare"
    },
    "internal": false
}

Transform Broke

{
    "id": "Redacted",
    "name": "WD - Dual Source - Attribute Value",
    "type": "lookup",
    "attributes": {
        "input": {
            "attributes": {
                "values": [
                    {
                        "attributes": {
                            "workdayLifecycleState": {
                                "attributes": {
                                    "id": "WD - Static - Lifecycle State"
                                },
                                "type": "reference"
                            },
                            "seczettaLifecycleState": {
                                "attributes": {
                                    "values": [
                                        {
                                            "attributes": {
                                                "id": "secZettaLifeCycleState"
                                            },
                                            "type": "reference"
                                        },
                                        "null"
                                    ]
                                },
                                "type": "firstValid"
                            },
                            "value": "#if($seczettaLifecycleState=='no SecZetta account correlated')Workday#elseif($workdayLifecycleState=='inactive' && $seczettaLifecycleState!='inactive')SecZetta#{else}Workday#end"
                        },
                        "type": "static"
                    },
                    ": ",
                    "$attributeDefinition.name"
                ]
            },
            "type": "concat"
        },
        "table": {
            "Workday: lastname": {
                "attributes": {
                    "attributeName": "LAST_NAME",
                    "sourceName": "Workday Production Sandbox"
                },
                "type": "accountAttribute"
            },
            "SecZetta: lastname": {
                "attributes": {
                    "attributeName": "personal_last_name",
                    "sourceName": "SecZetta"
                },
                "type": "accountAttribute"
            },
            "Workday: firstname": {
                "attributes": {
                    "attributeName": "FIRST_NAME",
                    "sourceName": "Workday Production Sandbox"
                },
                "type": "accountAttribute"
            },
            "SecZetta: firstname": {
                "attributes": {
                    "attributeName": "personal_first_name",
                    "sourceName": "SecZetta"
                },
                "type": "accountAttribute"
            },
            "Workday: personalEmail": {
                "attributes": {
                    "attributeName": "EMAIL_ADDRESS_HOME",
                    "sourceName": "Workday Production Sandbox"
                },
                "type": "accountAttribute"
            },
            "SecZetta: personalEmail": {
                "attributes": {
                    "attributeName": "personal_email",
                    "sourceName": "SecZetta"
                },
                "type": "accountAttribute"
            },
            "Workday: company": {
                "attributes": {
                    "attributeName": "LOCATION",
                    "sourceName": "Workday Production Sandbox"
                },
                "type": "accountAttribute"
            },
            "Workday: costCenter": {
                "attributes": {
                    "attributeName": "Cost Center__c",
                    "sourceName": "Workday Production Sandbox"
                },
                "type": "accountAttribute"
            },
            "SecZetta: costCenter": {
                "attributes": {
                    "attributeName": "no_attribute",
                    "sourceName": "SecZetta"
                },
                "type": "accountAttribute"
            },
            "Workday: country": {
                "attributes": {
                    "attributeName": "COUNTRY",
                    "sourceName": "Workday Production Sandbox"
                },
                "type": "accountAttribute"
            },
            "SecZetta: country": {
                "attributes": {
                    "attributeName": "no_attribute",
                    "sourceName": "SecZetta"
                },
                "type": "accountAttribute"
            },
            "Workday: department": {
                "attributes": {
                    "attributeName": "Department__c",
                    "sourceName": "Workday Production Sandbox"
                },
                "type": "accountAttribute"
            },
            "SecZetta: department": {
                "attributes": {
                    "id": "Substring - Seczetta Department Name"
                },
                "type": "reference"
            },
            "Workday: departmentCode": {
                "attributes": {
                    "id": "Substring - Department Code"
                },
                "type": "reference"
            },
            "SecZetta: departmentCode": {
                "attributes": {
                    "id": "Substring - Seczetta Department Code"
                },
                "type": "reference"
            },
            "Workday: disabledOu": {
                "attributes": {
                    "input": {
                        "attributes": {
                            "attributeName": "LOCATION_ID",
                            "sourceName": "Workday Production Sandbox"
                        },
                        "type": "accountAttribute"
                    },
                    "id": "Transform - Lookup - getDisableOU"
                },
                "type": "reference"
            },
            "SecZetta: disabledOu": {
                "attributes": {
                    "id": "Transform - Non-Employee - getDisableOU"
                },
                "type": "reference"
            },
            "Workday: displayName": {
                "attributes": {
                    "id": "WD - Concat - Display Name"
                },
                "type": "reference"
            },
            "SecZetta: displayName": {
                "attributes": {
                    "id": "SecZetta - Concat - DisplayName"
                },
                "type": "reference"
            },
            "Workday: identificationNumber": {
                "attributes": {
                    "attributeName": "FILENUMBER",
                    "sourceName": "Workday Production Sandbox"
                },
                "type": "accountAttribute"
            },
            "SecZetta: identificationNumber": {
                "attributes": {
                    "attributeName": "uid",
                    "sourceName": "SecZetta"
                },
                "type": "accountAttribute"
            },
            "Workday: employeeType": {
                "attributes": {
                    "attributeName": "Worker Type__c",
                    "sourceName": "Workday Production Sandbox"
                },
                "type": "accountAttribute"
            },
            "SecZetta: employeeType": {
                "attributes": {
                    "values": [
                        {
                            "attributes": {
                                "attributeName": "assignment_population",
                                "sourceName": "SecZetta Assignments"
                            },
                            "type": "accountAttribute"
                        },
                        {
                            "attributes": {
                                "name": "employeeType"
                            },
                            "type": "identityAttribute"
                        }
                    ]
                },
                "type": "firstValid"
            },
            "Workday: endDate": {
                "attributes": {
                    "id": "Workday - DateFormat - Termination Date"
                },
                "type": "reference"
            },
            "SecZetta: endDate": {
                "attributes": {
                    "attributeName": "engagement_end_date",
                    "sourceName": "SecZetta Assignments"
                },
                "type": "accountAttribute"
            },
            "Workday: jobCategory": {
                "attributes": {
                    "attributeName": "Job Category__c",
                    "sourceName": "Workday Production Sandbox"
                },
                "type": "accountAttribute"
            },
            "SecZetta: jobCategory": {
                "attributes": {
                    "attributeName": "no_attribute",
                    "sourceName": "SecZetta"
                },
                "type": "accountAttribute"
            },
            "Workday: jobCode": {
                "attributes": {
                    "attributeName": "JOBCODE",
                    "sourceName": "Workday Production Sandbox"
                },
                "type": "accountAttribute"
            },
            "SecZetta: jobCode": {
                "attributes": {
                    "attributeName": "assignment_sub_population",
                    "sourceName": "SecZetta Assignments"
                },
                "type": "accountAttribute"
            },
            "Workday: jobFamily": {
                "attributes": {
                    "attributeName": "Job Family__c",
                    "sourceName": "Workday Production Sandbox"
                },
                "type": "accountAttribute"
            },
            "SecZetta: jobFamily": {
                "attributes": {
                    "attributeName": "no_attribute",
                    "sourceName": "SecZetta"
                },
                "type": "accountAttribute"
            },
            "Workday: jobProfile": {
                "attributes": {
                    "attributeName": "Job Profile__c",
                    "sourceName": "Workday Production Sandbox"
                },
                "type": "accountAttribute"
            },
            "SecZetta: jobProfile": {
                "attributes": {
                    "attributeName": "assignment_subpopulation_name",
                    "sourceName": "SecZetta Assignments"
                },
                "type": "accountAttribute"
            },
            "Workday: jobSubFamily": {
                "attributes": {
                    "attributeName": "Job Sub-Family__c",
                    "sourceName": "Workday Production Sandbox"
                },
                "type": "accountAttribute"
            },
            "SecZetta: jobSubFamily": {
                "attributes": {
                    "attributeName": "no_attribute",
                    "sourceName": "SecZetta"
                },
                "type": "accountAttribute"
            },
            "Workday: jobTitle": {
                "attributes": {
                    "attributeName": "Job Profile__c",
                    "sourceName": "Workday Production Sandbox"
                },
                "type": "accountAttribute"
            },
            "SecZetta: jobTitle": {
                "attributes": {
                    "attributeName": "no_attribute",
                    "sourceName": "SecZetta"
                },
                "type": "accountAttribute"
            },
            "Workday: lastDayWorked": {
                "attributes": {
                    "attributeName": "Term Date__c",
                    "sourceName": "Workday Production Sandbox"
                },
                "type": "accountAttribute"
            },
            "SecZetta: lastDayWorked": {
                "attributes": {
                    "attributeName": "professional_phone_number",
                    "sourceName": "SecZetta"
                },
                "type": "accountAttribute"
            },
            "Workday: location": {
                "attributes": {
                    "attributeName": "LOCATION",
                    "sourceName": "Workday Production Sandbox"
                },
                "type": "accountAttribute"
            },
            "SecZetta: location": {
                "attributes": {
                    "input": {
                        "attributes": {
                            "attributeName": "assignment_location_id_ne_attribute",
                            "sourceName": "SecZetta Assignments"
                        },
                        "type": "accountAttribute"
                    },
                    "begin": 5
                },
                "type": "substring"
            },
            "Workday: locationId": {
                "attributes": {
                    "attributeName": "LOCATION_ID",
                    "sourceName": "Workday Production Sandbox"
                },
                "type": "accountAttribute"
            },
            "SecZetta: locationId": {
                "attributes": {
                    "input": {
                        "attributes": {
                            "attributeName": "assignment_location_id_ne_attribute",
                            "sourceName": "SecZetta Assignments"
                        },
                        "type": "accountAttribute"
                    },
                    "begin": 0,
                    "end": 4
                },
                "type": "substring"
            },
            "Workday: manager": {
                "attributes": {
                    "attributeName": "MANAGER_ID",
                    "sourceName": "Workday Production Sandbox"
                },
                "type": "accountAttribute"
            },
            "SecZetta: manager": {
                "attributes": {
                    "attributeName": "assignment_manager",
                    "sourceName": "SecZetta Assignments"
                },
                "type": "accountAttribute"
            },
            "Workday: middleName": {
                "attributes": {
                    "attributeName": "MIDDLE_NAME",
                    "sourceName": "Workday Production Sandbox"
                },
                "type": "accountAttribute"
            },
            "SecZetta: middleName": {
                "attributes": {
                    "attributeName": "personal_middle_name",
                    "sourceName": "SecZetta"
                },
                "type": "accountAttribute"
            },
            "Workday: ministryCode": {
                "attributes": {
                    "id": "Transform - Substring - Workday MinistryCode"
                },
                "type": "reference"
            },
            "SecZetta: ministryCode": {
                "attributes": {
                    "id": "SecZetta - substring - Assignment MinistryCode"
                },
                "type": "reference"
            },
            "Workday: organizationRegion": {
                "attributes": {
                    "attributeName": "Org Region__c",
                    "sourceName": "Workday Production Sandbox"
                },
                "type": "accountAttribute"
            },
            "SecZetta: organizationRegion": {
                "attributes": {
                    "attributeName": "assignment_organization_name_ne_attribute",
                    "sourceName": "SecZetta Assignments"
                },
                "type": "accountAttribute"
            },
            "Workday: phone": {
                "attributes": {
                    "attributeName": "HOME_TELEPHONE",
                    "sourceName": "Workday Production Sandbox"
                },
                "type": "accountAttribute"
            },
            "SecZetta: phone": {
                "attributes": {
                    "attributeName": "personal_phone_number",
                    "sourceName": "SecZetta"
                },
                "type": "accountAttribute"
            },
            "Workday: preferredFirstname": {
                "attributes": {
                    "attributeName": "PREFERRED_FIRSTNAME",
                    "sourceName": "Workday Production Sandbox"
                },
                "type": "accountAttribute"
            },
            "SecZetta: preferredFirstname": {
                "attributes": {
                    "attributeName": "preferred_name_ne_attribute",
                    "sourceName": "SecZetta"
                },
                "type": "accountAttribute"
            },
            "Workday: preferredLastname": {
                "attributes": {
                    "attributeName": "PREFERRED_LASTNAME",
                    "sourceName": "Workday Production Sandbox"
                },
                "type": "accountAttribute"
            },
            "SecZetta: preferredLastname": {
                "attributes": {
                    "attributeName": "no_attribute",
                    "sourceName": "SecZetta"
                },
                "type": "accountAttribute"
            },
            "Workday: preferredName": {
                "attributes": {
                    "attributeName": "Preferred Name__c",
                    "sourceName": "Workday Production Sandbox"
                },
                "type": "accountAttribute"
            },
            "SecZetta: preferredName": {
                "attributes": {
                    "id": "Transform - FirstVaild - SecZetta - PreferredName"
                },
                "type": "reference"
            },
            "Workday: rbpgOffsetDays": {
                "attributes": {
                    "id": "Transform - Static - rbpgOffsetDays"
                },
                "type": "reference"
            },
            "Workday: newRbpgPositionCode": {
                "attributes": {
                    "id": "WD - Concat - RBPG Position Code"
                },
                "type": "reference"
            },
            "Workday: rbpgPositionCode": {
                "attributes": {
                    "id": "7e9e678d214d484b8094087a3a04b48d",
                    "name": "RBPG Code WDPS"
                },
                "type": "rule"
            },
            "Workday: rbpgTrigger": {
                "attributes": {
                    "id": "4ed341e4002649faa7646fcb57d13325",
                    "name": "RBPG Trigger WDPS"
                },
                "type": "rule"
            },
            "Workday: startDate": {
                "attributes": {
                    "attributeName": "Hire Date__c",
                    "sourceName": "Workday Production Sandbox"
                },
                "type": "accountAttribute"
            },
            "SecZetta: startDate": {
                "attributes": {
                    "id": "Transform - DateFormat - SecZetta StartDate"
                },
                "type": "reference"
            },
            "Workday: supplierId": {
                "attributes": {
                    "attributeName": "Supplier_ID__c",
                    "sourceName": "Workday Production Sandbox"
                },
                "type": "accountAttribute"
            },
            "SecZetta: supplierId": {
                "attributes": {
                    "attributeName": "no_attribute",
                    "sourceName": "SecZetta"
                },
                "type": "accountAttribute"
            },
            "Workday: terminationReason": {
                "attributes": {
                    "attributeName": "Term Reason Code__c",
                    "sourceName": "Workday Production Sandbox"
                },
                "type": "accountAttribute"
            },
            "Workday: terminationSubReason": {
                "attributes": {
                    "attributeName": "Term SubReason Code__c",
                    "sourceName": "Workday Production Sandbox"
                },
                "type": "accountAttribute"
            },
            "Workday: userSubType": {
                "attributes": {
                    "attributeName": "Worker Type__c",
                    "sourceName": "Workday Production Sandbox"
                },
                "type": "accountAttribute"
            },
            "SecZetta: userSubType": {
                "attributes": {
                    "attributeName": "assignment_sub_population",
                    "sourceName": "SecZetta Assignments"
                },
                "type": "accountAttribute"
            },
            "Workday: workPhone": {
                "attributes": {
                    "attributeName": "WORK_TELEPHONE",
                    "sourceName": "Workday Production Sandbox"
                },
                "type": "accountAttribute"
            },
            "SecZetta: workPhone": {
                "attributes": {
                    "attributeName": "professional_phone_number",
                    "sourceName": "SecZetta"
                },
                "type": "accountAttribute"
            },
            "Workday: standardOu": {
                "attributes": {
                    "input": {
                        "attributes": {
                            "attributeName": "LOCATION_ID",
                            "sourceName": "Workday Production Sandbox"
                        },
                        "type": "accountAttribute"
                    },
                    "id": "Transform - Lookup - getStandardOU"
                },
                "type": "reference"
            },
            "SecZetta: standardOu": {
                "attributes": {
                    "id": "Transform - Non-Employee - getStandardOU"
                },
                "type": "reference"
            },
            "default": null
        }
    },
    "internal": false
}

@mpotti In the first code block after the error message, did you format it that way (Similar to how I did) or is that what you are using within your transform? The formatting I used is only for readability on the forum and it likely won’t work being placed into a transform. The "RETURN: " line I also added for clarity, and it is not a velocity template value. I would review your original velocity template under the value field to see how it is set up.

For the “New Transform”, I see for your secondDate, you have it choosing the “Hire Date__c” within a FirstValid transform, which is good, but you don’t provide a default option for this. If the value of “Hire Date__c” is null, that could cause this error. If this transform returns an error, then it would cause a Null error when the primary transform attempts to do the “PreHire.equals(…)” operation on the returned value.

For the Transform Broke, it looks like it is calling the Transform you are working on “WD - Static - Lifecycle State” so that would make sense that if there was an error in that, it would fail.

I formatted it to make it easier to read and understand. Ok based on your feed back I was able to address the error message for the new transform.

Now that I have the error address I am going to try and rewire this back up to see if I can’t get working as expected.

Final Calculation Transform

{
    "id": "Redacted",
    "name": "Transform - Calculate PreHire LifeCycleState",
    "type": "dateCompare",
    "attributes": {
        "requiresPeriodicRefresh": "true",
        "firstDate": {
            "attributes": {
                "expression": "now+1d/d",
                "roundUp": false
            },
            "type": "dateMath"
        },
        "secondDate": {
                "attributes": {
                    "input": {
                        "attributes": {
                            "values": [
                                {
                                    "attributes": {
                                        "attributeName": "Hire Date__c",
                                        "sourceName": "Workday Production Sandbox"
                                    },
                                    "type": "accountAttribute"
                                },
                                "2021-08-06"
                            ]
                        },
                        "type": "firstValid"
                    },
                    "inputFormat": "yyyy-MM-dd",
                    "outputFormat": "ISO8601"
                },
            "type": "dateFormat"
        },
        "operator": "GTE",
        "positiveCondition": "active",
        "negativeCondition": "prehire"        
    },
    "internal": false
}

Output Screen Print

Unformatted Transform: WD - Static - Lifecycle State

{
    "id": "Redacted",
    "name": "WD - Static - Lifecycle State",
    "type": "static",
    "attributes": {
        "IS_RESCINDED": {
            "attributes": {
                "values": [
                    {
                        "attributes": {
                            "attributeName": "IS_RESCINDED",
                            "sourceName": "Workday Production Sandbox"
                        },
                        "type": "accountAttribute"
                    },
                    "null"
                ]
            },
            "type": "firstValid"
        },
        "activeFlag": {
            "attributes": {
                "attributeName": "ACTIVE__c",
                "sourceName": "Workday Production Sandbox"
            },
            "type": "accountAttribute"
        },
        "terminationFlag": {
            "attributes": {
                "attributeName": "TERMINATED__c",
                "sourceName": "Workday Production Sandbox"
            },
            "type": "accountAttribute"
        },
        "terminationReason": {
            "attributes": {
                "values": [
                    {
                        "attributes": {
                            "attributeName": "Term Reason Code__c",
                            "sourceName": "Workday Production Sandbox"
                        },
                        "type": "accountAttribute"
                    },
                    "null"
                ]
            },
            "type": "firstValid"
        },
        "onLeaveFlag": {
            "attributes": {
                "values": [
                    {
                        "attributes": {
                            "attributeName": "Status__c",
                            "sourceName": "Workday Production Sandbox"
                        },
                        "type": "accountAttribute"
                    },
                    "null"
                ]
            },
            "type": "firstValid"
        },
        "isHotTerm": {
            "attributes": {
                "id": "Transform - Static - isHotTerm"
            },
            "type": "reference"
        },
        "hireDate_termDate": {
            "attributes": {
                "id": "DateCompare - HireDate to TermDate"
            },
            "type": "reference"
        },
        "involuntaryTerm": {
            "attributes": {
                "id": "Transform - DateCompare - Involuntary Term"
            },
            "type": "reference"
        },
        "PreHire": {
            "attributes": {
                "id": "Transform - Calculate PreHire LifeCycleState"
            },
            "type": "reference"
        },
        "value": "#if( $IS_RESCINDED.equals(\"true\") && !$activeFlag.equals(\"1\") )inactive#elseif($PreHire.equals(\"prehire\") && $terminationFlag.equals(\"0\"))$PreHire#elseif( $terminationReason.equals(\"Involuntary\") && $hireDate_termDate.equals(\"terminate\") && ( $activeFlag.equals(\"0\") && $terminationFlag.equals(\"1\") ))$involuntaryTerm#elseif( !$onLeaveFlag.equals(\"null\") && $onLeaveFlag.equals(\"LOA\") )leave#elseif( $activeFlag.equals(\"1\") && $terminationFlag.equals(\"0\") )active#elseif( $activeFlag.equals(\"0\") && $terminationFlag.equals(\"1\") )$isHotTerm#{else}unknown#end"
    },
    "internal": false
}

Output Screen Print

{D96990B6-36CE-419B-9484-87A6AAB28B48}

1 Like

The following Knowledge base article has been created for this topic.

1 Like

This topic was automatically closed 60 days after the last reply. New replies are no longer allowed.