4

Opportunityとカスタムエンティティの間に(多対多の)関係を作成しました。CRMは、「交差テーブル」と呼ばれる組み込みテーブルとの関係を自動的に解除します。

プラグイン登録ツールで、この特定のテーブルに作成/更新/削除メッセージを追加したいと思います。しかし、問題はそれがそこに存在しないことです-多対多のシステム関係でさえそこに存在しません。

登録ツールに表示されるように、手動で関係を解除するようにアドバイスされる場合があります。しかし、この組み込みテーブルにアクセスするための解決策はありますか?

4

1 に答える 1

6

残念ながら、答えはノーになります。多対多のテーブル/関係に関するCRMのパラダイムは、それらが要求に対して使用可能Associationであるが、、、または要求に対しては使用できないということです。(実際、交差テーブルには実際の値はありません。新しい関連付けは、作成(=> )または解消(=> )のいずれかでのみ行われます。)DisassociationCreateUpdateDeleteUpdateCreateAssociateDeleteDisassociate

交差エンティティのを調べることでこれを確認できAttributeMetadataます。エンティティ内のすべての属性にフィールドがValidForUpdateAPIありValidForCreateAPI、falseに設定されていることがわかります。これは、更新と作成の呼び出しに有効な属性が混在している通常のエンティティとは異なります。

あなたの問題を解決するために、あなたの選択肢は限られています:

1)Associationメッセージに対してステップを登録します。残念ながら、このメッセージは特定のエンティティにフィルタリングできないため、このプラグインを介してCRMで行われたすべての関連付けリクエストをフィルタリングする必要があります。IPluginExecutionContextは、プロパティバッグに「Relationship」というプロパティがあり、InputParametersコードを開発する関係を除外するために使用できます。

Relationship entityRelationship = 
    (Relationship)context.InputParameters["Relationship"];
if (entityRelationship.SchemaName = customIntersectTable.EntityLogicalName)
{
    EntityReference targetEntity =
        (EntityReference)context.InputParameters["Target"];
     EntityReferenceCollection relatedEntities = 
        (EntityReferenceCollection)context.InputParameters["RelatedEntities"];
    //do stuff
}

2)カスタムエンティティと1対多の関係を持つカスタム交差エンティティを作成します(機会と製品をリンクするOpportunityのようなものに似ています)。OpporunityProductここでの欠点は、この種のGUIは、単純な交差エンティティの場合ほど優れていないことです。

Gonzalo Ruizは、MSDNにもこのトピックに関するブログを持っています。彼はほとんど同じことを言っています。

于 2012-08-29T15:43:54.267 に答える