При возникновении необходимости расширения стандартного функционала Microsoft Dynamics 365, есть возможность создания собственных сообщений (событий) системы, на которые можно подписывать плагины. Рассмотрим полный процесс создания кнопки на риббоне, вызывающей наше событие, обрабатываемое плагином.

Заходим в решения проекта.

CRM Solutions

CRM Solutions

Выбираем созданное решение OMS.

Select CRM Solution

Select CRM Solution

Заходим во вкладку процессы и нажимаем кнопку «Создать».

Create Process

Create Process

Вводим название процесса, выбираем категорию «Действие» и сущность, с которой мы хотим связать сообщение и нажимаем кнопку «ОК».

Enter process name

Enter process name

В открывшимся окне настройки процесса можно указать аргументы сообщения. Создадим один выходной строковый параметр. Нажимаем кнопку «Сохранить и закрыть».

Enter process properties

Enter process properties

Теперь нам нужно в окне процессов решения выбираем созданный нами процесс нажимаем кнопку «Активировать», подтверждаем активацию и публикуем изменения.

Public process

Public process

Confirm Activation Process

Confirm Activation Process

Теперь нужно зарегистрировать плагин на созданное нами событие. Подробнее о создании и регистрации плагинов вы можете прочитать в статье Создание Plug-in для Microsoft Dynamic 365. Для этого воспользуемся утилитой Plugin Registration Tool. Зарегистрируем плагин и добавим новый шаг на созданное нами сообщение.

Register Plugin

Register Plugin

Теперь нам необходимо настроить создание сообщения в системе. Для этого нам нужно воспользоваться библиотекой process.js.

/// <reference path="../../lib/process_2_0.js"/>

function foo() {
    Process.callAction(
        "oms_CaseExtraBtnClick",
        [
            {
                key: "Target",
                type: Process.Type.EntityReference,
                value: new Process.EntityReference("oms_case", Xrm.Page.data.entity.getId())
            }
        ],
        function (params) {
            var result = params["Random"];
            alert(result);
        },
        function (error, trace) {
            alert(error);

            if (window.console && console.error) {
                console.error(error + "\n" + trace);
            }
        }
    );
}

Кроме того, создадим элементарный плагин, который будет реагировать на наше сообщение, генерировать случайное число и возвращать его в выходной параметр.

using System;
using Microsoft.Xrm.Sdk;

namespace Crm.Shvanov.OmsPlugin
{
    /// <summary>
    /// Данный плагин выполняет генерацию случайного числа.
    /// </summary>
    /// <remarks>
    /// Данный плагин регистрируется на сообщение oms_CaseExtraBtnClick, сущности oms_case, состояние pre-operation.
    /// </remarks>
    public class RandomPlugin : IPlugin
    {
       /// <summary>
       /// Метод Execute вызывается конвейером выполнения события при обработке запроса сообщения, для которого был зарегистрирован подключаемый модуль.
       /// </summary>
       /// <param name="serviceProvider">Контейнер для объектов обслуживания.</param>
       public void Execute(IServiceProvider serviceProvider)
       {
           // Получить контекст выполнения от поставщика услуг.
           IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));

           // Получить сервис трассировки.
           ITracingService tracing = (ITracingService)serviceProvider.GetService(typeof(ITracingService));

           var rnd = new Random();
           var value = rnd.Next(0, 100).ToString();
           if (context.OutputParameters.Contains("Random"))
           {
                context.OutputParameters["Random"] = value;
           }
           else
           {
                context.OutputParameters.Add("Random", value);
           }

           tracing.Trace($"{nameof(RandomPlugin)}: Создано новое случайное число [{value}]");
       }
    }
}

Теперь нам осталось только создать кнопку на ленте-меню и привязать к ней скрипт генерации сообщения. Подробнее как это можно сделать можно прочитать в статье Добавление кнопки на меню-ленту (риббон) Microsoft Dynamic 365

Add Ribbon Command

Add Ribbon Command

Add Ribbon Button

Add Ribbon Button

В результате получаем следующее поведение:

Message Result

Message Result

 
×
%d такие блоггеры, как: