Создание пользовательского действия бизнес-процесса

  • Автор: Толмачев Дмитрий
  • Организация: Программные технологии
  • Применимо: bpm'online 7.x / 5.x
  • Дата: 15.05.2015

История одного действия

В данной статье речь пойдет о создании пользовательского действия бизнес-процесса на основе уже существующего. Думаю, что все знакомы с таким замечательным действием БП как «Выполнить задачу» (рис. 1), который позволяет настроить создание активности и поднять карточку.

1

Рис.1 http://take.ms/K3T3i

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

2

Рис.2 http://take.ms/zP5L0

К сожалению его использование ранее прекращалось, как только в активность добавлялось новое поле, которое необходимо динамически заполнять в БП. А такая ситуация случалась чуть чаще чем постоянно.

Вместо этого приходилось придумывать разного рода конструкции вида:

1) Использование страницы редактирования

3

Рис 3. http://take.ms/2VBdo

2) Использование промежуточного сигнала на изменение активности

4

Рис 4. http://take.ms/OKNVH

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

Решение

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

• ActivityUserTask / Выполнить задачу [Действие]

• ActivityUserTaskParametersEditPage / Страница редактирования параметров действия «Выполнить задачу»

К сожалению, не найдя способа заместить действие решил воспользоваться старым добрым экспорт/подмена UId/импорт. Экспортировав схему ActivityUserTask заменил (везде) в ней 3 интересующие меня значения

• Название схемы: ActivityUserTask -> SmrActivityUserTask

• Заголовок: Выполнить задачу -> Выполнить настраиваемую задачу

• UId: b5c726f2-af5b-4381-bac6-913074144308 -> b5c726f2-af5b-4381-bac6-913074144309 [!]

[!] Обязательно стоит проверить на существование данный UId в таблицe SysSchema. В случае совпадения наша новая схема заменит уже существующую при импорте. Далее импортируем действие в свой пакет (я предпочитаю хранить пользовательские действия в отдельном пакете)

5

Рис 5. http://take.ms/83Tjj

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

Для удобства также создадим свою страницу редактирования на базе старой: «Добавить» -> «Страница». В качестве родительской выбирается:

• Страница редактирования параметров действия "Выполнить задачу"

6

Рис 6. http://take.ms/9sw5B

Предположим, что мы создали новый раздел «Обращение» / SmrCase и в активности добавили на него ссылку. Теперь мы хотим использовать это «Обращение» в нашем действии.

Настройка страницы

Добавим новое справочное поле на страницу:

1. Добавим «Поле параметра» в контейнер «Связи активности»

7

Рис 7. http://take.ms/Z9s1p

Свойства элемента: • Название: SmrCaseEdit • Подпись: Обращение • Тип данных: Справочник

2. Пропишем привязку поля к параметру действия (сам параметр создадим в действии чуть позже):

Необходимо на странице переопределить метод «GetActivityControlsBinding»

8

Рис 8. http://take.ms/uFEkh

    Dictionary string, Terrasoft.UI.WebControls. WebControl > customBinding = base .GetActivityControlsBinding();
    customBinding.Add( "SmrCase", Page.SmrCaseEdit);
    return customBinding;

Настройка Действия

Для начала привяжем действие к странице. Для этого в свойствах действия укажем

• Страница редактирования параметров = Страница редактирования параметров действия "Выполнить настраиваемую задачу"

Можно также указать свое изображение действия. Теперь необходимо дополнить логику нашего действия с учетом добавленного поля:

1) Добавим новый параметр в действие «SmrCase»

Название: SmrCase

Подпись: Обращение

Тип данных: Справочник

Справочник: Обращение

Схема: SmrCase

2) Изменить метод «CreateActivity», добавив обработку параметра SmrCase.

    var activity = new Terrasoft.Configuration.Activity(UserConnection);
    activity.SetDefColumnValues();
    // SmrCase
    var columnSmrCase = activity.Schema.Columns.FindByName( "SmrCase" );
    if (columnSmrCase != null && SmrCase != Guid .Empty)
    {
        activity.SetColumnValue(columnSmrCase, SmrCase);
    }
    //...

3) Изменить метод «CompleteExecuting», добавив обработку параметра SmrCase.

    var activity = parameters[0] as Terrasoft.Configuration.Activity;
    if (activity == null)
    {
        return false ;
    }
    // SmrCase
    var columnSmrCase = activity.Schema.Columns.FindByName( "SmrCase" );
    if (columnSmrCase != null)
    {
        object smrCase = activity.GetColumnValue(columnSmrCase);
        if (smrCase != null )
        {
            SmrCase = ( Guid)smrCase;
        }
    }
    //...

Добавить действие в список действий БП

В общем случае для использования, созданного нами действия можно воспользоваться элементом «Действие процесса» в свойствах которого указать:

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

Но если этот элемент используется действительно часто можно добавить его в общий список. Для этого необходимо зарегистрировать ее в БД. В общем случае достаточно прописать скрипт:

INSERT INTO [dbo] . [SysProcessUserTask] (
        [SysUserTaskSchemaUId] ,
        [IsQuickModel] ,
        [Caption]
        )
VALUES (
        (SELECT TOP 1 UId FROM SysSchema   WHERE ( Name = 'SmrActivityUserTask' )),
       1 ,
        'Настраиваемая задача' )
GO

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

Вот что у нас получается в результате:

9

Рис 9. http://take.ms/G2PDS

Теперь мы можем использовать свое собственное (настраиваемое!) действие для создания задачи.

Нравится

Поделиться

1 комментарий

Очень помогло. Спасибо!

Показать все комментарии