咱們都知道,默認狀況下Dynamics 365執行的插件有2分鐘的限制,若達到2分鐘尚未執行完畢,會觸發異常,相似以下:html
System.TimeoutException: Couldn’t complete execution of the custom activity *** plug-in within the 2-minute time limit.app
那我改到工做流行不行?若是改到自定義工做流活動,一樣也有相似的限制,一個自定義工做流活動的執行時間不能超過2分鐘,若超過了,會觸發異常,和插件的異常是同樣的。異步
若是碰到這種狀況怎麼辦?fetch
如果工做流中有多個循環的話,考慮將這個循環拆出來,每一個循環的邏輯用一個異步工做流來作,這個異步工做流設置爲僅僅支持手工觸發,記得,必定要設置成支持手工觸發。spa
而後這個循環體裏面的就用調用工做流來代替,相似以下的代碼,這樣在不少狀況下就能夠繞過這個2分鐘的限制。插件
var fetchXml = @"<fetch version='1.0' mapping='logical' distinct='false' no-lock='true'> <entity name='workflow'> <attribute name='workflowid' /> <filter type='and'> <condition attribute='type' operator='eq' value='1' /> <condition attribute='category' operator='eq' value='0' /> <condition attribute='name' operator='eq' value='{your workflow name}' /> <condition attribute='statecode' operator='eq' value='1' /> </filter> </entity> </fetch>"; var workflowEntities = orgSvc.RetrieveMultiple(new FetchExpression(fetchXml)); if (workflowEntities.Entities.Count == 0) { tracingService.Trace("Workflow does not exist or activated."); return; } foreach (var item in scEntities.Entities) { ExecuteWorkflowRequest req = new ExecuteWorkflowRequest() { EntityId = item.Id, WorkflowId = workflowEntities.Entities[0].Id }; orgSvc.Execute(req); }
本文來自:https://www.cnblogs.com/luoyong0201/p/Dynamics_365_plugin_2_minutes_solution.htmlcode