zoukankan      html  css  js  c++  java
  • 创建一个dynamics 365 CRM online plugin (九)

    让我们来看看官方文档是怎么讲的 https://docs.microsoft.com/en-us/previous-versions/dynamicscrm-2016/developers-guide/gg326836(v=crm.8)

    Every time a running plug-in or Workflow issues a message request to the Web services that triggers another plug-in 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 maximum depth (8) and time limit (one hour) are configurable by the Microsoft Dynamics 365 administrator using the PowerShell command Set-CrmSetting. The setting is WorkflowSettings.MaxDepth. For more information, see, “Administer the deployment using Windows PowerShell” in the Deploying and administering Microsoft Dynamics CRM.

     每当一个plugin或者workflow触发了一个请求到web service 并且触发了另一个plugin 和workflow去执行, Depth这个property会增长.如果在规定的时间内增长到最大值,CRM平台会认为这是一个infinit loop, 并且未来的plugin 和 worklow执行将会失败.

    depth的最大值为8, 最大时间为1小时.

    让我们创建一个ContextDepth.cs 的class

    然后把以下的代码复制进去

    // The InputParameters collection contains all the data passed in the message request.  
                if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity)
                {
                    // Obtain the target entity from the input parameters.  
                    Entity account = (Entity)context.InputParameters["Target"];
    
    
                    try
                    {
                        tracingService.Trace(context.Depth.ToString());
    
                        if (context.Depth > 1)
                        {
                            return;
                        }
    
                        // In case the user removes the value 
                        if (account.Attributes["revenue"] != null)
                        {
                            var revenue = ((Money)account.Attributes["revenue"]).Value;
                            revenue += 100;
    
                            account.Attributes["revenue"] = new Money(revenue);
                        }
                    }
    
                    catch (FaultException<OrganizationServiceFault> ex)
                    {
                        throw new InvalidPluginExecutionException("An error occurred in MyPlug-in.", ex);
                    }
    
                    catch (Exception ex)
                    {
                        tracingService.Trace("MyPlugin: {0}", ex.ToString());
                        throw;
                    }
                }

    让我们使用plugin registeration tool 把这个assembly register到crm中.

    创建一个dynamics 365 CRM online plugin (九) - Context.Depth

    让我们改动 annual revenue的值

    创建一个dynamics 365 CRM online plugin (九) - Context.Depth

     保存之后,我们发现annual revenue的值已经被更改

    创建一个dynamics 365 CRM online plugin (九) - Context.Depth

  • 相关阅读:
    linux 网络编程比较好的文章
    linux 命令
    感冒了
    aa
    111
    仿京东(我的商城)鼠标上去弹出层效果
    仿汽车之家搜索页价格签区间(鼠标拖拽同时tip提示)
    关于DW 打不开后缀名为.ftl的文件 配置方法
    客户端与服务器段的交互 通过json
    jquery 阻止事件冒泡
  • 原文地址:https://www.cnblogs.com/TheMiao/p/10766112.html
Copyright © 2011-2022 走看看