Взаимодействие с объектной моделью Workflow
Основные объекты, которыми оперирует функция сценария, — это внутренние объекты сервиса СУБП, специфические для исполняемого процесса. К ним относятся переменные процесса, шлюзы, журнал процесса и др. Необходимые типы данных собраны в пространстве имён DocsVision.Workflow.Runtime.
Главный способ получения данных бизнес-процесса — это обращение к соответствующим свойствам объекта типа ProcessInfo
, который содержит данные о текущем процессе:
-
Коллекция шлюзов, доступных процессу.
-
Коллекция переменных процесса.
-
Ссылка на справочники.
-
Ссылка на карточку процесса.
-
Журнал процесса.
ProcessInfo
содержит методы:-
Получение шлюза с указанным именем.
-
Получение переменной с указанным именем.
-
Запись информационного сообщения в журнал процесса.
Экземпляр данного класса выступает в качестве входного параметра функции сценария.
Работа со шлюзами
Коллекция шлюзов процесса (переменная ProcessInfo.Gates
) содержит типизированные экземпляры серверных классов шлюзов, реализующих общий интерфейс IGate
. Для получения конкретного шлюза из коллекции, необходимо знать его название или тип.
Тип шлюза (уникальный идентификатор) задаётся в процессе его разработки и в дальнейшем не должен изменяться. |
Для организации взаимодействия с объектами внешней системы сценарий может общаться с этой системой напрямую (при помощи её собственного API), либо с помощью шлюза, который может содержать вспомогательные классы для работы с каждым из объектов внешней системы.
Например, при работе со Справочником сотрудников разработчик сценария может работать напрямую с данными справочника, либо использовать соответствующие объекты шлюза к Docsvision. Однако чаще всего объекты шлюза служат внутренним целям (для организации работы стандартных функций), и могут не иметь всех свойств и методов по сравнению с API Docsvision. Поэтому по возможности, рекомендуется работать с внешней системой через API Docsvision.
public void Execute (ProcessInfo process, PassState passInfo)
{
DVGate dvGate = (DVGate)process.Gates[DVGate.GateID]; (1)
UserSession userSession = dvGate.UserSession; (2)
CardData data = userSession.CardManager.GetCardData(new Guid("00000000-0000-0000-0000-000000000000")); (3)
// ...
}
1 | Получение шлюза к Docsvision. |
2 | Получение сессии для доступа к API. |
3 | Получение данных карточки с идентификатором 00000000-0000-0000-0000-000000000000. |
public void Execute (ProcessInfo process, PassState passInfo)
{
UserSession userSession = process.Session; (1)
// ...
}
1 | Получение сессии процесса. |
Работа с переменными
Переменные процесса могут быть получены из переменной ProcessInfo.Variables
, которая содержит объекты типа ProcessVariable
.
-
Уникальный идентификатор переменной, её название, тип и значение.
-
Отображаемое значение объекта, хранящегося в переменной.
-
Идентификатор шлюза, которому принадлежит переменная.
-
Коллекция строчных значений (для переменных типа "Перечисление").
При работе с переменными простых типов ("Строка", "Целое", "Дробное" и др.), значение переменной может быть получено непосредственно из свойства ProcessVariable.Value
. Для прочих типов (переменные шлюзов) в качестве значения переменной будет возвращена ссылка на соответствующий типизированный объект шлюза:
ProcessVariable varStr = process.GetVariableByName("ПростоСтрока");
string strValue = (string)varStr.Value; (1)
ProcessVariable varDoc = process.GetVariableByName("Карточка");
DVCard card = (DVCard)varDoc.Value; (2)
1 | Получение переменной простого типа (тип "Строка"). |
2 | Получение переменной, тип которой предоставлен шлюзом. |
Присвоение значений переменным выполняется аналогично: переменные простых типов получают непосредственное значение, тогда как шлюзовые переменные в качестве нового значения могут получать только объекты шлюза:
ProcessVariable varStr = process.GetVariableByName("ПростоСтрока");
varStr.Value = "Новое значение"; (1)
DVGate dvGate = (DVGate)process.Gates[DVGate.GateID]; (2)
ProcessVariable varDoc = process.GetVariableByName("Карточка"); (3)
varDoc.Value = dvGate.GetVariable((int)DVVariableType.DOCUMENT, "ID_карточки");
1 | Получение переменной простого типа (тип "Строка") и присвоение ей значения. |
2 | Получение шлюза к Docsvision. |
3 | Получение переменной, тип которой предоставлен шлюзом, и присвоение ей значения. |