IExecutionContext.Depth Property:
Today would like to share with all of Dynamics CRM folks about the important Depth property used to prevent plugins going into infinite loop.
This is property name which tracks the Depth property of plugins in ms crm.
Gets the current depth of execution in the call stack and available in the context which is being passed to plugin.
Syntax:
int Depth { get; }
Notes: This property is basically used by the platform for infinite loop prevention. very time a running plug-in or when workflow issues a message request to the web services that triggers another plugin or workflow to execute, the Depth property of the execution context is increased. If the depth property increments to its maximum value within the configured time limit, the platform considers this behavior an infinite loop and further plug-in or Workflow execution is aborted.The max- imum depth (8) and permissible time limit (one hour) are configurable by the Microsoft Dynamics CRM administrator by default. If required, this setting can be changed by a powershell command PowerShell command -- Set-CrmSetting. Depth is the number of times a plugin/custom workflow has been called in one transaction. Depth is often used to stop infinite loops where a plugin updates a value which triggers the plugin to run again. When a plugin/custom workflow triggers another plugin/trigger then the depth property is increm- ented by one.The depth value has a maximum value called WorkflowSettings.MaxDepth. The CRM SDK (Depth)states this is set to maximum depth of 8 within one hour and common method to avoid a recurring plugin is to check if a plugins depth > 1. This would stop the plugins from being run if was triggered from any other plugin. The plugin would only run if triggered from the CRM form only. Alternate solution is to use shared variables which can pass data between plugins registered in different stages in a transaction. Eg.You can use ShareVariables to pass information between plugins registered on different stages but in the same transaction e.g a pre plugin can pass information to a post plugin. Details can be observed better @ use shared variables in plugins
Update: 11/26/2018
Scenario:
Think of situation where the Plugin is registered on Update of an Entity with filtering attributes set to a field in the Entity.
Due to some bad coding logic, the Plugin registered is also updating the same field.
This would call the same plugin once more causing infinite loop.
This is where using Depth becomes significant.
Thank you.
Cheers,
PMDY
This is cool!
LikeLike
whoah this blog is excellent i really like reading your articles. Stay up the good work! You realize, a lot of people are hunting round for this info, you can aid them greatly.
LikeLiked by 1 person
I like the valuable information you supply for your articles. I’ll bookmark your blog and test once more here regularly. I am relatively sure I’ll learn plenty of new stuff right right here! Best of luck for the next!
LikeLike
Very superb information can be found on site. “The only thing you take with you when you’re gone is what you leave behind.” by John Allston.
LikeLike
Thanks a lot!!!
LikeLike
Hey, I think your site might be having browser compatibility issues. When I look at your blog site in Ie, it looks fine but when opening in Internet Explorer, it has some overlapping. I just wanted to give you a quick heads up! Other then that, superb blog!
LikeLike
Thank you for notifying, will try to look into these compatibility issues…
LikeLike