Как можно обновить порядок сортировки кодов состояния / кодов состояний Dynamics CRM? - PullRequest
0 голосов
/ 25 сентября 2018

Редактор пользовательского интерфейса в Dynamics CRM не позволит системным администраторам напрямую редактировать списки состояний / кодов состояний в объекте Activity.Как можно отредактировать заказ программно?

В другом вопросе предоставлена ​​информация о том, как получить метаданные о кодах состояния и кодах состояния: Dynamics Crm: получить метаданные для сопоставления кода состояния / кода состояния

Microsoft предоставляет класс дляпорядок сортировки списков выбора: https://docs.microsoft.com/en-us/previous-versions/dynamicscrm-2016/developers-guide/gg327607(v%3dcrm.8)

Я успешно закодировал и могу получить метаданные как для стандартных списков выбора, так и для списков выбора кодов состояния (как кода состояния, так и кода состояния).Я могу программно обновить порядок сортировки в стандартных списках выбора, но при попытке сделать это в наборе параметров кода состояния не выдается никаких ошибок и в систему не публикуются никакие изменения.

Как можно обновить порядок сортировки в поле кода состояния активности?

Ниже приведен пример кода с обоими тестами:


namespace ConsoleApps
{
    class EditAptStatusCodeOptionSetOrder
    {
        static void Main()
        {
            //Connect to Database
            string CRMConnectionString = @"AuthType = Office365; URL = https://URLOFSERVER; Username=USERNAME; Password=PASSWORD;";
            Console.WriteLine("Connecting to Auric Solar Sandbox Environment Using Ryan Perry's Credentials. ");
            CrmServiceClient crmServiceClient = new CrmServiceClient(CRMConnectionString);
            IOrganizationService crmService = crmServiceClient.OrganizationServiceProxy;

            //Test Retrieving Stage (Statuscode) from Test Entity. 
            //Get the Attribute
            RetrieveAttributeRequest retrieveStatusCodeAttributeRequest = new RetrieveAttributeRequest
            {
                EntityLogicalName = "new_testentity",
                LogicalName = "statuscode",
                RetrieveAsIfPublished = true
            };

            RetrieveAttributeResponse retrieveStatusCodeAttributeResponse =
                (RetrieveAttributeResponse)crmService.Execute(retrieveStatusCodeAttributeRequest);
            Console.WriteLine("Retreived Attribute:" +
                retrieveStatusCodeAttributeResponse.AttributeMetadata.LogicalName);
            Console.WriteLine("Retreived Attribute Description:" +
                retrieveStatusCodeAttributeResponse.AttributeMetadata.Description);

            StatusAttributeMetadata statusCodeMetaData =
                (StatusAttributeMetadata)retrieveStatusCodeAttributeResponse.AttributeMetadata;
            Console.WriteLine("Metadata Description:" +
                statusCodeMetaData.Description);
            Console.WriteLine("Metadata IsValidForUpdate:" +
                statusCodeMetaData.IsValidForUpdate.ToString());
            Console.WriteLine("OptionSet Type:" +
                statusCodeMetaData.OptionSet.Name.ToString());
            Console.WriteLine("OptionSet Name:" +
                statusCodeMetaData.OptionSet.OptionSetType.ToString());
            Console.WriteLine("Retrieved Options:");
            foreach (OptionMetadata optionMeta in statusCodeMetaData.OptionSet.Options)
            {
                Console.WriteLine(((StatusOptionMetadata)optionMeta).State.Value + " : " + optionMeta.Value + " : " + optionMeta.Label.UserLocalizedLabel.Label);

            }


            //Save Options in an array to reorder.
            OptionMetadata[] optionList = statusCodeMetaData.OptionSet.Options.ToArray();
            Console.WriteLine("Option Array:");
            foreach (OptionMetadata optionMeta in optionList)
            {
                Console.WriteLine(((StatusOptionMetadata)optionMeta).State.Value + " : " + optionMeta.Value + " : " + optionMeta.Label.UserLocalizedLabel.Label);
            }

            var sortedOptionList = optionList.OrderBy(x => x.Label.LocalizedLabels[0].Label).ToList();

            Console.WriteLine("Sorted Option Array:");
            foreach (OptionMetadata optionMeta in sortedOptionList)
            {
                Console.WriteLine(((StatusOptionMetadata)optionMeta).State.Value + " : " + optionMeta.Value + " : " + optionMeta.Label.UserLocalizedLabel.Label);
            }


            //Create the request.
            OrderOptionRequest orderStatusCodeOptionRequest = new OrderOptionRequest
            {
                AttributeLogicalName = "statuscode",
                EntityLogicalName = "new_testentity",
                Values = sortedOptionList.Select(X => X.Value.Value).ToArray()
            };
            Console.WriteLine("orderStatusCodeOptionRequest Created.");

            //Execute Request. //////THIS DOESN'T THROW ERRORS, BUT DOESN'T UPDATE SYSTEM. 
            OrderOptionResponse orderStatusCodeResponse = (OrderOptionResponse)crmService.Execute(orderStatusCodeOptionRequest);
            Console.WriteLine("Request Executed");







            ////////////////////////////////////////PICKLIST TEST//////////////////////////////////

            Console.WriteLine("\n\nTestingPickList");
            RetrieveAttributeRequest retrieveTestPicklistAttributeRequest = new RetrieveAttributeRequest
            {
                EntityLogicalName = "new_testentity",
                LogicalName = "new_testpicklist",
                RetrieveAsIfPublished = true
            };
            RetrieveAttributeResponse retrieveTestPicklistAttributeResponse =
                (RetrieveAttributeResponse)crmService.Execute(retrieveTestPicklistAttributeRequest);
            PicklistAttributeMetadata pickListMetaData =
                (PicklistAttributeMetadata)retrieveTestPicklistAttributeResponse.AttributeMetadata;
            Console.WriteLine("Retrieved Picklist Options:");
            foreach (OptionMetadata optionMeta in pickListMetaData.OptionSet.Options)
            {
                Console.WriteLine(optionMeta.Value + " : " + optionMeta.Label.UserLocalizedLabel.Label);

            }


            //Save Options in an array to reorder.
            OptionMetadata[] picklistOptionList = pickListMetaData.OptionSet.Options.ToArray();
            Console.WriteLine("Picklist Option Array:");
            foreach (OptionMetadata optionMeta in picklistOptionList)
            {
                Console.WriteLine(optionMeta.Value + " : " + optionMeta.Label.UserLocalizedLabel.Label);
            }

            var sortedPicklistOptionList = picklistOptionList.OrderBy(x => x.Label.LocalizedLabels[0].Label).ToList();

            Console.WriteLine("Picklist Sorted Option Array:");
            foreach (OptionMetadata optionMeta in sortedPicklistOptionList)
            {
                Console.WriteLine(optionMeta.Value + " : " + optionMeta.Label.UserLocalizedLabel.Label);
            }

            //Create the request.
            OrderOptionRequest orderPicklistOptionRequest = new OrderOptionRequest
            {
                AttributeLogicalName = "new_testpicklist",
                EntityLogicalName = "new_testentity",
                Values = sortedPicklistOptionList.Select(X => X.Value.Value).ToArray()
            };
            Console.WriteLine("orderPicklistOptionRequest Created.");

            //Execute Request.
            OrderOptionResponse orderPicklistResponse = (OrderOptionResponse)crmService.Execute(orderPicklistOptionRequest);
            Console.WriteLine("Order Picklist Request Executed");


            //Publish All.
            Console.WriteLine("Publishing. Please Wait...");
            PublishAllXmlRequest publishRequest = new PublishAllXmlRequest();
            crmService.Execute(publishRequest);
            Console.WriteLine("Done.");

            Console.ReadLine();

        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...