public static List <OptionSetMetadataBase> GetOptionSetMetadata(IOrganizationService service) { RetrieveAllOptionSetsRequest req = new RetrieveAllOptionSetsRequest(); RetrieveAllOptionSetsResponse res = (RetrieveAllOptionSetsResponse)service.Execute(req); return(res.OptionSetMetadata.ToList()); }
private OptionSetMetadata[] RetrieveGlobalOptionSetsMetadataFromServer(IOrganizationService service) { var results = new List <OptionSetMetadata>(); // Use RetrieveAllOptionSetsRequest to retrieve all global option sets. // Create the request. RetrieveAllOptionSetsRequest retrieveAllOptionSetsRequest = new RetrieveAllOptionSetsRequest(); // Execute the request RetrieveAllOptionSetsResponse retrieveAllOptionSetsResponse = (RetrieveAllOptionSetsResponse)service.Execute(retrieveAllOptionSetsRequest); //return retrieveAllOptionSetsResponse.OptionSetMetadata; // Now you can use RetrieveAllOptionSetsResponse.OptionSetMetadata property to // work with all retrieved option sets. if (retrieveAllOptionSetsResponse.OptionSetMetadata.Count() > 0) { Console.WriteLine("All the global option sets retrieved as below:"); foreach (OptionSetMetadataBase optionSetMetadata in retrieveAllOptionSetsResponse.OptionSetMetadata) { if (!optionSetMetadata.IsManaged.Value && optionSetMetadata.IsGlobal.Value) { RetrieveOptionSetRequest retrieveOptionSetRequest = new RetrieveOptionSetRequest { Name = optionSetMetadata.Name }; // Execute the request. RetrieveOptionSetResponse retrieveOptionSetResponse = (RetrieveOptionSetResponse)service.Execute(retrieveOptionSetRequest); results.Add((OptionSetMetadata)retrieveOptionSetResponse.OptionSetMetadata); } } } return(results.ToArray()); }
private RetrieveAllOptionSetsResponse HandleRetrieveAllOptionSets(OrganizationRequest orgRequest, EntityReference userRef) { var request = MakeRequest <RetrieveAllOptionSetsRequest>(orgRequest); var resp = new RetrieveAllOptionSetsResponse(); resp.Results["OptionSetMetadata"] = dataMethods.RetrieveAllOptionSets(); return(resp); }
internal override OrganizationResponse Execute(OrganizationRequest orgRequest, EntityReference userRef) { var request = MakeRequest <RetrieveAllOptionSetsRequest>(orgRequest); var resp = new RetrieveAllOptionSetsResponse(); resp.Results["OptionSetMetadata"] = metadata.OptionSets; return(resp); }
public OptionSetMetadataBase[] retrieveAllGlobalOptionSets() { RetrieveAllOptionSetsRequest retrieveAllOptionSetsRequest = new RetrieveAllOptionSetsRequest(); RetrieveAllOptionSetsResponse retrieveAllOptionSetsResponse = (RetrieveAllOptionSetsResponse)Service.Execute(retrieveAllOptionSetsRequest); return(retrieveAllOptionSetsResponse.OptionSetMetadata); }
private List <OptionSetMetadata> GetOptionSets() { RetrieveAllOptionSetsRequest request = new RetrieveAllOptionSetsRequest(); RetrieveAllOptionSetsResponse retrieve = (RetrieveAllOptionSetsResponse)_service.Execute(request); return(retrieve .OptionSetMetadata .OfType <OptionSetMetadata>() .Where(e => e.Options.Any(o => o.Value.HasValue)) .OrderBy(e => e.Name) .ToList()); }
private List <OptionSetMetadata> GetListByIdList(IEnumerable <Guid> ids) { RetrieveAllOptionSetsRequest request = new RetrieveAllOptionSetsRequest(); RetrieveAllOptionSetsResponse retrieve = (RetrieveAllOptionSetsResponse)_service.Execute(request); var hash = new HashSet <Guid>(ids); return(retrieve .OptionSetMetadata .OfType <OptionSetMetadata>() .Where(e => e.Options.Any(o => o.Value.HasValue) && hash.Contains(e.MetadataId.Value)) .OrderBy(e => e.Name) .ToList()); }
/// <summary> /// Load Global Option Set /// </summary> private static void LoadGlobalOptionSet() { RetrieveAllOptionSetsRequest request = new RetrieveAllOptionSetsRequest { }; RetrieveAllOptionSetsResponse response = (RetrieveAllOptionSetsResponse)organizationService.Execute(request); var optionSetData = response.OptionSetMetadata; string content = string.Empty; foreach (var optionSet in optionSetData) { if (optionSet.IsGlobal.HasValue && !optionSet.IsGlobal.Value) { continue; } string optionSetCode = GlobalOptionSetCodeTemplate; string label = GetOptionSetLabel(optionSet); string displayName = label; string description = label; if (string.IsNullOrEmpty(description)) { description = displayName; } optionSetCode = optionSetCode.Replace("[@OptionSet.DisplayName]", displayName); optionSetCode = optionSetCode.Replace("[@OptionSet.Description]", TransformToSymmary(description)); optionSetCode = optionSetCode.Replace("[@OptionSet.SchemaName]", optionSet.Name); optionSetCode = optionSetCode.Replace("[@OptionSet.OptionSetType.Value]", optionSet.OptionSetType.Value.ToString()); optionSetCode = optionSetCode.Replace("[@OptionSet.LogicalName]", optionSet.Name); string optionSetEnums = string.Empty; if (optionSet.OptionSetType != null) { if ((OptionSetType)optionSet.OptionSetType == OptionSetType.Picklist) { OptionSetMetadata optionSetMetadata = (OptionSetMetadata)optionSet; int optionCount = 1; foreach (OptionMetadata option in optionSetMetadata.Options) { var desc = label; var value = option.Value.Value.ToString(CultureInfo.InvariantCulture); var label2 = optionCount + "_" + ConvertNameAsVariable(desc); string optionSetEnumCode = OptionSetEnumCodeTemplate; optionSetEnumCode = optionSetEnumCode.Replace("[@Option.Description]", TransformToSymmary(desc)); optionSetEnumCode = optionSetEnumCode.Replace("[@Option.Label]", label2); optionSetEnumCode = optionSetEnumCode.Replace("[@Option.Value]", value); optionSetEnums += optionSetEnumCode; optionCount++; } } else if ((OptionSetType)optionSet.OptionSetType == OptionSetType.Boolean) { BooleanOptionSetMetadata optionSetMetadata = (BooleanOptionSetMetadata)optionSet; string optionSetEnumCode = OptionSetEnumCodeTemplate; optionSetEnumCode = optionSetEnumCode.Replace("[@Option.Description]", optionSetMetadata.TrueOption.Label.UserLocalizedLabel.Label); optionSetEnumCode = optionSetEnumCode.Replace("[@Option.Label]", "TrueOption"); optionSetEnumCode = optionSetEnumCode.Replace("[@Option.Value]", optionSetMetadata.TrueOption.Value.ToString()); optionSetEnums += optionSetEnumCode; optionSetEnumCode = OptionSetEnumCodeTemplate; optionSetEnumCode = optionSetEnumCode.Replace("[@Option.Description]", optionSetMetadata.FalseOption.Label.UserLocalizedLabel.Label); optionSetEnumCode = optionSetEnumCode.Replace("[@Option.Label]", "FalseOption"); optionSetEnumCode = optionSetEnumCode.Replace("[@Option.Value]", optionSetMetadata.FalseOption.Value.ToString()); optionSetEnums += optionSetEnumCode; } optionSetCode = optionSetCode.Replace("[@OptionSet.Values]", optionSetEnums); } content += optionSetCode; } string classContent = GlobalOptionSetClassCodeTemplate; classContent = classContent.Replace("[@DefaultNamespace]", DefaultNamespace); classContent = classContent.Replace("[@OptionSetDefinition]", content); string fileName = Path.Combine(TargetPath, "GlobalOptionSet.generated.cs"); File.WriteAllText(fileName, classContent); }
/// <summary> /// </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, bool promptForDelete) { try { // 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(); #region How to dump option set info RetrieveAllOptionSetsRequest retrieveAllOptionSetsRequest = new RetrieveAllOptionSetsRequest(); // Execute the request RetrieveAllOptionSetsResponse retrieveAllOptionSetsResponse = (RetrieveAllOptionSetsResponse)_serviceProxy.Execute( retrieveAllOptionSetsRequest); // Create an instance of StreamWriter to write text to a file. // The using statement also closes the StreamWriter. // To view this file, right click the file and choose open with Excel. // Excel will figure out the schema and display the information in columns. String filename = String.Concat("AllOptionSetValues.xml"); using (StreamWriter sw = new StreamWriter(filename)) { // Create Xml Writer. XmlTextWriter metadataWriter = new XmlTextWriter(sw); // Start Xml File. metadataWriter.WriteStartDocument(); // Metadata Xml Node. metadataWriter.WriteStartElement("Metadata"); if (retrieveAllOptionSetsResponse.OptionSetMetadata.Count() > 0) { foreach (OptionSetMetadataBase optionSetMetadataBase in retrieveAllOptionSetsResponse.OptionSetMetadata) { if (optionSetMetadataBase.OptionSetType != null) { if ((OptionSetType)optionSetMetadataBase.OptionSetType == OptionSetType.Picklist) { OptionSetMetadata optionSetMetadata = (OptionSetMetadata)optionSetMetadataBase; // Start OptionSet Node metadataWriter.WriteStartElement("OptionSet"); metadataWriter.WriteAttributeString("OptionSetType", OptionSetType.Picklist.ToString()); metadataWriter.WriteElementString("OptionSetDisplayName", (optionSetMetadata.DisplayName.LocalizedLabels.Count > 0)? optionSetMetadata.DisplayName.LocalizedLabels[0].Label : String.Empty); // Writes the options metadataWriter.WriteStartElement("Options"); foreach (OptionMetadata option in optionSetMetadata.Options) { metadataWriter.WriteStartElement("Option"); metadataWriter.WriteElementString("OptionValue", option.Value.ToString()); metadataWriter.WriteElementString("OptionDescription", option.Label.UserLocalizedLabel.Label.ToString()); metadataWriter.WriteEndElement(); } metadataWriter.WriteEndElement(); // End OptionSet Node metadataWriter.WriteEndElement(); } else if ((OptionSetType)optionSetMetadataBase.OptionSetType == OptionSetType.Boolean) { BooleanOptionSetMetadata optionSetMetadata = (BooleanOptionSetMetadata)optionSetMetadataBase; // Start OptionSet Node metadataWriter.WriteStartElement("OptionSet"); metadataWriter.WriteAttributeString("OptionSetType", OptionSetType.Boolean.ToString()); if (optionSetMetadata.DisplayName.LocalizedLabels.Count != 0) { metadataWriter.WriteElementString("OptionSetDisplayName", optionSetMetadata.DisplayName.LocalizedLabels[0].Label); } else { metadataWriter.WriteElementString("OptionSetDisplayName", "UNDEFINED"); } // Writes the TrueOption metadataWriter.WriteStartElement("TrueOption"); metadataWriter.WriteElementString("OptionValue", optionSetMetadata.TrueOption.Value.ToString()); metadataWriter.WriteElementString("OptionDescription", optionSetMetadata.TrueOption.Label.UserLocalizedLabel.Label.ToString()); metadataWriter.WriteEndElement(); // Writes the FalseOption metadataWriter.WriteStartElement("FalseOption"); metadataWriter.WriteElementString("OptionValue", optionSetMetadata.FalseOption.Value.ToString()); metadataWriter.WriteElementString("OptionDescription", optionSetMetadata.FalseOption.Label.UserLocalizedLabel.Label.ToString()); metadataWriter.WriteEndElement(); // End OptionSet Node metadataWriter.WriteEndElement(); } } } } // End Metadata Xml Node metadataWriter.WriteEndElement(); metadataWriter.WriteEndDocument(); // Close xml writer. metadataWriter.Close(); } #endregion How to dump option set info Console.WriteLine("Done."); //DeleteRequiredRecords(promptForDelete); } } // 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; } }
private async Task CheckingGlobalOptionSetDuplicates(ConnectionData connectionData, CommonConfiguration commonConfig) { var service = await ConnectAndWriteToOutputAsync(connectionData); if (service == null) { return; } StringBuilder content = new StringBuilder(); content.AppendLine(Properties.OutputStrings.ConnectingToCRM); content.AppendLine(connectionData.GetConnectionDescription()); content.AppendFormat(Properties.OutputStrings.CurrentServiceEndpointFormat1, service.CurrentServiceEndpoint).AppendLine(); var entityMetadataSource = new SolutionComponentMetadataSource(service); var descriptor = new SolutionComponentDescriptor(service); descriptor.WithUrls = true; descriptor.WithManagedInfo = true; descriptor.WithSolutionsInfo = true; var dependencyRepository = new DependencyRepository(service); var descriptorHandler = new DependencyDescriptionHandler(descriptor); RetrieveAllOptionSetsRequest request = new RetrieveAllOptionSetsRequest(); RetrieveAllOptionSetsResponse response = (RetrieveAllOptionSetsResponse)service.Execute(request); bool hasInfo = false; foreach (var optionSet in response.OptionSetMetadata.OfType <OptionSetMetadata>().OrderBy(e => e.Name)) { var coll = await dependencyRepository.GetDependentComponentsAsync((int)ComponentType.OptionSet, optionSet.MetadataId.Value); if (coll.Any()) { var filter = coll .Where(c => c.DependentComponentType.Value == (int)ComponentType.Attribute) .Select(c => new { Dependency = c, Attribute = entityMetadataSource.GetAttributeMetadata(c.DependentComponentObjectId.Value) }) .Where(c => c.Attribute != null) .GroupBy(c => c.Attribute.EntityLogicalName) .Where(gr => gr.Count() > 1) .SelectMany(gr => gr.Select(c => c.Dependency)) .ToList() ; if (filter.Any()) { var desc = await descriptorHandler.GetDescriptionDependentAsync(filter); if (!string.IsNullOrEmpty(desc)) { if (content.Length > 0) { content .AppendLine(new string('-', 150)) .AppendLine(); } hasInfo = true; content.AppendFormat("Global OptionSet Name {0} IsCustomOptionSet {1} IsManaged {2}", optionSet.Name, optionSet.IsCustomOptionSet, optionSet.IsManaged).AppendLine(); content.AppendLine(desc); } } } } if (!hasInfo) { content.AppendLine("No duplicates were found."); } commonConfig.CheckFolderForExportExists(this._iWriteToOutput); string fileName = string.Format("{0}.Checking Global OptionSet Duplicates on Entity at {1}.txt", connectionData.Name, DateTime.Now.ToString("yyyy.MM.dd HH-mm-ss")); string filePath = Path.Combine(commonConfig.FolderForExport, FileOperations.RemoveWrongSymbols(fileName)); File.WriteAllText(filePath, content.ToString(), new UTF8Encoding(false)); this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.CreatedFileWithCheckingGlobalOptionSetDuplicatesOnEntityFormat1, filePath); this._iWriteToOutput.PerformAction(service.ConnectionData, filePath); }
private static void GenerateGlobalPicklistObjectDefinitionEntries(ObjectDefinition objDef, RetrieveAllOptionSetsResponse response) { var customizableGlobalPicklists = response.OptionSetMetadata.Where(x => x.IsCustomizable.Value == true && x.DisplayName.LocalizedLabels.Count > 0); List<XmlAttribute> attribs = new List<XmlAttribute>(); XmlDocument doc = new XmlDocument(); XmlAttribute isGlobalAttrib = doc.CreateAttribute("IsGlobal"); isGlobalAttrib.Value = "true"; attribs.Add(isGlobalAttrib); foreach (var optionSet in customizableGlobalPicklists) { ComplexType complexType = CRM2011AdapterUtilities.ComplexTypeConvert(AttributeTypeCode.Picklist, objDef); FieldDefinition globalDef = new FieldDefinition() { Name = optionSet.Name, TypeDefinition = complexType, DisplayName = optionSet.DisplayName.LocalizedLabels[0].Label }; globalDef.AdditionalAttributes = attribs.ToArray(); objDef.Types.First().Children.Add(globalDef); } }
/// <summary> /// </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(IOrganizationService service, string solutionName) { try { // string serverName = "https://workflow.crm.dynamics.com/Workflow_10312017"; // Uri organizationUri = new Uri(string.Format("{0}/XRMServices/2011/Organization.svc", serverName)); // Uri homeRealmUri = null; // ClientCredentials credentials = new ClientCredentials(); // //use UserName object for CRM Online //credentials.UserName.UserName = "******"; //credentials.UserName.Password = "******"; // use default for OnPrem... //credentials.Windows.ClientCredential = System.Net.CredentialCache.DefaultNetworkCredentials; //IOrganizationService service = new OrganizationServiceProxy(organizationUri, homeRealmUri, credentials, null); #region How to dump option set info RetrieveAllOptionSetsRequest retrieveAllOptionSetsRequest = new RetrieveAllOptionSetsRequest(); // Execute the request RetrieveAllOptionSetsResponse retrieveAllOptionSetsResponse = (RetrieveAllOptionSetsResponse)service.Execute( retrieveAllOptionSetsRequest); // Create an instance of StreamWriter to write text to a file. // The using statement also closes the StreamWriter. // To view this file, right click the file and choose open with Excel. // Excel will figure out the schema and display the information in columns. String filename = String.Concat("AllOptionSetValues.xml"); using (StreamWriter sw = new StreamWriter(filename)) { // Create Xml Writer. XmlTextWriter metadataWriter = new XmlTextWriter(sw); // Start Xml File. metadataWriter.WriteStartDocument(); // Metadata Xml Node. metadataWriter.WriteStartElement("Metadata"); if (retrieveAllOptionSetsResponse.OptionSetMetadata.Count() > 0) { foreach (OptionSetMetadataBase optionSetMetadataBase in retrieveAllOptionSetsResponse.OptionSetMetadata) { if (optionSetMetadataBase.OptionSetType != null) { if ((OptionSetType)optionSetMetadataBase.OptionSetType == OptionSetType.Picklist) { OptionSetMetadata optionSetMetadata = (OptionSetMetadata)optionSetMetadataBase; // Start OptionSet Node metadataWriter.WriteStartElement("OptionSet"); metadataWriter.WriteAttributeString("OptionSetType", OptionSetType.Picklist.ToString()); metadataWriter.WriteElementString("OptionSetDisplayName", (optionSetMetadata.DisplayName.LocalizedLabels.Count > 0) ? optionSetMetadata.DisplayName.LocalizedLabels[0].Label : String.Empty); // Writes the options metadataWriter.WriteStartElement("Options"); foreach (OptionMetadata option in optionSetMetadata.Options) { metadataWriter.WriteStartElement("Option"); metadataWriter.WriteElementString("OptionValue", option.Value.ToString()); metadataWriter.WriteElementString("OptionDescription", option.Label.UserLocalizedLabel.Label.ToString()); metadataWriter.WriteEndElement(); } metadataWriter.WriteEndElement(); // End OptionSet Node metadataWriter.WriteEndElement(); } else if ((OptionSetType)optionSetMetadataBase.OptionSetType == OptionSetType.Boolean) { BooleanOptionSetMetadata optionSetMetadata = (BooleanOptionSetMetadata)optionSetMetadataBase; // Start OptionSet Node metadataWriter.WriteStartElement("OptionSet"); metadataWriter.WriteAttributeString("OptionSetType", OptionSetType.Boolean.ToString()); if (optionSetMetadata.DisplayName.LocalizedLabels.Count != 0) { metadataWriter.WriteElementString("OptionSetDisplayName", optionSetMetadata.DisplayName.LocalizedLabels[0].Label); } else { metadataWriter.WriteElementString("OptionSetDisplayName", "UNDEFINED"); } // Writes the TrueOption metadataWriter.WriteStartElement("TrueOption"); metadataWriter.WriteElementString("OptionValue", optionSetMetadata.TrueOption.Value.ToString()); metadataWriter.WriteElementString("OptionDescription", optionSetMetadata.TrueOption.Label.UserLocalizedLabel.Label.ToString()); metadataWriter.WriteEndElement(); // Writes the FalseOption metadataWriter.WriteStartElement("FalseOption"); metadataWriter.WriteElementString("OptionValue", optionSetMetadata.FalseOption.Value.ToString()); metadataWriter.WriteElementString("OptionDescription", optionSetMetadata.FalseOption.Label.UserLocalizedLabel.Label.ToString()); metadataWriter.WriteEndElement(); // End OptionSet Node metadataWriter.WriteEndElement(); } } } } // End Metadata Xml Node metadataWriter.WriteEndElement(); metadataWriter.WriteEndDocument(); // Close xml writer. metadataWriter.Close(); } #endregion How to dump option set info Console.WriteLine("Done."); //DeleteRequiredRecords(promptForDelete); } // 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; } }
/// <summary> /// Create a global option set. /// Set the options for that option set. /// Create a new reference to that option set on an entity. /// Update the option set's properties. /// Check the global option set for dependencies. /// Delete the option set. /// </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, bool promptForDelete) { try { // 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(); #region How to create global option set // Define the request object and pass to the service. CreateOptionSetRequest createOptionSetRequest = new CreateOptionSetRequest { // Create a global option set (OptionSetMetadata). OptionSet = new OptionSetMetadata { Name = _globalOptionSetName, DisplayName = new Label("Example Option Set", _languageCode), IsGlobal = true, OptionSetType = OptionSetType.Picklist, Options = { new OptionMetadata(new Label("Open", _languageCode), null), new OptionMetadata(new Label("Suspended", _languageCode), null), new OptionMetadata(new Label("Cancelled", _languageCode), null), new OptionMetadata(new Label("Closed", _languageCode), null) } } }; // Execute the request. CreateOptionSetResponse optionsResp = (CreateOptionSetResponse)_serviceProxy.Execute(createOptionSetRequest); #endregion How to create global option set // Store the option set's id as it will be needed to find all the // dependent components. _optionSetId = optionsResp.OptionSetId; Console.WriteLine("The global option set has been created."); #region How to create a picklist linked to the global option set // Create a Picklist linked to the option set. // Specify which entity will own the picklist, and create it. CreateAttributeRequest createRequest = new CreateAttributeRequest { EntityName = Contact.EntityLogicalName, Attribute = new PicklistAttributeMetadata { SchemaName = "sample_examplepicklist", LogicalName = "sample_examplepicklist", DisplayName = new Label("Example Picklist", _languageCode), RequiredLevel = new AttributeRequiredLevelManagedProperty(AttributeRequiredLevel.None), // In order to relate the picklist to the global option set, be sure // to specify the two attributes below appropriately. // Failing to do so will lead to errors. OptionSet = new OptionSetMetadata { IsGlobal = true, Name = _globalOptionSetName } } }; _serviceProxy.Execute(createRequest); Console.WriteLine("Referring picklist attribute created."); #endregion How to create a picklist linked to the global option set #region How to update a global option set // Use UpdateOptionSetRequest to update the basic information of an option // set. Updating option set values requires different messages (see below). UpdateOptionSetRequest updateOptionSetRequest = new UpdateOptionSetRequest { OptionSet = new OptionSetMetadata { DisplayName = new Label("Updated Option Set", _languageCode), Name = _globalOptionSetName, IsGlobal = true } }; _serviceProxy.Execute(updateOptionSetRequest); //Publish the OptionSet PublishXmlRequest pxReq1 = new PublishXmlRequest { ParameterXml = String.Format("<importexportxml><optionsets><optionset>{0}</optionset></optionsets></importexportxml>", _globalOptionSetName) }; _serviceProxy.Execute(pxReq1); Console.WriteLine("Option Set display name changed."); #endregion How to update a global option set properties #region How to insert a new option item in a global option set // Use InsertOptionValueRequest to insert a new option into a // global option set. InsertOptionValueRequest insertOptionValueRequest = new InsertOptionValueRequest { OptionSetName = _globalOptionSetName, Label = new Label("New Picklist Label", _languageCode) }; // Execute the request and store the newly inserted option value // for cleanup, used in the later part of this sample. _insertedOptionValue = ((InsertOptionValueResponse)_serviceProxy.Execute( insertOptionValueRequest)).NewOptionValue; //Publish the OptionSet PublishXmlRequest pxReq2 = new PublishXmlRequest { ParameterXml = String.Format("<importexportxml><optionsets><optionset>{0}</optionset></optionsets></importexportxml>", _globalOptionSetName) }; _serviceProxy.Execute(pxReq2); Console.WriteLine("Created {0} with the value of {1}.", insertOptionValueRequest.Label.LocalizedLabels[0].Label, _insertedOptionValue); #endregion How to insert a new option item in a global option set #region How to retrieve a global option set by it's name // Use the RetrieveOptionSetRequest message to retrieve // a global option set by it's name. RetrieveOptionSetRequest retrieveOptionSetRequest = new RetrieveOptionSetRequest { Name = _globalOptionSetName }; // Execute the request. RetrieveOptionSetResponse retrieveOptionSetResponse = (RetrieveOptionSetResponse)_serviceProxy.Execute( retrieveOptionSetRequest); Console.WriteLine("Retrieved {0}.", retrieveOptionSetRequest.Name); // Access the retrieved OptionSetMetadata. OptionSetMetadata retrievedOptionSetMetadata = (OptionSetMetadata)retrieveOptionSetResponse.OptionSetMetadata; // Get the current options list for the retrieved attribute. OptionMetadata[] optionList = retrievedOptionSetMetadata.Options.ToArray(); #endregion How to retrieve a global option set by it's name #region How to update an option item in a picklist // In order to change labels on option set values (or delete) option set // values, you must use UpdateOptionValueRequest // (or DeleteOptionValueRequest). UpdateOptionValueRequest updateOptionValueRequest = new UpdateOptionValueRequest { OptionSetName = _globalOptionSetName, // Update the second option value. Value = optionList[1].Value.Value, Label = new Label("Updated Option 1", _languageCode) }; _serviceProxy.Execute(updateOptionValueRequest); //Publish the OptionSet PublishXmlRequest pxReq3 = new PublishXmlRequest { ParameterXml = String.Format("<importexportxml><optionsets><optionset>{0}</optionset></optionsets></importexportxml>", _globalOptionSetName) }; _serviceProxy.Execute(pxReq3); Console.WriteLine("Option Set option label changed."); #endregion How to update an option item in a picklist #region How to change the order of options of a global option set // Change the order of the original option's list. // Use the OrderBy (OrderByDescending) linq function to sort options in // ascending (descending) order according to label text. // For ascending order use this: var updateOptionList = optionList.OrderBy(x => x.Label.LocalizedLabels[0].Label).ToList(); // For descending order use this: // var updateOptionList = // optionList.OrderByDescending( // x => x.Label.LocalizedLabels[0].Label).ToList(); // Create the request. OrderOptionRequest orderOptionRequest = new OrderOptionRequest { // Set the properties for the request. OptionSetName = _globalOptionSetName, // Set the changed order using Select linq function // to get only values in an array from the changed option list. Values = updateOptionList.Select(x => x.Value.Value).ToArray() }; // Execute the request _serviceProxy.Execute(orderOptionRequest); //Publish the OptionSet PublishXmlRequest pxReq4 = new PublishXmlRequest { ParameterXml = String.Format("<importexportxml><optionsets><optionset>{0}</optionset></optionsets></importexportxml>", _globalOptionSetName) }; _serviceProxy.Execute(pxReq4); Console.WriteLine("Option Set option order changed"); #endregion How to change the order of options of a global option set #region How to retrieve all global option sets // Use RetrieveAllOptionSetsRequest to retrieve all global option sets. // Create the request. RetrieveAllOptionSetsRequest retrieveAllOptionSetsRequest = new RetrieveAllOptionSetsRequest(); // Execute the request RetrieveAllOptionSetsResponse retrieveAllOptionSetsResponse = (RetrieveAllOptionSetsResponse)_serviceProxy.Execute( retrieveAllOptionSetsRequest); // Now you can use RetrieveAllOptionSetsResponse.OptionSetMetadata property to // work with all retrieved option sets. if (retrieveAllOptionSetsResponse.OptionSetMetadata.Count() > 0) { Console.WriteLine("All the global option sets retrieved as below:"); int count = 1; foreach (OptionSetMetadataBase optionSetMetadata in retrieveAllOptionSetsResponse.OptionSetMetadata) { Console.WriteLine("{0} {1}", count++, (optionSetMetadata.DisplayName.LocalizedLabels.Count > 0)? optionSetMetadata.DisplayName.LocalizedLabels[0].Label : String.Empty); } } #endregion How to retrieve all global option sets DeleteRequiredRecords(promptForDelete); } } // 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; } }
[STAThread] // Required to support the interactive login experience static void Main(string[] args) { CrmServiceClient service = null; try { service = SampleHelpers.Connect("Connect"); if (service.IsReady) { // Create any entity records that the demonstration code requires SetUpSample(service); #region Demonstrate // Define the request object and pass to the service. var createOptionSetRequest = new CreateOptionSetRequest { // Create a global option set (OptionSetMetadata). OptionSet = new OptionSetMetadata { Name = _globalOptionSetName, DisplayName = new Label("Example Option Set", _languageCode), IsGlobal = true, OptionSetType = OptionSetType.Picklist, Options = { new OptionMetadata(new Label("Open", _languageCode), null), new OptionMetadata(new Label("Suspended", _languageCode), null), new OptionMetadata(new Label("Cancelled", _languageCode), null), new OptionMetadata(new Label("Closed", _languageCode), null) } } }; // Execute the request. CreateOptionSetResponse optionsResp = (CreateOptionSetResponse)service.Execute(createOptionSetRequest); //</snippetWorkwithGlobalOptionSets2> #endregion How to create global option set // Store the option set's id as it will be needed to find all the // dependent components. _optionSetId = optionsResp.OptionSetId; Console.WriteLine("The global option set has been created."); #region How to create a picklist linked to the global option set //<snippetWorkwithGlobalOptionSets3> // Create a Picklist linked to the option set. // Specify which entity will own the picklist, and create it. var createRequest = new CreateAttributeRequest { EntityName = Contact.EntityLogicalName, Attribute = new PicklistAttributeMetadata { SchemaName = "sample_examplepicklist", LogicalName = "sample_examplepicklist", DisplayName = new Label("Example Picklist", _languageCode), RequiredLevel = new AttributeRequiredLevelManagedProperty(AttributeRequiredLevel.None), // In order to relate the picklist to the global option set, be sure // to specify the two attributes below appropriately. // Failing to do so will lead to errors. OptionSet = new OptionSetMetadata { IsGlobal = true, Name = _globalOptionSetName } } }; service.Execute(createRequest); //</snippetWorkwithGlobalOptionSets3> Console.WriteLine("Referring picklist attribute created."); #endregion How to create a picklist linked to the global option set #region How to update a global option set //<snippetWorkwithGlobalOptionSets4> // Use UpdateOptionSetRequest to update the basic information of an option // set. Updating option set values requires different messages (see below). var updateOptionSetRequest = new UpdateOptionSetRequest { OptionSet = new OptionSetMetadata { DisplayName = new Label("Updated Option Set", _languageCode), Name = _globalOptionSetName, IsGlobal = true } }; service.Execute(updateOptionSetRequest); //Publish the OptionSet var pxReq1 = new PublishXmlRequest { ParameterXml = String.Format("<importexportxml><optionsets><optionset>{0}</optionset></optionsets></importexportxml>", _globalOptionSetName) }; service.Execute(pxReq1); //</snippetWorkwithGlobalOptionSets4> Console.WriteLine("Option Set display name changed."); #endregion How to update a global option set properties #region How to insert a new option item in a global option set //<snippetWorkwithGlobalOptionSets5> // Use InsertOptionValueRequest to insert a new option into a // global option set. InsertOptionValueRequest insertOptionValueRequest = new InsertOptionValueRequest { OptionSetName = _globalOptionSetName, Label = new Label("New Picklist Label", _languageCode) }; // Execute the request and store the newly inserted option value // for cleanup, used in the later part of this sample. _insertedOptionValue = ((InsertOptionValueResponse)service.Execute( insertOptionValueRequest)).NewOptionValue; //Publish the OptionSet PublishXmlRequest pxReq2 = new PublishXmlRequest { ParameterXml = String.Format("<importexportxml><optionsets><optionset>{0}</optionset></optionsets></importexportxml>", _globalOptionSetName) }; service.Execute(pxReq2); //</snippetWorkwithGlobalOptionSets5> Console.WriteLine("Created {0} with the value of {1}.", insertOptionValueRequest.Label.LocalizedLabels[0].Label, _insertedOptionValue); #endregion How to insert a new option item in a global option set #region How to retrieve a global option set by it's name //<snippetWorkwithGlobalOptionSets6> // Use the RetrieveOptionSetRequest message to retrieve // a global option set by it's name. RetrieveOptionSetRequest retrieveOptionSetRequest = new RetrieveOptionSetRequest { Name = _globalOptionSetName }; // Execute the request. RetrieveOptionSetResponse retrieveOptionSetResponse = (RetrieveOptionSetResponse)service.Execute( retrieveOptionSetRequest); Console.WriteLine("Retrieved {0}.", retrieveOptionSetRequest.Name); // Access the retrieved OptionSetMetadata. OptionSetMetadata retrievedOptionSetMetadata = (OptionSetMetadata)retrieveOptionSetResponse.OptionSetMetadata; // Get the current options list for the retrieved attribute. OptionMetadata[] optionList = retrievedOptionSetMetadata.Options.ToArray(); //</snippetWorkwithGlobalOptionSets6> #endregion How to retrieve a global option set by it's name #region How to update an option item in a picklist //<snippetWorkwithGlobalOptionSets7> // In order to change labels on option set values (or delete) option set // values, you must use UpdateOptionValueRequest // (or DeleteOptionValueRequest). UpdateOptionValueRequest updateOptionValueRequest = new UpdateOptionValueRequest { OptionSetName = _globalOptionSetName, // Update the second option value. Value = optionList[1].Value.Value, Label = new Label("Updated Option 1", _languageCode) }; service.Execute(updateOptionValueRequest); //Publish the OptionSet PublishXmlRequest pxReq3 = new PublishXmlRequest { ParameterXml = String.Format("<importexportxml><optionsets><optionset>{0}</optionset></optionsets></importexportxml>", _globalOptionSetName) }; service.Execute(pxReq3); //</snippetWorkwithGlobalOptionSets7> Console.WriteLine("Option Set option label changed."); #endregion How to update an option item in a picklist #region How to change the order of options of a global option set //<snippetWorkwithGlobalOptionSets8> // Change the order of the original option's list. // Use the OrderBy (OrderByDescending) linq function to sort options in // ascending (descending) order according to label text. // For ascending order use this: var updateOptionList = optionList.OrderBy(x => x.Label.LocalizedLabels[0].Label).ToList(); // For descending order use this: // var updateOptionList = // optionList.OrderByDescending( // x => x.Label.LocalizedLabels[0].Label).ToList(); // Create the request. OrderOptionRequest orderOptionRequest = new OrderOptionRequest { // Set the properties for the request. OptionSetName = _globalOptionSetName, // Set the changed order using Select linq function // to get only values in an array from the changed option list. Values = updateOptionList.Select(x => x.Value.Value).ToArray() }; // Execute the request service.Execute(orderOptionRequest); //Publish the OptionSet PublishXmlRequest pxReq4 = new PublishXmlRequest { ParameterXml = String.Format("<importexportxml><optionsets><optionset>{0}</optionset></optionsets></importexportxml>", _globalOptionSetName) }; service.Execute(pxReq4); //</snippetWorkwithGlobalOptionSets8> Console.WriteLine("Option Set option order changed"); #endregion How to change the order of options of a global option set #region How to retrieve all global option sets //<snippetWorkwithGlobalOptionSets9> // Use RetrieveAllOptionSetsRequest to retrieve all global option sets. // Create the request. RetrieveAllOptionSetsRequest retrieveAllOptionSetsRequest = new RetrieveAllOptionSetsRequest(); // Execute the request RetrieveAllOptionSetsResponse retrieveAllOptionSetsResponse = (RetrieveAllOptionSetsResponse)service.Execute( retrieveAllOptionSetsRequest); // Now you can use RetrieveAllOptionSetsResponse.OptionSetMetadata property to // work with all retrieved option sets. if (retrieveAllOptionSetsResponse.OptionSetMetadata.Count() > 0) { Console.WriteLine("All the global option sets retrieved as below:"); int count = 1; foreach (OptionSetMetadataBase optionSetMetadata in retrieveAllOptionSetsResponse.OptionSetMetadata) { Console.WriteLine("{0} {1}", count++, (optionSetMetadata.DisplayName.LocalizedLabels.Count > 0) ? optionSetMetadata.DisplayName.LocalizedLabels[0].Label : String.Empty); } } #endregion Demonstrate #region Clean up CleanUpSample(service); #endregion Clean up } else { const string UNABLE_TO_LOGIN_ERROR = "Unable to Login to Microsoft Dataverse"; if (service.LastCrmError.Equals(UNABLE_TO_LOGIN_ERROR)) { Console.WriteLine("Check the connection string values in cds/App.config."); throw new Exception(service.LastCrmError); } else { throw service.LastCrmException; } } } catch (Exception ex) { SampleHelpers.HandleException(ex); } finally { if (service != null) { service.Dispose(); } Console.WriteLine("Press <Enter> to exit."); Console.ReadLine(); } }