簡體   English   中英

自定義工作流未在Dynamics CRM 2016中運行

[英]Custom workflow is not running in Dynamics CRM 2016

我在訂單表單上有一個自定義工作流程,如果用戶不再關注該訂單,則需要刪除該訂單的后續工作。 當我將自定義工作流設置為按需運行時,它可以正常運行,但是當我取消選中Dynamics CRM 2016中的按需選項時,則無法使用。

以下是我的代碼段以及通過跟蹤服務收到的詳細信息。 有人可以指導嗎?

代碼段

Guid orderId = this.inputEntity.Get(caContext).Id;

var fetchXml = "<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'>" +
               "  <entity name='postfollow'>" +
               "    <attribute name='regardingobjectid' />" +
               "    <attribute name='ownerid' />" +
               "    <filter type='and'>" +
               "      <condition attribute='regardingobjectid' operator='eq' uitype='salesorder' value='"+ orderId + "' />" +
               "    </filter>" +
               "  </entity>" +
               "</fetch>";
var followQuery = new FetchExpression(fetchXml);
EntityCollection followCollection = service.RetrieveMultiple(followQuery);
temp = followCollection.Entities.Count;
if (temp < 1)
{
    return;
}
ownerIds = new string[temp];
foreach (Entity follow in followCollection.Entities)
{
    ownerIds[i] = (((EntityReference)follow.Attributes["ownerid"]).Id).ToString();
    i++;
}

List<string> allUsersList = allUsers(service, orderId);
string[] allusersArray = allUsersList.Distinct().ToArray();
do
{
    if (allusersArray.Contains(ownerIds[j].ToLower()))
    {

    }
    else
    {
        removeFollowShip(caContext, service, new Guid(ownerIds[j]), orderId);
    }
    j++;
} while (j < ownerIds.Length - 1);

跟蹤服務詳細信息

插件跟蹤:

[Microsoft.Xrm.Sdk.Workflow: Microsoft.Xrm.Sdk.Workflow.Activities.RetrieveEntity]
[RetrieveEntity]

Error Message:

Unhandled Exception: System.ServiceModel.FaultException`1[[Microsoft.Xrm.Sdk.OrganizationServiceFault, Microsoft.Xrm.Sdk, Version=8.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]]: Entity Reference cannot have Id and Key Attributes empty.Detail: 
<OrganizationServiceFault xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/xrm/2011/Contracts">
  <ErrorCode>-2147220989</ErrorCode>
  <ErrorDetails xmlns:d2p1="http://schemas.datacontract.org/2004/07/System.Collections.Generic" />
  <Message>Entity Reference cannot have Id and Key Attributes empty.</Message>
  <Timestamp>2017-04-11T16:17:32.745259Z</Timestamp>
  <InnerFault>
    <ErrorCode>-2147220970</ErrorCode>
    <ErrorDetails xmlns:d3p1="http://schemas.datacontract.org/2004/07/System.Collections.Generic" />
    <Message>System.ArgumentException: Entity Reference cannot have Id and Key Attributes empty.</Message>
    <Timestamp>2017-04-11T16:17:32.745259Z</Timestamp>
    <InnerFault i:nil="true" />
    <TraceText i:nil="true" />
  </InnerFault>
  <TraceText>[Microsoft.Xrm.Sdk.Workflow: Microsoft.Xrm.Sdk.Workflow.Activities.RetrieveEntity]
[RetrieveEntity]
</TraceText>
</OrganizationServiceFault>
   at Microsoft.Crm.Extensibility.OrganizationSdkServiceInternal.Retrieve(EntityReference entityReference, ColumnSet columnSet, CorrelationToken correlationToken, CallerOriginToken callerOriginToken, WebServiceType serviceType, Boolean checkAdminMode)
   at Microsoft.Crm.Extensibility.InprocessServiceProxy.RetrieveCore(String entityName, Guid id, ColumnSet columnSet)
   at Microsoft.Xrm.Sdk.Client.OrganizationServiceProxy.Retrieve(String entityName, Guid id, ColumnSet columnSet)
   at Microsoft.Crm.Workflow.Services.RetrieveActivityService.<>c__DisplayClass1.<RetrieveInternal>b__0(IOrganizationService sdkService)
   at Microsoft.Crm.Workflow.Services.ActivityServiceBase.ExecuteInTransactedContext(ActivityDelegate activityDelegate)
   at Microsoft.Crm.Workflow.Services.RetrieveActivityService.ExecuteInternal(ActivityContext executionContext, RetrieveEntity retrieveEntity)
   at Microsoft.Crm.Workflow.Services.RetrieveActivityService.Execute(ActivityContext executionContext, RetrieveEntity retrieveEntity)
   at System.Activities.CodeActivity.InternalExecute(ActivityInstance instance, ActivityExecutor executor, BookmarkManager bookmarkManager)
   at System.Activities.Runtime.ActivityExecutor.ExecuteActivityWorkItem.ExecuteBody(ActivityExecutor executor, BookmarkManager bookmarkManager, Location resultLocation)

當工作流按需運行時,它將在運行它的用戶的安全上下文下運行。 當它在后台運行時,它將在工作流所有者的安全上下文中運行。 您是否擁有工作流程? 如果不是,請嘗試將其分配給您自己,然后查看它是否可以用作后台工作流程。

嘗試更換:

(((EntityReference)follow.Attributes["ownerid"]).Id).ToString();

有:

follow.Attributes.Contains("ownerid") ? (follow.GetAttributeValue<EntityReference>("ownerid").Id).ToString() : "";

我們也遇到了這個錯誤(實體引用不能將Id和Key屬性留空)。 我發現在沙盒隔離模式下注冊自定義工作流程程序集可以解決該問題(在插件注冊工具中)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM