2017-04-11 11 views
0

オーダーフォームにカスタムワークフローがあり、オーダーのフォローシップを削除する必要がありました。カスタムワークフローは、オンデマンドで実行するように設定してもうまく動作しますが、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) 
+0

質問の投票方法を説明せずに投票することは役に立ちません。 –

答えて

0

、それはのセキュリティコンテキストで実行されますそれを実行したユーザー。バックグラウンドで実行されると、ワークフローの所有者のセキュリティコンテキストで実行されます。あなたはワークフローを所有していますか?そうでない場合は、自分自身に割り当てて、それがバックグラウンドのワークフローとして機能するかどうかを確認してください。

+0

はい、私はワークフローの所有者です –

0

は交換してみてください:

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

で:

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

我々は(エンティティ参照は、IDを持つことができないとキーが空の属性)も、このエラーを取得しました。サンドボックス分離モードでカスタムワークフローアセンブリを登録したことがプラグイン登録ツールで解決されました。

関連する問題