Как создать действие Action и Call в MS Dynamics CRM? - PullRequest
0 голосов
/ 27 мая 2019

Как создать Действие шаг за шагом и Действие вызова в MS Dynamics CRM?Сколько способов вызвать действие в MS Dynamics CRM?В чем выгода действия вместо Workflow / плагина?

1 Ответ

1 голос
/ 28 мая 2019

Действия

Действия - это тип процесса в Microsoft Dynamics 365. Вы можете вызывать действия, включая настраиваемые действия, непосредственно из рабочего процесса или диалога, без написания кода!Дополнительные сведения: вызов пользовательских действий из рабочего процесса или диалогового окна

Действия также можно запускать, запустив пользовательский код, использующий веб-службы Microsoft Dynamics 365.

Вы можете вызывать действия:

Его можно вызывать как со стороны клиента, так и со стороны сервера, что позволяет использовать единую точку подхода (реализовать один раз, использовать где угодно), например: - из кода, который выполняется внутри плагина, пользовательского рабочего процесса и любого кода C #.Из команды, которая размещается в приложении и выполняет операцию с использованием кода JavaScript.Может получать входные параметры и возвращать выходные параметры прямым способом, аналогично веб-службе уровня организации Из интеграции с другой системой, использующей веб-службы Microsoft Dynamics 365.Из пользовательского клиентского приложения, использующего веб-службы Microsoft Dynamics 365.

Зачем использовать действия?

Действия открывают ряд возможностей для составления бизнес-логики.До действий основной способ реализации бизнес-процессов был ограничен подключаемыми модулями или пользовательскими операциями рабочего процесса.С помощью действий вы можете выполнять такие операции, как создание, обновление, удаление, назначение или выполнение действия.Внутренне действие создает настраиваемое сообщение Dynamics 365.С помощью Действия вы можете создать собственное сообщение (например, submitquote, leadtoax и т. Д. После того, как действие определено и активировано, разработчик может использовать это сообщение, как и любое другое сообщение, предоставляемое платформой Microsoft Dynamics 365.

Предположим, у вас есть кнопка в форме предложения, которая отправляет информацию из CRM на другую платформу (например, AX - другая платформа).

Создание и активация настраиваемого действия (Настройки> Процесс)

enter image description here

Теперь вы можете вызывать это действие (ofs_submitquotetoax) из JavaScript для некоторого события (OnLoad, OnSave и т. Д.). В этом примере я вызываю действие изКнопка SUBMIT QUOTE в форме котировки, которая отправляет информацию о котировке в другую систему (AX).

enter image description here

 // Call this below method from Button click event or from any event on the form

// For Alert.showLoding method you can see another Alert.js library

// For Process.callAction method you can see another Process.js library

// You can download Alert.js & Process.js from this Path: https://drive.google.com/drive/folders/0B2CUbevE8v9YMkZlMEhUZ3NJc1U 



function submitquote() {

    var actionName = "ofs_submitquoteax";

    var entityName = Xrm.Page.data.entity.getEntityName();

    var entityId = Xrm.Page.data.entity.getId();



    Alert.showLoading("Submitting...", 400, 150);

    var inputParams = [

                      {

                          key: "EntityRef", type: Process.Type.EntityReference,

                          value: new Process.EntityReference(entityName, entityId)

                      }

    ];

    // call process callection method

    Process.callAction(actionName, inputParams, cloneSuccessCallback, errorCallback);

}



function cloneSuccessCallback() {



    Alert.hide();

    Alert.show("Action Success", "", null, "SUCCESS");

    Alert.hide();

    var entityName = Xrm.Page.data.entity.getEntityName();

    var entityId = Xrm.Page.data.entity.getId();

    Xrm.Utility.openEntityForm(entityName, entityId);

    //Xrm.Page.data.refresh();

}



function errorCallback(error, trace) {

    alert(error);

    alert(alert(error));

}

e, для этого события вы можете зарегистрироваться ивызвать плагин и получить входной параметр (в нашем случае мы отправляем ключ входного параметра как EntityRef, в который мы отправляем entityName и entityId.

Parameters: Уникальное имя действия, входные параметры (массив), обратный вызов успеха (функция), обратный вызов ошибки (функция), базовый URL CRM (не требуется для форм / представлений)

Каждый объект входных параметров должен содержать ключ, значение,и введите.Типы определяются перечислением Process.Type.Значения EntityReference должны быть объектом, содержащим id и entityType.

Функция успешного обратного вызова должна принимать один аргумент, который представляет собой массив выходных параметров, каждый из которых содержит ключ и значение.

YouВы можете написать плагин ниже и получить доступ к входному параметру

protected override void ExecuteCrmPlugin(LocalPluginContext localContext)

    {   // Register the plugin in PreValidation stage as this plugin will trigger from Javascript (Action)

        if (localContext == null)

        {

            throw new InvalidPluginExecutionException("localContext");

        }



        IPluginExecutionContext context = localContext.PluginExecutionContext;

        if (context.Depth > 1) { return; }



        IOrganizationService service = localContext.OrganizationService;

        ITracingService trace = localContext.TracingService;



        Entity quoteEntity = null;

        EntityReference qEntity = null;



        if (context.InputParameters.Contains("EntityRef") && context.InputParameters["EntityRef"] is EntityReference)

        {

            //if (context.PrimaryEntityName.ToLower() != "quote") { return; }

             qEntity = context.InputParameters["EntityRef"] as EntityReference;



            if (qEntity.LogicalName.ToLower().Equals("quote"))

            {                 

                try

                {

                    quoteEntity = service.Retrieve("quote", qEntity.Id, new ColumnSet("ofs_parentaccountid", "quotenumber", "revisionnumber", "ofs_well"));

              // Execute Your logic

                }

                catch (Exception ex)

                {

                    trace.Trace(string.Format("Exception Quote_Create_AXIntegration Plugin: {0}", new[] { ex.ToString() }));

                }

            }

        }

        else { return; }

    }

Зарегистрируйте свой плагин и затем зарегистрируйте шаг следующим образом, вы можете заметить свое имя сообщения на скриншоте ниже "ofs_submitquoteax";

enter image description here

Ссылка: https://community.dynamics.com/crm/b/mylifemicrosoftdynamiccrm/archive/2017/04/17/microsoft-dynamics-crm-actions

...