创建方法

本文关键字:方法 创建 | 更新日期: 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();