2011-12-22 27 views
1

私はcrmサーバからデータをプルダウンするためにこれらのインスタンスをいくつか呼び出す必要があります。作成方法

RetrieveAttributeRequest request = new RetrieveAttributeRequest(); 
request.EntityLogicalName = "opportunity"; 
request.LogicalName = "new_businessunit"; 
RetrieveAttributeResponse response = (RetrieveAttributeResponse)lService.Execute(request); 
PicklistAttributeMetadata picklist = (PicklistAttributeMetadata)response.AttributeMetadata; 

RetrieveAttributeRequest requestsource = new RetrieveAttributeRequest(); 
requestsource.EntityLogicalName = "opportunity"; 
requestsource.LogicalName = "new_sourcepick"; 
RetrieveAttributeResponse responsesource = (RetrieveAttributeResponse)lService.Execute(requestsource); 
PicklistAttributeMetadata picklistsource = (PicklistAttributeMetadata)responsesource.AttributeMetadata; 

Dictionary<int?, string> BusinessUnits = new Dictionary<int?, string>(); 
foreach (OptionMetadata option in picklist.OptionSet.Options) 
    { 
     string picklistlabel = option.Label.UserLocalizedLabel.Label.ToString(); 
     businessid = option.Value; 
     BusinessUnits.Add(businessid, picklistlabel); 
    } 
Dictionary<int?, string> MarketSegment = new Dictionary<int?, string>(); 
foreach (OptionMetadata option in picklistmarket.OptionSet.Options) 
    { 
     string picklistlabel = option.Label.UserLocalizedLabel.Label.ToString(); 
     marketid = option.Value; 
     MarketSegment.Add(marketid, picklistlabel); 
    } 

したがって、基本的にデータをプルダウンしてから、データを保持する辞書を作成します。私はこれらをたくさん持っているので、EntityLogialNameとLogicalNameを渡すだけの方法を作りたいと思います。だからではなく、私のような何かができることすべてを持っていることの:

loadlist(opportuniuty、new_businessunit)

をしかし、私はそれを処理するメソッドを作成する方法が本当にわかりません。どのように私は方法を行うかについての任意のアイデア?

ありがとうございます!

public static class PicklistAttributeMetadataExtensions 
{ 
public static Dictionary<int?,string> ToDictionary(this PicklistAttributeMetadata picklist) 
{ 
    return picklist.OptionSet.Options.ToDictionary(x => x.Value, x => option.Label.UserLocalizedLabel.Label.ToString()); 
}  
} 

このように使用:

PicklistAttributeMetadata picklist = /// get pick list 
var dictionary = picklist.ToDictionary(); 
+0

いくつの異なる辞書宣言がありますか。私はあなたがBusinessUnitsとMarketSegmentにいくつ他のものを追加するのを見ますか? –

+0

私は合計で5を持っています –

答えて

1
public IDictionary<int?, string> LoadFromCRM(string entityName, string logicalName) 
{ 
    var request = new RetrieveAttributeRequest(); 
    request.EntityLogicalName = entityName; 
    request.LogicalName = logicalName; 
    var response = (RetrieveAttributeResponse)lService.Execute(request); 
    var picklist = (PicklistAttributeMetadata)response.AttributeMetadata; 

    return picklist.OptionSet.Options.ToDictionary(o => o.Value, o => o.Label.UserLocalizedLabel.Label.ToString()); 
} 

// Usage 
var businessUnits = LoadFromCRM("opportunity", "new_businessunit"); 
var marketSegment = LoadFromCRM("opportunity", "new_sourcepick"); 

がメソッド内の任意のデータの読み込みをカプセル化し、それぞれに1回2回(それを呼び出す

0

あなたは、拡張メソッドを作成することができますあなたが興味を持っているデータのセット)。上記では、OptionsToDictionary拡張メソッドを使用してDictionaryに変換するためにLINQを使用しています。