2012-02-09 3 views
2

CRM 2011の操作前の更新プラグインで関連するレコードを更新しようとしています。単純なクエリは、2つのパラメータに基づいて関連するエンティティのセットを取得し、結果のクエリからの各エンティティは、関連するエンティティセットにルックアップされます。ただし、発生時にInvalidCastExceptionを示唆する例外がスローされます。コードを踏んでいくうちに、それぞれの値が正しいと思われ、期待どおりのGuidesが表示されます。他のプラグインを無効にしていますが、ターゲットや関連するエンティティが関わっている可能性があります。 targetEntityとrelatedEntityの関係は1:Nです。私は、この問題は、ステップインしながらGuidではなくEntityReferenceを期待しているためではないことを確認しました。CRM 2011操作前の更新関連のエンティティの参照フィールド

プラグインのコードでは、私はより多くの明白なプロキシ(それは、開発者ツールキットのプラグインクラスファイルを使用しています)のために、実際のエンティティ/属性名を置換している場合は、以下の通りです: - 任意の助けをいただければ幸いです

Entity targetEntity = (Entity)localContext.PluginExecutionContext.InputParameters["Target"]; 

     QueryExpression query = new QueryExpression 
     { 
      EntityName = "relatedEntity", 
      Criteria = 
      { 
       Conditions = 
       { 
        new ConditionExpression("testOptionSetAttribute", ConditionOperator.Equal, 100000004), 
        new ConditionExpression("parentEntityId", ConditionOperator.Null) 
       } 
      } 
     }; 

     EntityCollection resultsCollection = localContext.OrganizationService.RetrieveMultiple(query); 

     foreach (Entity result in resultsCollection.Entities) 
     { 
      result.Attributes["parentEntityId"] = targetEntity.Id; 
      localContext.OrganizationService.Update(result); 
     } 

ありがとうございました。

+1

をtargetEntity'が本当にある '場合は1:N' relatedEntity'、その後、 'result.Attributes [ "parentEntityId"]との関係' '間違いなくEntityReference'にする必要があり、 'Guid'だけではありません。 –

答えて

2

私はPeterに同意します。

EntityReferenceである必要があります。また、new EntityReferenceである必要があります。

これを試してみてください:

result.Attributes["parentEntityId"] = new EntityReference(targetEntity.EntityLogicalName, targetEntity.Id); 
+0

おかげでPeter/Grigory。これは正しかったですし、実際には元々プラグインに含まれていたものです。私は根本的な問題は、私がディスク上のプラグインのデバッグを開始したときに元々来るかもしれないと思います。 CrmPackageデプロイユーティリティを使用すると、ファイルがディスク上で確実に更新されないことがわかりました。そのため、デプロイメントが悪いためにコードが変更されました。 –