2

CRM開発初心者です。カスタム エンティティ「顧客」があります。このエンティティには、TRUE または FALSE の「defaultcustomer」というフィールドがあります。すべての「顧客」に対して「defaultcustomer」を FALSE に設定する必要があるプラグインに取り組んでいます。私は以下のようにしています:

事実:

エンティティ「顧客」自体のプラグインを登録しました。したがって、エンティティ「顧客」が更新されると、プラグインが起動します。

private void MakeAllNonDefault()
{

    try
    {
        QueryExpression query = new QueryExpression("customer");
        query.ColumnSet = new ColumnSet("defaultcustomer");

        EntityCollection retrieved = service.RetrieveMultiple(query);

        foreach (Entity myCustomer in retrieved.Entities)
        {

            myCustomer["defaultcustomer"] = false;
            service.Update(myCustomer);
        }

    }
    catch (Exception ex)
    {
        throw new InvalidPluginExecutionException("An error occurred in MakeAllNonDefault(): " + ex.ToString());
    }
}

エラー: 次の行にエラーがスローされます。

myCustomer["defaultcustomer"] = false;

System.Collections.Generic.KeyNotFoundException: 
The given key was not present in the dictionary. 
4

4 に答える 4

7

エラーは、特定のフィールドがプロパティのコレクションに存在しないことを意味します。CRM では、設定または更新されたプロパティのみが含まれます。

次のようなものを試してください:

foreach (Entity myCustomer in retrieved.Entities)
{
    if (myCustomer.Attributes.ContainsKey("defaultcustomer"))
    {
        myCustomer["defaultcustomer"] = false;
    }
    else
    {
        myCustomer.Attributes.Add("defaultcustomer", false);
    }
    service.Update(myCustomer);
}
于 2012-03-28T07:57:24.260 に答える
1

フィールドが実際に defaultcustomer と呼ばれていることを再確認しましたか?

カスタム エンティティの場合、フィールドは接頭辞 (new_defaultcustomer など) で始まる可能性があります。表示名ではなく、フィールドの名前を使用していることを確認してください。

于 2012-03-29T10:50:48.103 に答える
0

Update all Crm fields が False である間、フィールドを更新するものを受け入れます。そのために、プラグインでプリ/ポスト イメージを使用できます。そのcrmフィールドキーが見つかり、必要なものを更新します。

于 2014-08-04T13:57:17.750 に答える
0

@glosrob によって投稿されたソリューションは問題ないようです。「指定されたキーは辞書に存在しませんでした」というメッセージが表示されますか?

ITracingService を使用して、プラグインの実行フローに関する詳細情報を取得してみてください。

于 2012-03-29T10:36:54.520 に答える