创建方法

时间:2011-12-22 20:47:22

标签: c# c#-4.0

我有几个这样的实例,我必须调用它来从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)

但我不确定如何使方法来处理它。关于我如何做这个方法的任何想法?

谢谢!

2 个答案:

答案 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();