2017-03-09 78 views
0

在用戶驗證訂單後,訂單的狀態被設置得如此確認,並被髮送到另一個系統X,問題在於插件在某些情況下被觸發兩次超過兩次,並且導致發送該實體的多個時間到系統X.我試圖通過使用context.depth糾正,但所有的時間等於1爲什麼我的PostUpdateOrder插件執行了兩次CRM 2013

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; 
    } 

回答

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)之內。

+0

對不起,在最近的回覆中,我刪除了SendToSystemX(IOrganizationService,Guid)和SendProductsToOwner(IOrganizationService,Guid)。該插件仍然執行兩次。 –

相關問題