2011-03-29 137 views
3

我使用此代碼來獲取全球optionsets檢索Optionsets 2011年動態

var request = new RetrieveOptionSetRequest {Name = "OptionsetNameGoesHere"}; 
var retrieveOptionSetResponse =(RetrieveOptionSetResponse) DynamicsHandler._serviceProxy.Execute(request); 
var retrievedOptionSetMetadata =(OptionSetMetadata) retrieveOptionSetResponse.OptionSetMetadata; 
var optionList = retrievedOptionSetMetadata.Options.ToArray(); 

foreach (var optionMetadata in optionList) 
{ 
    Printout(optionMetadata.Label.LocalizedLabels[0].Label + "\n"); 
} 

但我怎麼檢索optionsets像AccountCategory(AccountCategoryCode),這樣我可以將它們綁定到一個ComboBox?

回答

2

這就是我解決這個問題的方法。 CRMBase是我連接到CRM實例的基類。代碼語言:C#

public static Dictionary<int, string> GetAll(CRMBase conn, string entityName, string attributeName) 
{ 
    OptionMetadataCollection result = RetrieveOptionSetMetaDataCollection(conn, entityName,   attributeName); 
    return result.Where(r => r.Value.HasValue).ToDictionary(r => r.Value.Value, r => r.Label.UserLocalizedLabel.Label); 
} 

// Method to retrieve OptionSet Options Metadadata collection. 
private static OptionMetadataCollection RetrieveOptionSetMetaDataCollection(CRMBase conn, string prmEntityName, string prmAttributeName) 
{ 
    RetrieveEntityRequest retrieveEntityRequest = new RetrieveEntityRequest(); 

    retrieveEntityRequest.LogicalName = prmEntityName; 

    retrieveEntityRequest.EntityFilters = Microsoft.Xrm.Sdk.Metadata.EntityFilters.Attributes; 

    RetrieveEntityResponse retrieveEntityResponse = (RetrieveEntityResponse)conn._orgContext.Execute(retrieveEntityRequest); 

    return (from AttributeMetadata in retrieveEntityResponse.EntityMetadata.Attributes where 
    (AttributeMetadata.AttributeType == AttributeTypeCode.Picklist & AttributeMetadata.LogicalName == prmAttributeName) 
    select ((PicklistAttributeMetadata)AttributeMetadata).OptionSet.Options).FirstOrDefault(); 
}