Scenario Overview
Note : This Article is for pre version 9 of CRM , since then Microsoft has given the Process Stages its own Entity.
In this scenario we had a business requirement to ensure that at least 1 Decision Maker stakeholder has been assigned to an Opportunity before allowing the Opportunity to the Develop step.
North52 Decision Suite Solution
The North52 Decision Suite solution works like this,
- A formula of type Validation is created
- It is configured so that it executes each time the Process Stage field changes on the Opportunity entity
- On execution it runs a FetchXML query that checks the Process Stage is Develop
- It then uses another FetchXML query that checks if there is a Stakeholder with a role of Decision Maker connected to the Opportunity
- If any approved Stakeholders are found it allows the Opportunity Stage to progress to the Develop stage
- Otherwise it displays an error message to the user
Sample Error Message
North 52 Formula
North52 Decision Suite Steps
The following set of steps outline how to create this Formula
- Create a new formula of type Validation, mode Server Side, event: Create & Update
- Set the Source Entity to Opportunity
- Set the Source Property to Process Stage
- Copy and paste the formula below into the N52 Formula
- Create the 2 FetchXML queries and copy in the code into them
- Click Save
- You are now ready to test
Formula
Iftrue (FindValueFD( 'GetCurrentStageName', 'stagename', '?',true)= 'develop' and
FindCountFD('CountConnections',
'connectionid',
'0',
true,
SetParams(FindValue('connectionrole',
'name',
'Decision Maker',
'connectionroleid',
'?',
true) ) ) = 0,
'You cannot go to the develop stage without at least 1 decision maker stakeholder!'
)
FetchXML : GetCurrentStageName
<fetch count="50" >
<entity name="processstage" >
<attribute name="stagename" />
<filter type="and" >
<condition attribute="processid" operator="eq" value="@processid@" />
<condition attribute="processstageid" operator="eq" value="@stageid@" />
</filter>
</entity>
</fetch>
FetchXML:CountConnections
<fetch count="50" >
<entity name="connection" >
<attribute name="connectionid" />
<filter type="and" >
<condition attribute="record1id" operator="eq" value="@opportunityid@" />
<condition attribute="record2roleid" operator="eq" value="{0}" />
</filter>
</entity>
</fetch>
Wizard - FindValueFD
Please see below the wizard you can use to create the FindValueFD() function call used in this formula.
Note you will need to create the Fetch Xml GetCurrentStage beforehand.