gpt4 book ai didi

javascript - 为什么我的 PostUpdateOrder 插件执行两次 CRM 2013

转载 作者:行者123 更新时间:2023-12-03 04:50:01 25 4
gpt4 key购买 nike

用户验证订单后,订单的状态被设置为已验证,并将其发送到另一个系统 X,问题是该插件在某些情况下被触发两次甚至两次以上,从而导致发送此实体多次到系统 X。我尝试使用 context.depth 来纠正这个问题,但所有时间都等于 1。

JS方法:

Validate: function () {
Xrm.Page.getAttribute("eoz_validated").setValue(true);
Xrm.Page.data.entity.save();
ABE.Order.HideVisibleField();
Xrm.Page.ui.clearFormNotification('ProductError');
}
}

插件执行方法:

protected void ExecutePostOrderUpdate(LocalPluginContext localContext)
{
if (localContext == null)
{
throw new ArgumentNullException("localContext");
}
if (localContext.PluginExecutionContext.Depth > 1)
{
return;
}
tracingService = localContext.TracingService;
var order = (Entity)localContext.PluginExecutionContext.InputParameters["Target"];

bool isValidated = order.GetAttributeValue<OptionSetValue>("abe_isValidated").Value : false;

if (isValidated )
{
SendToSystemX(localContext.OrganizationService, order.Id);
SendProductsToOwner(localContext.OrganizationService, order.Id);
}

var statecode = order.Contains("statecode") ? order.GetAttributeValue<OptionSetValue>("statecode").Value : -1;
}

最佳答案

如果您的插件注册为在更新“eoz_validated”时触发,并且还更新“eoz_validated”,那么您可以拥有无​​限执行循环。

为了避免这种情况,请在更新上下文实体之前重新实例化它:

var updatedEntity = new Entity { LogicalName = context.LogicalName, Id = context.Id };

这会删除所有本来会更新的属性,例如上下文实体中包含的“eoz_validated”。请注意,在您的代码中,您将上下文实体存储在名为 order 的变量中。

我只是在这里猜测(并且没有 50 声望来提问)。如果您的代码中发生这种情况,那么可能是在 SendToSystemX(IOrganizationService, Guid)SendProductsToOwner(IOrganizationService, Guid) 内。

关于javascript - 为什么我的 PostUpdateOrder 插件执行两次 CRM 2013,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42698186/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com