WedX - журнал о программировании и компьютерных науках

Плагин CRM: рассчитать значение поля как разницу между двумя другими полями

У меня 36 полей, выровненных по 3 строки, поэтому у меня 12 строк. Для каждой строки мне нужно построить field3 как разницу между field1 - field2. Эту операцию необходимо повторить для каждой строки. Моя трудность заключается в том, что я новичок в мире CRM и не могу найти решение или руководство. Прикрепляю небольшую схему и мой текущий код. Кроме того, все поля имеют разные имена, схема должна иметь представление. Я даже не могу искать тип, потому что они все одного типа.

Схема:

field1   field2    field3 = field1-field2
field4   field5    field6 = field4-field5
field7   field8    field9 = field7-field8
etc.

Код:

public class BudgetingOnChangeUpdateOffset : IPlugin
{
    public void Execute(IServiceProvider serviceProvider)
    {
        ITracingService tracingService =
            (ITracingService)serviceProvider.GetService(typeof(ITracingService));

        IPluginExecutionContext context = (IPluginExecutionContext)
            serviceProvider.GetService(typeof(IPluginExecutionContext));

        if (context.InputParameters.Contains("Target") &&
            context.InputParameters["Target"] is Entity)
        {
            Entity entity = (Entity)context.InputParameters["Target"];

            if (entity.LogicalName != "budgeting")
                return;

            IOrganizationServiceFactory serviceFactory =
                (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
            IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);

            try
            {
                var budget = (Money)entity.Attributes["budget"];
                var consumptive = (Money)entity.Attributes["cons"];
                var offset = budget.Value - consumptive.Value;
                entity.Attributes["offset"] = offset;

                service.Update(entity);
            }
            catch (Exception ex)
            {
                tracingService.Trace("MyPlugin: {0}", ex.ToString());
                throw;
            }
        }
    }
}
13.07.2018

Ответы:


1

Несколько мыслей:

(1) Когда подключаемый модуль запускается на этапе обновления, он отправляет только то поле, которое активировало подключаемый модуль. Чтобы получить дополнительные поля, вы можете либо передать их через изображение, которое вы настраиваете на этапе плагина, либо выполнить извлечение, чтобы получить нужные столбцы.

В приведенном здесь коде кажется, что вам нужно получить значения полей, для которых вы выполняете вычисления.

Если вы используете этот плагин при создании, вы можете либо использовать пост-изображение со всеми полями, либо выполнить отдельную операцию извлечения, чтобы получить все поля. (Шаги создания не могут использовать предварительный образ, поскольку запись еще не создана в базе данных)

Для получения дополнительной информации о пре- и пост-изображениях см.:

Использование изображений сущности до/после публикации в динамике Подключаемый модуль CRM

Предварительное изображение и последующее изображение в подключаемых модулях Dynamics crm: расширенные концепции подключаемых модулей, часть 1

(2) Мне нравится создавать и отлаживать логику моего плагина в консольном приложении, прежде чем использовать его в плагине. Чтобы подключить консольное приложение к CRM, используйте экземпляр класса CrmServiceClient, который находится в Пакет XrmTooling NuGet.

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

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

(4) Это выходит за рамки этого ответа, но вы также можете изучить концепции «ранней» и «поздней» разработки в Dynamics 365. На этой странице есть некоторая информация об этом.

13.07.2018

2

Это выглядит прямо вперед.

1. Зарегистрируйте этот шаг плагина на этапе Pre-Operation, удалите строку service.Update(entity);. Следующие строки кода позаботятся о вычислении разницы между двумя полями и поместят ее в третье поле по мере необходимости в том же конвейере выполнения (обновление базы данных). Нет необходимости в дополнительном вызове обновления.

var budget = (Money)entity.Attributes["budget"];
var consumptive = (Money)entity.Attributes["cons"];
var offset = budget.Value - consumptive.Value;
entity.Attributes["offset"] = offset;

var field4 = (Money)entity.Attributes["field4"];
var field5 = (Money)entity.Attributes["field5"];
var field6 = field4.Value - field5.Value;
entity.Attributes["field6"] = field6;

2. Выберите только field1, field2, field4, field5 в качестве атрибутов фильтрации на этапе плагина, чтобы плагин срабатывал только при обновлении этих полей, а не во всех полях.

Как объяснил Арон, зарегистрируйте значения PreImage, чтобы получить все необновленные поля для расчета в плагине.

13.07.2018
Новые материалы

Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

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

Объяснение документов 02: BERT
BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..


Для любых предложений по сайту: [email protected]