2

プラグインを使用していて、レコードの statuscode 値に基づいてアクションを実行したいと考えています。オプションセットから値を取得するために使用できることをオンラインで見ましたentity.FormattedValues["statuscode"]が、試してみると、「指定されたキーが辞書にありませんでした」というエラーが表示されます。

プラグインが探しているフィールドの変更を見つけることができない場合にこれが発生する可能性があることはわかっていますが、使用してこれが存在することを既に確認しておりentity.Contains("statuscode")、問題なく通過しますが、それでもこのエラーが発生します。

失敗した理由を理解するのを手伝ってくれる人はいますか?

ありがとう

4

4 に答える 4

3

エラーを回避するには、(コレクションではなくAttributes)使用するコレクションを確認する必要があります。

if (entity.FormattedValues.Contains("statuscode")){
    var myStatusCode = entity.FormattedValues["statuscode"];
}

ただし、SDKはこれを確認できませんが、FormattedValues数値属性または通貨属性にのみ存在するのではないかと思います。(私の側の部分的な推測ですが)。

于 2012-09-14T08:22:40.017 に答える
3

私はentity.FormattedValues前に見たことがない。

私は通常entity.Attributes、例えばを使用しentity.Attributes["statuscode"]ます。

MSDN


編集

Crm は、追加情報を保持するオブジェクトの多くの値をラップします。この場合、statuscode は OptionSetValue を使用するため、必要な値を取得するには:

((OptionSetValue)entity.Attributes["statuscode"]).Value

これは Crm の基になる値であるため、数値が返されます。

Crm でカスタマイズ オプションを開くと、通常 (一部のシステム フィールドはロックされています)、各オプションのラベルと値を確認できます。

ここに画像の説明を入力

ラベルが必要な場合は、Crm の情報に基づいてハードコーディングを行うことができます。

または、ここで説明されているように、メタデータ サービスから取得することもできます。

于 2012-09-13T19:05:59.080 に答える
0

entity.FormattedValues は文字列表示値に対してのみ機能します。

たとえば、表示名が 1、2、3 のオプションセットがあるとします。これらの値は整数であるため、上記のステートメントはこれらの値を認識しません。以下のリンクでフォーマットされた値の正確な定義を見た場合

http://msdn.microsoft.com/en-in/library/microsoft.xrm.sdk.formattedvaluecollection.aspx

このステートメントは、文字列表示値に対してのみ有効であることがわかります。このステートメントを整数値で使用しようとすると、key not found in Dictionary 例外がスローされます。

したがって、コードで整数の表示名オプションセットを取得するために、このステートメントを避けるようにしてください。

于 2013-04-28T13:05:31.710 に答える