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

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

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

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

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

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


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

Теперь нам необходимо настроить создание сообщения в системе. Для этого нам нужно воспользоваться библиотекой 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


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