我有几个这样的实例,我必须调用它来从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)
但我不确定如何使方法来处理它。关于我如何做这个方法的任何想法?
谢谢!
答案 0 :(得分: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");
封装方法中任何数据的加载,并调用两次(对于您感兴趣的每组数据一次)。以上使用LINQ使用Options
扩展方法将Dictionary
转换为ToDictionary
。
答案 1 :(得分:0)
您可以创建扩展方法:
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();