0

エンティティの偽のインスタンスを作成していますbeeppicklistと呼ばれるタイプの必須フィールドがありpickabooます。最初は省略しましたが、新しく作成されたすべてのインスタンスにbeepそのフィールドを割り当てるように要求するビジネスロジックが原因で、アプリケーションがエラーメッセージをスローすることを嘆き始めました。

Entity entity = new Entity { LogicalName = "beep" };
Guid guid = proxy.Create(entity);
proxy.Delete("beep", guid);

インスタンスを作成した直後に削除するため、その要求について齧歯動物の尾のセクションは示しません。しかし、CRMは巨大な齧歯動物を与え、私の魔法をさせてくれません。それで、私は賢くなり、不足している属性の属性を追加しました。

OptionSetValue option = new OptionSetValue(0);
Entity entity = new Entity { LogicalName = "beep" };
entity.Attributes.Add("pickaboo", option);
Guid guid = proxy.Create(entity);
proxy.Delete("beep", guid);

もちろん、ゼロは有効な値ではないため、機能しませんでした。どうやら、CRMはソリューションに基づいてハッシュ番号を追加するため、実際の「ゼロ」は「846000000000」、実際の「1」は「846000000001」などの数値になります。

プログラムでその値を取得するにはどうすればよいですか?

現在、すべてのbeepsを取得し、最初のsから値を取得するという醜い回避策があります。それがどれほど恥ずかしいように見えるかを知って、私がどれだけの睡眠を失っているのかについて私を始めさせないでください、誰かが私にいくつかのフィードバックを与えるのに時間がかかるでしょうか。:(

4

3 に答える 3

3

2 つのオプションがあります。

  1. CrmSrvcUtil を使用して OptionSetValues を列挙型として生成できます...これにより、コードで参照できる pickaboo 列挙型が作成されます entity.Attributes.Add("pickaboo", new OptionSetValue((int)pickaboo.YourEnumValue);

  2. メッセージを使用して、RetrieveOptionSetRequest関心のある特定のオプション セットのすべての値のリストを取得することもできます。この SO の質問を参照してください。

于 2012-11-09T16:03:46.967 に答える
1

この質問は私にブログを書くように促しました。

以下の私の投稿を見ると、選択リスト(グローバルおよびローカルオプションセット)、状態コード、ステータスコード、およびブール(2つのオプション)フィールドのint値を見つけるために使用できる関数があります。

CRM 2011は、選択リスト、オプションセット、状態コード、ステータスコード、およびブール値(2つのオプション)の値をプログラムで検索します

于 2012-11-10T22:27:21.583 に答える
1

すべてのCRM プログラマーが怠惰な豚であることを知っているので(自分の経験です、笑)、短くて包括的なソリューションを好むことはわかっています。単一の有効な値への迅速なアクセスを探していることは承知しています。私が間違っている場合は、読むのをやめてください-@Darylの提案を使用してください-彼はあなたに良い答えを持っています.

ただし、私が正しければ、このコードを使用して最初の有効なオプション値を取得します (存在する場合)。念のtry/catchため、スペルを間違えた場合などに頭を悩まないように、で囲むことを忘れないでください。

RetrieveAttributeRequest request = new RetrieveAttributeRequest
{
  EntityLogicalName = "beep",
  LogicalName = "pickaboo",
  RetrieveAsIfPublished = true
};
RetrieveAttributeResponse response 
  = proxy.Execute(request) as RetrieveAttributeResponse;
PicklistAttributeMetadata metaData 
  = response.AttributeMetadata as PicklistAttributeMetadata;
OptionSetValue option 
  = new OptionSetValue(metaData.OptionSet.Options[0].Value ?? -1);
  1. 注意 - と呼ばれるプロキシ経由で接続が機能していると仮定していますproxy
  2. try/catch範囲外の例外が発生した場合に備えて、コード全体にa を設定します。
  3. 返される は null 許容整数である-1ため、 のオプションを必ず処理してください。Value
于 2012-11-10T19:37:50.933 に答える