Advertisements

Archive

Archive for February 3, 2012

Reading Optionset using CRM 2011 IOrganizationService

February 3, 2012 1 comment

Hi,

Below is the code to read “Optionset” using CRM 2011 IOrganizationService.

Below logic reads the Optionset and returns “KeyValue” list (Key = Option Label; Value = Option Value)

using Microsoft.Xrm.Sdk;

using Microsoft.Xrm.Sdk.Client;

using Microsoft.Xrm.Sdk.Query;

using Microsoft.Xrm.Sdk.Messages;

using Microsoft.Xrm.Sdk.Metadata;

  public List<KeyValuePair<string, int>> GetOptionSet(string entityName, string attributeName, IOrganizationService service)

{

var optionSet = new List<KeyValuePair<string, int>>();

            RetrieveAttributeRequest request = new RetrieveAttributeRequest();

request.EntityLogicalName = entityName;

request.MetadataId = Guid.Empty;

request.LogicalName = attributeName;

request.RetrieveAsIfPublished = true;

 OrganizationResponse response = service.Execute(request); 

if (response != null && response.Results != null)

{

foreach (KeyValuePair param in response.Results)

{

foreach (OptionMetadata option in ((EnumAttributeMetadata)param.Value).OptionSet.Options)

{

string name = option.Label.LocalizedLabels[0].Label.ToString().Trim();

int value = option.Value.Value;

optionSet.Add(new KeyValuePair(name, value));

}

}

}

return optionSet;

}

        // Returns option label by value

public string GetOptionLabelByValue(List<KeyValuePair<string, int>> optionSet, int optValue)

{

foreach (KeyValuePair< string, int> optn in optionSet)

{

if (optn.Value == optValue)

{

return optn.Key;

}

}

return string.Empty;

}

        // Returns option Value by Label

public int GetOptionValueByLabel(List<KeyValuePair<string, int>> optionSet, string optLabel) {        {

foreach (KeyValuePairoptn in optionSet)

{

if (optn.Key) == optLabel)

{

return optn.Value;

}

}

return 0;

}

How Do I call these methods:-

  • To read ‘Gender (i.e., gendercode)’ optionset of entity ‘Contact (i.e., contact)’
  • Get Optionset dictionary by calling “GetOptionSet()” method
  • Call “GetOptionLabelName()” to get Label by Value
  • Call “GetOptionValueByLabel()” to get Value by Label

// Get OptionSet First

var  optGender  = GetOptionSet(“contact”, “gendercode”, orgService);

// Get Option label by value

string optLblGander = GetOptionLabelName(optGender  , 1); /* 1 is Value of Male */

// To get Option Value by Label

int optValueGander = GetOptionValueByLabel(optGender  , “Male”);

Hope it helps 🙂

Advertisements