When I'm trying to execute a Test class I'm getting an System.DmlException: Insert failed. First exception on row 0; first error: CANNOT_EXECUTE_FLOW_TRIGGER, The record couldn’t be saved because it failed to trigger a flow.Looking at this error message I can say it is related to Flows or Process Builder but the thing is that how we need to identify in which flow it causing an error.In this post now I'm going to explain how to produce this issue and what is work around solution for this issue.
How to Produce the Issue
I have created a flow on Opportunity object with the help of Process builder .The main theme of the flow is that it has to execute an action after 6 days of Opportunity Stage Name as Closed Won along with 2 more conditions.
Flow Criteria
1. Opportunity StageName equal "Closed Won" AND
2. Opportunity Amount is Greater than $25,000.00 AND
3. Opportunity related Account filed Sid_Desc__c(field in Account) is equals "Test"
Process Builder Flow is successfully created and activated.Please find the below image for clear picture
Now I'm going to write a sample test class to create a new opportunity
How to Produce the Issue
I have created a flow on Opportunity object with the help of Process builder .The main theme of the flow is that it has to execute an action after 6 days of Opportunity Stage Name as Closed Won along with 2 more conditions.
Flow Criteria
1. Opportunity StageName equal "Closed Won" AND
2. Opportunity Amount is Greater than $25,000.00 AND
3. Opportunity related Account filed Sid_Desc__c(field in Account) is equals "Test"
Process Builder Flow is successfully created and activated.Please find the below image for clear picture
@isTest
public class TestOppInsertFlow
{
static testMethod void insertOpp()
{
Opportunity op = new Opportunity();
op.Name = 'TestOpp';
op.StageName = 'Closed Won';
op.Closedate = System.today()+1;
insert op;
}
}
When I am executing the above test class it will fail by displaying an error System.DmlException: Insert failed. First exception on row 0; first error: CANNOT_EXECUTE_FLOW_TRIGGER, The record couldn’t be saved because it failed to trigger a flow.If you check in the debug logs you can clearly observe a flow error like The flow failed to access the value for myVariable_current.Account.
Root Cause:
In flow we are referring the opportunity related Account filed value Sid_Desc__c but in our test class we are not passing any account value for the opportunity so it referring the Sid_Desc__c value in null account value.
Work Around Solution
1. By adding a null check for relation Ship fields in Process Builder(in our case AccountId)
2. To pass the AccoutId value to the opportunity record in test class.See modified class below
@isTest
public class TestOppInsertFlow
{
static testMethod void insertOpp()
{
Account acc = new Account();
acc.Name = 'tesst';
insert acc;
Opportunity op = new Opportunity();
op.Name = 'TestOpp';
op.StageName = 'Closed-Won';
op.Closedate = System.today()+1;
op.Accountid = acc.id;
insert op;
}
}
Note:
Whenever you encountered with this type of error you will be receiving an email from salesforce
Enjoy....... Thanks for Visiting. Please follow us at FaceBook and twitter for more updates.
Good explanation Sreenivas, ThanqU
ReplyDeleteWelcome:)
Delete