2

MS CRM Dynamics でカスタム フィールドとして作成されたラベルと値のフィールドにプログラムでアクセスする方法はありますか?

「new_producttypesubcode」というカスタム フィールドを追加しました。たとえば、2 つのオプション、トロフィー = 1000000 とキット = 10000001 があります。

顧客の Web サイトとその CRM の間で製品をミラーリングするインポート ユーティリティを作成しています。CRM で可能なすべての製品オプションのリストを取得して、それらが Web サイトで一致するかどうかを確認したいと考えています。

だから、本質的に私はしたい...

  1. 可能な new_producttypesubcodes とそれに対応する値のリストを取得します。
  2. Web サイトの製品バリエーションを繰り返します。
  3. 製品バリアント名が new_producttypecodes のリスト内のいずれかの名前と一致する場合は、値 1000000 を追加します

したがって、Web サイトに追加された製品が「トロフィー」としてマークされ、「トロフィー」が CRM に存在する場合、新しい OptionSetValue(100000001)

それが理にかなっていることを願っています...

ありがとう

4

2 に答える 2

5

この関数は、現在のユーザーにローカライズされた可能な値の辞書を取得します。出典: CRM 2011 ピックリスト、オプションセット、ステートコード、ステータスコード、およびブール値 (2 つのオプション) の値をプログラムで検索する.

static Dictionary<String, int> GetNumericValues(IOrganizationService service, String entity, String attribute)
{
    RetrieveAttributeRequest request = new RetrieveAttributeRequest
    {
        EntityLogicalName = entity,
        LogicalName = attribute,
        RetrieveAsIfPublished = true
    };

    RetrieveAttributeResponse response = (RetrieveAttributeResponse)service.Execute(request);

    switch (response.AttributeMetadata.AttributeType)
    {
        case AttributeTypeCode.Picklist:
        case AttributeTypeCode.State:
        case AttributeTypeCode.Status:
            return ((EnumAttributeMetadata)response.AttributeMetadata).OptionSet.Options
                .ToDictionary(key => key.Label.UserLocalizedLabel.Label, option => option.Value.Value);

        case AttributeTypeCode.Boolean:
            Dictionary<String, int> values = new Dictionary<String, int>();

            BooleanOptionSetMetadata metaData = ((BooleanAttributeMetadata)response.AttributeMetadata).OptionSet;

            values[metaData.TrueOption.Label.UserLocalizedLabel.Label] = metaData.TrueOption.Value.Value;
            values[metaData.FalseOption.Label.UserLocalizedLabel.Label] = metaData.FalseOption.Value.Value;

            return values;

        default:
            throw new ArgumentOutOfRangeException();
    }
}

したがって、次のようなことを行う必要があります。

Dictionary<String, int> values = GetNumericValues(proxy, "your_entity", "new_producttypesubcode");

if(values.ContainsKey("Trophy"))
{
    //Do something with the value
    OptionSetValue optionSetValue = values["Trophy"];
    int value = optionSetValue.Value;
}
于 2013-04-29T14:51:21.340 に答える