创建方法
本文关键字:方法 创建 | 更新日期: 2023-09-27 18:18:42
我有几个这样的实例,我必须调用从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 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用ToDictionary
扩展方法将Options
翻译成Dictionary
您可以创建一个扩展方法:
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();