2

Account エンティティには、カスタム エンティティである「BookingAccount」と 1:N の関係があります。関係の名前は new_Account_new_BookingAccount です。プラグインで、コレクションを反復しようとすると

foreach (new_BookingAccount ba in myAccount.new_Account_newBookingAccount)
{
    ...
}

null です - 関連する BookingAccounts がある場合でも。

BookingAccounts を再クエリする必要がありますか、それともコレクション プロパティで「populate」メソッドを呼び出すことができますか? もしそうなら、これを行う最善の方法は何ですか?そして、反復できない場合、コレクション プロパティのポイントは何でしょうか。

事前に助けてくれてありがとう。

4

2 に答える 2

1

コードは機能するはずです。早期にバインドされたエンティティクラスを使用してクライアントを作成する場合、そのようなコレクションが汎用のGetRelatedEntityメソッドを利用していることがわかります。コードは次のようになります。

        /// <summary>
        /// 1:N account_activity_parties
        /// </summary>
        [Microsoft.Xrm.Sdk.RelationshipSchemaNameAttribute("account_activity_parties")]
        public System.Collections.Generic.IEnumerable<MyCrmNamespace.ActivityParty> account_activity_parties
        {
            get
            {
                return this.GetRelatedEntities<MyCrmNamespace.ActivityParty>("account_activity_parties", null);
            }
            ...
        }

このコードは、すべての場合に正しく機能するはずです。もちろん、いくつかのセキュリティ問題が発生する可能性があります。コードはいくつかのCRMユーザー資格情報の下で実行され、ユーザーが両方のエンティティを参照するのに十分な権限を持っていることを確認する必要があります。
ただし、注意が必要な最も重要なことは、インスタンスをどのように取得するかですmyAccount。このコードはプラグイン内で使用されるとおっしゃいましたが、プラグインの種類(プレステージ、ポストステージ)、このプラグインでどのようなメッセージを処理するか、どのように処理するかについては触れませんでした。エンティティのインスタンスを取得しますmyAccount。直接retrieveメソッドを呼び出す場合は、すべてのプロパティにデータを入力する必要があります。しかし、myAccount入力パラメータから取得されるため、すべてのプロパティにすべての実際の値が設定される保証はありません。コレクションが空である理由かもしれません。

于 2012-04-17T11:45:15.267 に答える
1

ああ - コレクションを明示的にロードする必要があります:

orgContext.LoadProperty(account, "new_BookingAccount_new_ExternalCode");
foreach (new_BookingAccount ba in myAccount.new_Account_new_BookingAccount)
{
    ...
}

(アカウントが新しいエンティティの場合、これは実行できないため、事前に何らかのチェックが必要です):

if (account.CreatedOn == null)
    return;

単純なコレクションの反復には多くの作業が必要なようです

于 2012-04-19T02:06:10.297 に答える