是,将数据全部存放在一个属性(SDK article)的元数据。您必须检索实体的实体元数据,然后在列表中找到该属性。然后将该属性转换为PicklistAttributeMetadata对象,它将包含一个选项列表。我会提到,通常从CRM中检索元数据是一项昂贵的操作,因此请考虑缓存。
private static OptionSetMetadata RetrieveOptionSet(IOrganizationService orgService,
string entityName, string attributeName)
{
var entityResponse = (RetrieveEntityResponse)orgService.Execute(
new RetrieveEntityRequest
{ LogicalName = entityName, EntityFilters = EntityFilters.Attributes });
var entityMetadata = entityResponse.EntityMetadata;
for (int i = 0; i < entityMetadata.Attributes.Length; i++)
{
if (attributeName.Equals(entityMetadata.Attributes[i].LogicalName))
{
if (entityMetadata.Attributes[i].AttributeType.Value ==
AttributeTypeCode.Picklist)
{
var attributeMD = (PicklistAttributeMetadata)
entityMetadata.Attributes[i];
return attributeMD.OptionSet;
}
}
}
return null;
}
以下是如何使用上述调用将选项写入控制台的方法。
var optionSetMD = RetrieveOptionSet(orgService, "account", "accountcategorycode");
var options = optionSetMD.Options;
for (int i = 0; i < options.Count; i++)
{
Console.WriteLine("Local Label: {0}. Value: {1}",
options[i].Label.UserLocalizedLabel.Label,
options[i].Value.HasValue ? options[i].Value.Value.ToString() : "null");
}
我相信这个工程的全局选项设置属性为好,但如果你知道它是一个全球性的选项设置有它不同的消息可能会多一点效率(SDK article)。
的optionset是全球性的还是本地的?全局选项集的 – 2013-04-29 13:14:13