Подписка на события шлюза
Workflow предоставляет разработчикам механизм формирования подписок на определённые события шлюза, к примеру, если функция должна продолжить работу, только после разблокировки определённой карточки.
Механизм формирование подписок и сообщений
Шлюз, чей серверный компонент реализует специальный интерфейс IGateMessageSource
(сборка DocsVision.Workflow.Interfaces.dll
), предоставляет канал для формирования подписок. Доступ к нему может быть получен через публичное свойство шлюза — SubscriptionChannel
(тип ISubscriptionChannel
), к примеру так:
DVGate dvGate = (DVGate)process.Gates[DVGate.GateID]; (1)
SubscriptionChannel subscriptionChannel = dvGate.SubscriptionChannel; (2)
1 | Получение шлюза к Docsvision. |
2 | Получение канала подписок. |
После получения канала подписок, разработчик может выполнить подписку на определённое событие, например, подписаться на событие разблокировки определённой карточки Docsvision:
subscriptionChannel.Subscribe((int)DocsVisionSubscriptionType.ObjectUnlock, process.ID, passInfo.FunctionID, cardId); (1)
1 | cardId — идентификатор карточки, у которой ожидается разблокировка. |
Метод Subscribe
принимает (по порядку передачи параметров):
-
Тип ожидаемого события шлюза. Список событий индивидуален для каждого шлюза (см. далее по тексту), который в дальнейшем отвечает за обработку подписок, а также генерирует сообщения для функций, осуществивших подписку.
-
Идентификатор процесса (бизнес-процесса), который подписывается на события. Этот процесс должен получить сообщение о наступлении события шлюза.
-
Идентификатор функции, которая выполняет подписку на событие.
Также может быть передан (как в примере) дополнительный параметр (с типом Guid
или String
), тип и значение которого зависит от типа ожидаемого события шлюза (см. далее).
Если функция выполняет подписку на событие, то об этом необходимо проинформировать Workflow, вернув значение ExecResultEnum.WaitForMessage
.
После подписки на событие, функция переходит в режиме ожидания и активируется при появлении сообщения соответствующего типа.
-
Менеджер процессов (часть
ExecLogic
) вызывает методExecute
текущей функции (к примеру, Функции N), которая должна быть запущена. -
Функции N, если это необходимо, оформляет подписку на событие в определённом шлюзе (к примеру, Шлюз T), посредством вызова метода
Subscribe
, и возвращает значениеExecResultEnum.WaitForMessage
. -
Шлюз T, проверяет наличие подписок в своем хранилище (например, в базе данных) и организует проверку наступления соответствующего события.
-
При наступлении события Шлюз T добавляет сообщение для Функции N, через вызов метода
SendMessage
. Сообщение добавляется в очередь сообщений конкретного процесса. -
Менеджер процессов проверяет очередь сообщений и, в случае наличия сообщения для Функции N, вызывает метод
Execute
Функции N.
Схематично данный сценарий можно представить следующим образом:

События шлюза к Docsvision
Шлюз к Docsvision разрешает подписку на следующие события (см. описание DocsVisionSubscriptionType
):
-
CardChange
— изменение заданной карточки. При вызовеSubscribe
необходимо передать (четвертый параметр) идентификатор отслеживаемой карточки. -
AnyCardChange
— изменение любой карточки заданного типа. При вызовеSubscribe
необходимо передать (четвертый параметр) идентификатор типа отслеживаемых карточек. -
ObjectUnlock
— разблокировка заданной карточки. При вызовеSubscribe
необходимо передать (четвертый параметр) идентификатор соответствующей карточки. -
ObjectLock
— блокировка заданной карточки. При вызовеSubscribe
необходимо передать (четвертый параметр) идентификатор соответствующей карточки.
События шлюза к файловой системе
Шлюз к файловой системе обеспечивает возможность подписки на события (см. описание FSSubscriptionType
):
-
NewFileInFolder
— добавление файла в указанную папку. При вызове Subscribe необходимо передать (четвертый параметр) сериализованный (XML-сериализация) объект типаFSSubscriptionInfo
— параметры подписки. -
FileChange
— изменение указанного файла. При вызове Subscribe необходимо передать (четвертый параметр) сериализованный объект типаFSSubscriptionInfo
.
События шлюза к почтовой системе
Шлюз к почтовой системе обеспечивает возможность подписки на события (см. описание MailSubscriptionType
):
-
NewMessage — поступление нового сообщения. При вызове Subscribe необходимо передать (четвертый параметр) сериализованный объект типа
MailFilter
— фильтр для новых сообщений. -
MessageWithSubstringInSubject
— поступление нового сообщения с заданным тестом в заголовке письма. При вызовеSubscribe
необходимо передать (четвертый параметр) текст, который должен содержаться в заголовке ожидаемого письма.
Подписка на события шлюзов функциями приложения Workflow
Некоторые функции приложения Workflow используют подписку в своей работе. Ниже приведён полный список функций приложения Workflow, а также события, на которые они могут быть подписаны. Конкретный тип события, на которое подписывается функция, может зависеть от её конкретных настроек.
Функция | События, на которые возможна подписка |
---|---|
Базовые функции: |
|
Начальная функция |
Не подписывается. |
Конечная функция |
Не подписывается. |
Объединение |
Не подписывается, но может ожидать завершения другой функции. |
Объединение |
Не подписывается. |
Разветвление |
Не подписывается. |
Подпроцесс |
Не подписывается, но ожидает завершения другого подпроцесса. |
Условие |
Не подписывается. |
Счетчик |
Не подписывается. |
Обработка коллекции |
Не подписывается. |
Удаление объекта |
Не подписывается, но ожидает завершения удаления объекта. |
Сценарий |
Может подписываться на любые события шлюзов, если это реализовано разработчиком. |
Обмен данными между переменными |
Не подписывается. |
Расписание |
Подписывается на событие от таймера (Шлюз к простым типам). |
Универсальный обмен данными |
Не подписывается, но ожидает завершения обмена. |
Универсальная функция |
Может подписываться на любые события шлюзов, если это реализовано разработчиком выбранной функции. |
Обработчик ошибок |
Не подписывается. |
Функции шлюза к Docsvision: |
|
Мониторинг Docsvision |
Может подписываться на изменение определённой карточки, либо карточек определённого типа. |
Задание |
Может подписываться на поступление письма (Шлюз к почтовой системе), на событие от таймера (Шлюз к простым типам), на изменение или разблокировку карточек. |
Управление заданием |
Не подписывается, но остается активным, если карточка заблокирована. |
Ярлык |
Не подписывается. |
Функция рассылки согласований |
Может подписываться на разблокировку карточки, поступление письма (Шлюз к почтовой системе), а также ожидать завершения подпроцесса. |
Функция рассылки заданий |
Может подписываться на разблокировку карточки, а также ожидать завершения подпроцесса. |
Задание 5 |
Может подписываться на поступление письма (Шлюз к почтовой системе), на событие от таймера (Шлюз к простым типам), на изменение или разблокировку карточек. |
Параллельное задание |
Может подписываться на разблокировку родительской и связанных карточек, а также ожидать завершения подпроцесса. |
Последовательное задание |
Может подписываться на разблокировку родительской и связанных карточек, а также ожидать завершения подпроцесса. |
Функции шлюза к файловой системе: |
|
Мониторинг файловой системы |
Может подписываться на появление нового файла и изменение файла. |
Функции шлюза к почтовой системе: |
|
Мониторинг сообщений |
Может подписываться на появление нового сообщения (и сообщения с определённой темой). |
Сообщения задания 5 |
Может подписываться на появление нового сообщения, а также на изменение и разблокировку конкретного задания или всех карточек типа задание. |