2016-12-28 10 views
0

フィールドを文字列からオプションセットに変換し、動的CRMエンティティに挿入する必要がありました。誰もがそれを行う方法を知っている場合 だから私 を助けてください..あなたが提供するコードに文字列をオプションセットに変換して動的CRMオプションセットに挿入する方法

Entity accountEntity = new Entity("new_categoryoption"); 
accountEntity["new_categorylist"] = dt.Rows[i][1].ToString(); 
+0

あなたのシナリオは明らかではありません。 –

答えて

1

付喪神の答えも正しいです。ただし、動的に取得するには、以下のコードを使用できます。

Entity accountEntity = new Entity("new_categoryoption"); 
accountEntity["new_categorylist"] = new OptionSet(GetOptionsSetValueOnText(service, "new_categoryoption", "new_categorylist", dt.Rows[i][1].ToString())); 


public int GetOptionsSetValueOnText(IOrganizationService service, string entitySchemaName, string attributeSchemaName, string optionsetText) 
{ 
    RetrieveAttributeRequest retrieveAttributeRequest = new RetrieveAttributeRequest 
    { 
     EntityLogicalName = entitySchemaName, 
     LogicalName = attributeSchemaName, 
     RetrieveAsIfPublished = true 
    }; 
    RetrieveAttributeResponse retrieveAttributeResponse = (RetrieveAttributeResponse)service.Execute(retrieveAttributeRequest); 
    PicklistAttributeMetadata retrievedPicklistAttributeMetadata = (PicklistAttributeMetadata)retrieveAttributeResponse.AttributeMetadata; 
    OptionMetadata[] optionList = retrievedPicklistAttributeMetadata.OptionSet.Options.ToArray(); 

    int optionsetValue = 0; 
    if (optionList.Length > 0) 
    { 
     optionsetValue = (from a in optionList 
        where a.Label.UserLocalizedLabel.Label == optionsetText 
        select a.Value).First(); 
    } 
    return optionsetValue ; 
} 
+0

私はOptionSetが静的であるべきだと思うので、それはツクモガミのように「ハードコード」するのが良い考えです。しかし、このアプローチは大丈夫です。 – Sxntk

+0

はい、そうです。しかし、顧客がオプションセットのテキスト(ラベル)を変更したいときはいつでも、プラグイン/カスタムコードをハードコードされた場所に変更する必要があります。 –

+0

これは大丈夫な解決策であり、場合によってはあなたが述べたように、最も適した解決策かもしれません。しかし、私は、メタデータを取得することは悪くもないことに注意してください。 – tsukumogami

1

ベースを、私はあなたがオプションのリストを提供し、今あなたが設定したいのDropDownListまたは類似した何かを持っていると思いますエンティティのOptionSetフィールドは、ユーザーが選択したものに基づいています。それがあなたが望むものでないなら、さらに明確にしてください。

では、次のオプションでは、optionを持つCRMで言ってみましょう:

Name Value 
Apple 100000000 
Orange 100000001 
Lemon 100000002 

は、今すぐあなたのリストには、次の選択肢があります。

Apple 
Orange 
Lemon  

あなたがまず最初にマップすることですユーザーがオレンジ色を選択した場合はCRMの値を使用します。つまり、レモンを選択した場合は100000001に、100000002とマッチさせる必要があります。これは、スイッチケース、辞書、またはif-else ...

あなたが値を持った後、このようなあなたのエンティティに追加します。

accountEntity["new_categorylist"] = new OptionSetValue(<value>) 

をあなたのケースでは、あなたはこのようにそれを書き込むことができます。

int optSetValue; 
switch (dt.Rows[i][1].ToString()) 
{ 
    case "Apple": 
     optSetValue = 100000000; 
     break; 
    case "Orange": 
     optSetValue = 100000001; 
     break; 
    case "Lemon": 
     optSetValue = 100000002; 
     break; 
    default: 
     throw new Exception("Invalid choice"); 
} 
accountEntity["new_categorylist"] = new OptionSetValue(optSetValue) 
関連する問題