Microsoft Dynamics CRM 2011 Workflow Based Approval Process implementation – Part 2
In the previous post I have described a common business problem – the approval process. In this post, I will suggest a possible solution, while the next post will demonstrate an actual implementation.
If you have an idea for additional solution or suggestion on how to improve the following solution, feel free to comment.
As the approval process is required in various business processes (Sales, Services, etc.), the approval data must be generic in order to fit into any business scenario with minimum or no changes in the existing data entities. Another requirement dictates that each business entity may go through the Approval process more than once. E.g: Once a Sales manager disqualified a Quote, the current approval process ends. When the Sales persons edits the Quote, he initiate a second approval process for the same Quote record.
The ideal solution for these constraints is to create a designated data entity which can be related to any other business entity such as Quote, Case or any custom entity. This solution will allow relating more than one Approval record to each business record and also requires no change in the logical structure of the business entity. Additionally, It will allow a better management of privileges for the approval data, without changing privileges for existing business entities.
The Approval entity will have the following data attributes:
|1.||Subject||Describes the approval subject|
|2.||Decision||Describes approval/disapproval decision|
|3.||Decision Date||Date and time of approval/disapproval decision|
|4.||Disapproval Reason||Reason for disapproval|
|6.||Status||Approval status (Approved/disapproved/pending)|
|7.||Owner||Describes the person currently handling the approval process stage|
The approval process dictates predefined stages, different approving roles, approval timeout and notification capabilities. All these characteristics requires process automation which is based on events.
Being asynchronous in nature, the approval process automation must be asynchronous as well.
Microsoft Dynamics CRM 2011 supplies us with two asynchronous event driven mechanism: Workflow Rule and Plugin component. While both mechanisms are basically supported by all types of deployments (On-premise/Hosted/Online), there are some limitations:
1. Workflow Custom Activity component is not supported by Online deployments.
2. Although a Plugin component can be registered to operate asynchronously, it can not ‘wait’ for some events such as the passing of 3 days from the approval assignment date.
As the suggested solution must support both On-premise and Online deployments, it will be based on standard Workflow Rules and Code components which will be wrapped by Custom Activity or by Plugin component.
Following is the process algorithm diagram:
In the last post of this series I’ll describe an actual implementation of the suggested solution.