Расширенная функциональность
01
Сен
2

Запуска плагинов при связывании записей (N:N)

Если вы хотите, зарегистрировать плагина на событие связывания записей (N:N), то Вам необходимо повесить его на сообщение Associate.

Однако, при регистрации шага Вы не можете указать объекты, на связывание которые будет реагировать плагин. Поэтому фактически он будет срабатывать каждый раз при связывании двух записей (N:N). Но чтобы исключить выполнение бизнес-логики Вы должны сделать подобную проверку непосредственно в коде.

Например, при добавлении Роли безопасности какой-либо записи Пользователя, будет происходить добавление связи systemuserroles_association. И чтобы плагин срабатывал именно на нее нужно выполнить такой код:

using System;
using System.Diagnostics;
using System.Linq;
using System.ServiceModel;
using Microsoft.Xrm.Sdk;

namespace AssociatePlug_in
{
    public class AssociatePlugin : IPlugin
    {
        public void Execute(IServiceProvider serviceProvider)
        {
            IExecutionContext context = (IExecutionContext)serviceProvider.GetService(typeof(IExecutionContext));

            // Проверяем название связи в событие Associate
            if (context.InputParameters.Contains("Relationship") &&
                context.InputParameters["Relationship"].ToString() == "systemuserroles_association.") // Обязательно с точкой
            {
                throw new InvalidPluginExecutionException("Связь systemuserroles_association");
                
                // Нужная свзь - выполняем бизнес-логику
            }
            else
            {
                throw new InvalidPluginExecutionException("Другая связь");
                
                // Какая-то другая связь - прекращаем выполнение
                return;
            }
        }
    }
}



З.Ы. При добавлении записи в связь 1:N это всего лишь событие Create или Update с «другой стороны». Т.е. если Вы, например, добавляете к Организации Контакт с левой навигационной панели (т.е. по связи 1:N), то это Create (при добавлении новой записи) или Update (при добавлении существующей записи) для Контакта.

Комментарии (2)

*

code