I'm seeing some interesting / unwanted behavior when evaluating a cross object field with 'only when specified' checked. In my case the update of the field on parent object kicks off a process on parent object. The process updates a field on child object, which kicks off a process on child object. The node in child object evaluates the field on parent object (only if specified changes are made) but does not fire. The other nodes in the process, which dont evaluate fields on parent object, but also have it checked, do fire. Full gory details below
Worked ok:
process on object A fires when field is set on object A
--> this process updates a field on child object B
--> this kicks off a process on object B which evaluates field on object b and only executes when specified changes are made to the record
this works if object b is created before field is set on object a
but does not work if object b is created after the field is set on object a
so...I added a node to the process on object B which sets the field on object b if the field is set on object a.
discovered that this does not work unless recursion is enabled as the downstream node will not 'see' the update to the field on object b in the same process. i wanted to avoid that, because i fear process builder and have exponentially more fear for a recursive process.
so i changed the evaluation criteria for the process on object B to evaluate the field on object A instead of the field on object B.
process on object A fires when field on object A is updated
--> process updates field on child object B
--> this kicks off process on object B which evaluates field on object A and only executes when specified changs are made to the record
This works fine if object B is created after field is updated on object A (because its already checked on object A, so node fires on record creation). But if object B already exists, the node in process on object B does not fire when object A is updated, as'when specified changes are made' does not appear to see the field on object A as being changed.
possible new approach i am thinking could work.
process on object A fires
--> process updates field on child object B
--> this kicks off a process on object B that evaluates field on object A OR object B and only executes when specified changes are made to the record
this may just work for both scenarios : object B created before object A.
or maybe i should just enable recursion and go on with my day.
UPDATE
evaluating a parent object field with 'only execute when specified changes are made...' appears to always be false, even when combined with fields on the master object
This fires:
[Account_Request__c].Email__c &&
[Account_Request__c].TRP_Signed__c
This does not fire
[Account_Request__c].Email__c &&
([Account_Request__c].TRP_Signed__c || NOT(ISBLANK([Account_Request__c].Employment_Record__c.Policy_Signature_Date__c )))
This does not fire
[Account_Request__c].Email__c &&
NOT(ISBLANK([Account_Request__c].Employment_Record__c.Policy_Signature_Date__c ))