I'm trying to write an app that takes enumerated status from 5 different project phases and consolidates them into a single overall status based on specific rules. There are 5 enumerated status types. The goal is to set the variable ("NewStatus") with the result. Here's a copy of the Change Variable if-the-else expression -- with many of the names abbreviated. Based on the research I've done, this should work. However, I'm getting an error: mismatched input 'AND' expecting ')'
if ( $Eval/PRS = MFM.StatEnum.Not_Started AND $Eval/PSS = MFM.StatEnum.Not_Started AND $Eval/PC1S = MFM.StatEnum.Not_Started AND $Eval/PC2S = MFM.StatEnum.Not_Started AND $Eval/PDS = MFM.StatEnum.Not_Started) then 'Not Started' else if ( $Eval/PDS = MFM.StatEnum.Completed ) then 'Completed' else if ($Eval/PRS = MFM.StatEnum.Deferred OR $Eval/PSS = MFM.StatEnum.Deferred OR $Eval/PC1S = MFM.StatEnum.Deferred OR $Eval/PC2S = MFM.StatEnum.Deferred OR $Eval/PDS = MFM.StatEnum.Deferred) then 'Deferred' else if ($Eval/PRS = MFM.StatEnum.Waiting OR $Eval/PSS = MFM.StatEnum.Waiting OR $Eval/PC1S = MFM.StatEnum.Waiting OR $Eval/PC2S = MFM.StatEnum.Waiting OR $Eval/PDS = MFM.StatEnum.Waiting) then 'Waiting on someone else' else 'In Progress'
I tried to do it with splits, but it got unwieldy. I would greatly appreciate any guidance you could provide on how to make it work and/or make it work more efficiently.
You should replace the uppercase AND and OR with the lowercase version to get this:
if ( $Eval/PRS = MFM.StatEnum.Not_Started and $Eval/PSS = MFM.StatEnum.Not_Started and $Eval/PC1S = MFM.StatEnum.Not_Started and $Eval/PC2S = MFM.StatEnum.Not_Started and $Eval/PDS = MFM.StatEnum.Not_Started) then MFM.StatEnum.Not_Started else if ( $Eval/PDS = MFM.StatEnum.Completed ) then MFM.StatEnum.Completed else if ( $Eval/PRS = MFM.StatEnum.Deferred or $Eval/PSS = MFM.StatEnum.Deferred or $Eval/PC1S = MFM.StatEnum.Deferred or $Eval/PC2S = MFM.StatEnum.Deferred or $Eval/PDS = MFM.StatEnum.Deferred) then MFM.StatEnum.Deferred else if ( $Eval/PRS = MFM.StatEnum.Waiting or $Eval/PSS = MFM.StatEnum.Waiting or $Eval/PC1S = MFM.StatEnum.Waiting or $Eval/PC2S = MFM.StatEnum.Waiting or $Eval/PDS = MFM.StatEnum.Waiting) then MFM.StatEnum.Waiting else MFM.StatEnum.In_Progress
This will remove the errors and work for you.
Be aware that the result of an exclusive split should be a boolean or an enumeration, that's why I changed the parts after the then as I tested this in a split. When using this in a change object activity the string option can be used.
I would however suggest to use a split for this and multiple change object activities for better readability.