public static PickListEnums GetOptionPickListValues(string entityLogicalName, string entityDisplayName, string attributeName, IOrganizationService _serviceProxy) { // set the properties to get back the codeable concept picklist values // from the picklist (optionset) RetrieveAttributeRequest retrieveEntityRequest = new RetrieveAttributeRequest { EntityLogicalName = entityLogicalName, LogicalName = attributeName, RetrieveAsIfPublished = true }; // execute the call and retrieve the actual metadata directly RetrieveAttributeResponse retrieveAttributeResponse = (RetrieveAttributeResponse)_serviceProxy.Execute(retrieveEntityRequest); var attributeMetadata = (EnumAttributeMetadata)retrieveAttributeResponse.AttributeMetadata; // retrieve each option list item var optionList = (from o in attributeMetadata.OptionSet.Options select new { Value = o.Value, Text = o.Label.UserLocalizedLabel.Label }).ToList(); // iterate through each option and write out the value and text // this will enable us to map the "Text" value given to us in the // codeable concepts file that we generated OR if you generate some new ones // you can run this program again to create the mapping file // or at least have the copy that was generated for you PickListEnums ple = new PickListEnums(); ple.AttributeLogicalName = attributeName; ple.EntityDisplayName = entityDisplayName; ple.EntityLogicalName = entityLogicalName; ple.EnumName = GenerateEnumName(entityDisplayName, attributeName); foreach (var option in optionList) { totalOptions++; PickListValues plv = new PickListValues(); // add to our stirng list of options picklistmappingdata.Add(entityDisplayName + "," + entityLogicalName + "," + attributeName + "," + option.Text.Trim() + "," + option.Value.ToString().Trim()); //default to first string of the label plv.PickListDisplay = option.Text.Trim(); plv.PickListValue = option.Value.ToString().Trim(); ple.EnumValues.Add(option.Text.Trim(), plv); // write out our option count Console.SetCursorPosition(0, Console.CursorTop); Console.WriteLine("Total Options Found [" + totalOptions.ToString() + "]"); System.Threading.Thread.Sleep(1); } return(ple); }
/// <summary> /// Demonstrates sharing records by exercising various access messages including: /// Grant, Modify, Revoke, RetrievePrincipalAccess, and /// RetrievePrincipalsAndAccess. /// </summary> /// <param name="serverConfig">Contains server connection information.</param> /// <param name="promptforDelete">When True, the user will be prompted to delete all /// created entities.</param> public void Run(ServerConnection.Configuration serverConfig) { try { Console.WriteLine("Looking for picklists to export values for"); string solutionName = ConfigurationManager.AppSettings["cdm:solution"]; // we need this to support communicating with Dynamics Online Instances ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; //<snippetSharingRecords1> // Connect to the Organization service. // The using statement assures that the service proxy will be properly disposed. using (_serviceProxy = new OrganizationServiceProxy(serverConfig.OrganizationUri, serverConfig.HomeRealmUri, serverConfig.Credentials, serverConfig.DeviceCredentials)) { // This statement is required to enable early-bound type support. _serviceProxy.EnableProxyTypes(); _service = (IOrganizationService)_serviceProxy; IEnumerable <EntityMetadata> entities = getSolutionEntities(solutionName, _serviceProxy); foreach (EntityMetadata em in entities) { foreach (AttributeMetadata am in em.Attributes) { if (am.AttributeType == AttributeTypeCode.Picklist) { if ((em.LogicalName.ToLower().StartsWith("msemr_")) || (am.LogicalName.ToLower().StartsWith("msemr_"))) { PickListEnums ple = new PickListEnums(); ple = GetOptionPickListValues(em.LogicalName, em.DisplayName.UserLocalizedLabel.Label.ToString(), am.LogicalName, _serviceProxy); enums.Add(ple); newNumerations += ple.GenerateEnum(); } } } } string picklistoutputfile = ConfigurationManager.AppSettings["cdm:picklistvaluesoutputfilename"]; string enumfile = ConfigurationManager.AppSettings["cdm:enumsourceoutputfilename"]; // if we don't have any don't write anything if (picklistmappingdata.Count > 0) { File.Delete(picklistoutputfile); // Remove this line if you don't want to erase the current version File.WriteAllLines(picklistoutputfile, picklistmappingdata); } else { Console.WriteLine("Could not find any pick list Types"); } File.Delete(enumfile); // Remove this line if you don't want to erase the current version File.WriteAllText(enumfile, newNumerations); } } // Catch any service fault exceptions that Microsoft Dynamics CRM throws. catch (FaultException <Microsoft.Xrm.Sdk.OrganizationServiceFault> ) { // You can handle an exception here or pass it back to the calling method. throw; } }