Friday 15 December 2017

Finally a Trailhead Ranger Rank







Wednesday 1 February 2017

Reading thru the process builder error report

"This article is intended for the newbies in process builder troubleshooting"
In continuation to my previous post "Ways to identify your failed flow/process builder", this post will help beginners to identify the ways to understand the flow error report or even its debug logs.

I am referring to a sample process builder email report down below to read thru. I have added my comments to help you understand the jargon used in the report. Please /**Read between these asterisk-tags**/

Please note that this report lists the elements that the flow interview executed. This flow report is a beta feature.
So here goes the sample one with my comments and steps enumeration added:
An error occurred at element myRule_1_A1 (FlowRecordCreate). /**Type of process action performed on 1st action of the 1st criteria node**/ INSERT --- INSERT FAILED --- ERRORS : (REQUIRED_FIELD_MISSING) Required fields are missing: [CloseDate] This report lists the elements that the flow interview executed. This flow report is a beta feature. 1. Flow Details Flow Name: Test_Process_Builder_Name Type: Workflow Version: 19 Status: Active 2. Flow Interview Details Interview Label: Test_Process_Builder_Name-19_Test_Order__c /**Name of the flow/process builder-version number_ObjectName**/ Current User: Sudhir Kumar (005C000000A0pDv) /**Current User Name (UserId)**/ Start time: 1/25/2017 5:38 AM Duration: 0 seconds 3. How the Interview Started Sudhir Kumar (005C000000A0pDv) started the flow interview. Some of this flow's variables were set when the interview started. myVariable_old = a0w3B000000MylcQAC /**“myVariable_old” contains all of the field values of the record immediately before it was changed. If “myVariable_old” has no values (null), the process is evaluating a newly created record. **/ myVariable_current = a0w3B000000MylcQAC /**“myVariable_current” contains all of the record’s current field values.**/ 3.1. ASSIGNMENT: myVariable_waitStartTimeAssignment {!myVariable_waitStartTimeVariable} Equals {!Flow.CurrentDateTime} /**The time when the process/flow starts**/ Result {!myVariable_waitStartTimeVariable} = "1/25/2017 5:38 AM" 3.2. DECISION: myDecision /**decision node starts**/ Executed this outcome: myRule_1 /** The number in “myRule_1” indicates that the process is executing the group of actions that are associated with the first criteria in the process. **/ Outcome conditions: and 1. {!formula_myRule_1} (true) Equals true /**1st Formula of the process related to the 1st criteria node**/ Logic: All conditions must be true (AND) 3.3. RECORD CREATE: /**type of action**/ myRule_1_A1 /**The number A1 in “myRule_1_A1” indicates that the process is executing the 1st scheduled action that is associated with the first criteria “myRule_1” in the process. “A1” indicates that this corresponds to the first action in the action group.**/ Create one Opportunity record where: Location_Address__c = {!myVariable_current.Loc_Address__c} (null) /** myVariable_current.field Here, field is the name of the field that’s referenced. myVariable_current refers to the field values that the record had when it started the process. Similarly, if there is any update, you will also get myVariable_old.field, here, field is the name of the field that’s referenced. myVariable_old refers to the most recent previous values of the record that started the process. **/ Location_City__c = {!myVariable_current.Loc_City__c} (null) /** null values in this field under current context of the record**/ Location__c = {!myVariable_current.Loc_State__c} (null) AccountId = {!myVariable_current.SF_Account__r.Id} (001C000000q7QaWIAU) CloseDate = {!formula_2_myRule_1_A1_CloseDate} (null) /** 2nd formula in the process which is related to 1st action of the 1st criteria node**/ Name = {!formula_3_myRule_1_A1_Name} (Test Account Name) Order_Type__c = New Test_Order__c = {!myVariable_current.Id} (a0w3B000000MylcQAC) RecordTypeId = 0123B000000097f StageName = Customer Review Location_Address__c = {!myVariable_current.Loc_Address__c} (null) Location_City__c = {!myVariable_current.Loc_City__c} (null) Location_ST__c = {!myVariable_current.Loc_State__c} (null) 4. Result /**final result**/ Failed to create record. Error Occurred: INSERT --- INSERT FAILED --- ERRORS : (REQUIRED_FIELD_MISSING) Required fields are missing: [CloseDate] /**Root cause of the error**/


To be continued..

Monday 16 January 2017

Ways to identify your failed flow/process builder


We would have seen this error while trying to save a record in our Salesforce instance. The information provided is very generic and little; it shows just the flow version id. It would have been strange for the people seeing this for the first time. I too had come across such situation and this is an effort to spreading the information out there.
The record couldn’t be saved because it failed to trigger a flow. 
A flow trigger failed to execute the flow with version ID 3013B000000DBl4. 
Flow error messages: 
An unhandled fault has occurred in this flow

An unhandled fault has occurred while processing the flow. 
Please contact your system administrator for more information. 
Contact your administrator for help.


This post aims at outlining a few ways to identify which component is causing this error.
Option #1: Look into your debug log
Keep your developer console opened and try to save your record again. Search for the logs like below. You can get the flow/process builder name under "Error executing flow".
00:49:57.0 (80251134)|WF_FLOW_ACTION_ERROR|09L3B000000ChpG|3003B000000CgBk|
Error executing flow: Create_and_Update_Opportunity_for_Provisioning_Order, 
FlowDefId: 3003B000000CgBk, FlowVersionId: 3013B000000DBl4

00:49:57.0 (80266593)|WF_FLOW_ACTION_ERROR_DETAIL|<b>An unhandled fault has occurred in this flow</b>

An unhandled fault has occurred while processing the flow. 
Please contact your system administrator for more information.

00:49:57.0 (80340575)|WF_FLOW_ACTION_END|09L3B000000ChpG
Option #2: Use Workbench REST explorer to get the details
Go to Workbench --> Utilities --> REST Explorer and use GET with the below path to get the information: (/services/data/v37.0/tooling/sobjects/flow/{flowID})
For example; see the screen shot

Option #3: URL hacking
https://[instance].salesforce.com/designer/designer.apexp#Id=[id]
Replace [id] with the flow ID that is errored out and [instance] with your salesforce instance


Processes and Flows seems to have the same underlying technology, and this option will pull up either one in the Flow editor. This will help you to get the name of the component(flow/process builder). Note to edit Flow in Flow Designer and edit Processes in Process Builder only to avoid any confusion or unintended results. This is how you identify if it is a flow or process: Close the designer page and if you lands on process builder page, go to the process you noted down. If you are on the flow page, click to open the flow again.
Option #4: Search by Id under metadata type in Workbench
Go to Workbench --> info --> Metadata Types & Components --< Choose "Flow" from the picklist --> click Expand All --> CTRL+F to find the Flow name and details by its Id.

You can find both flows and processes using Workbench:
Info --> Metadata Types & Components --> Flow for Flows 

Info --> Metadata Types & Components --> FlowDefinition for Processes