1

什么可能导致插件从单个事件执行 4 次?
该插件已在 Case 检索时注册,并为单个 Retrieve 触发 4 次。

        protected void ExecutePostCaseRetrieve(LocalPluginContext localContext)
        {
        if (localContext == null)
        {
            throw new ArgumentNullException("localContext");
        }
        
        // TODO: Implement your custom Plug-in business logic.
        IOrganizationService service = localContext.OrganizationService;
        QueryByAttribute query = new QueryByAttribute("resource");
        query.Attributes.AddRange("name");
        query.Values.AddRange("Employee");
        EntityCollection result = service.RetrieveMultiple(query);
        Guid employee = result.Entities[0].Id;
        QueryScheduleRequest scheduleRequest = new QueryScheduleRequest
        {
            ResourceId = employee,
            Start = DateTime.Now.ToLocalTime(),
            End = DateTime.Now.ToLocalTime().AddMonths(1),
            TimeCodes = new TimeCode[] { TimeCode.Available }
        };
        QueryScheduleResponse schedule = (QueryScheduleResponse)service.Execute(scheduleRequest);
        DateTime today = DateTime.Now.ToLocalTime();
        if (today.Date.Equals(schedule.TimeInfos[0].Start.Value.Date)) // today is a working day
        {
            service.Create(new Lead { FirstName = today.Hour.ToString() });
        }
        else // just escalate from beginning of next working day
            service.Create(new Lead { FirstName = schedule.TimeInfos[0].Start.Value.ToLocalTime().ToString(), LastName=schedule.TimeInfos[0].End.Value.ToLocalTime().ToString() });

在此处输入图像描述

我尝试过同步和异步,同样的事情发生了。

4

2 回答 2

1

除了应该归咎于一个错误(我怀疑不是这种情况)之外,四次触发插件的唯一合理方法是你可以从它本身调用它。这个答案的问题在于,这样的设置通常会导致永远的递归和屏幕上的噗噗声。

推测原因,我意识到您的问题中有四个recall,CRUD有四个基本操作。这可能是依赖吗?

编辑:

正如我的 MVP 经常说的那样。在这种情况下,请先找出它发生的位置,然后再尝试解释发生的原因。在某些情况下,他是对的。

所以,这就是我在这种情况下要做的。

以下列表中的术语 *magic* 将表示这组操作:删除CaseLead的所有实例,创建一个Case并查看Lead的实例有多少。

  1. 删除所有插件。施展魔法
  2. 在Create for Case上注册一个“空”插件。施展魔法
  3. 将潜在客户的创建添加到插件 ( Service.Create(new Entity("case")); )。施展魔法
  4. 将现有代码中的内容复制/粘贴到新代码中。施展魔法

您也可以尝试全新安装,以确保没有其他软件发生冲突。有 30 天的免费试用期。在任何给定时间,我都有大约 10 种不同的试验。:)

于 2013-03-20T17:18:37.530 回答
0

我知道这篇文章已经有一年了,但我遇到了另一个插件触发我的第一个插件的同样问题。crm 服务实际上有一个 depth 属性,您可以使用它来确定在此之前触发了多少操作。

在要执行的代码之前放置这样的东西可以解决这个问题。

if (context.depth > 1 ){
return;
}
于 2014-11-10T18:15:47.090 回答