DocsVision 4.5 Руководство разработчика в среде СУБП

advertisement
DocsVision 4.5
Руководство разработчика
в среде СУБП
Пособие для партнёров DocsVision
3Copyright © DocsVision, 2002–2010. Все права защищены
v.4.5.0
СОДЕРЖАНИЕ
Введение ............................................................................................................... 4
1
2
Общее описание СУБП .................................................................................... 4
1.1
Бизнес-процесс ............................................................................................ 4
1.2
Переменные процесса .................................................................................. 5
1.3
Функции ...................................................................................................... 5
1.4
Шлюзы ........................................................................................................ 6
Программные компоненты СУБП ................................................................... 6
2.1
Шлюзы ........................................................................................................ 6
2.1.1
Клиентский компонент шлюза ................................................................. 6
2.1.2
Серверный компонент шлюза .................................................................. 7
2.2
Функции ...................................................................................................... 8
2.2.1
Клиентский компонент функции .............................................................. 8
2.2.2
Серверный компонент функции .............................................................. 9
2.3
Сценарии..................................................................................................... 9
2.3.1
Разработка сценариев .......................................................................... 10
2.3.2
Объектная модель сценариев ................................................................ 10
2.3.2.1
Работа со шлюзами ........................................................................ 11
2.3.2.2
Работа с переменными ................................................................... 11
2.3.3
Отладка сценариев .............................................................................. 12
2.3.4
Сохранение сценариев в сборку и подключение сборок.......................... 13
Приложение 1: Описание стандартных интерфейсов ............................................. 16
IObjectUI ......................................................................................................... 16
IDVObjectUI ..................................................................................................... 16
IObjectLocalize ................................................................................................. 16
IGateInit .......................................................................................................... 16
IGateUI ........................................................................................................... 16
IFunctionUI ...................................................................................................... 17
IExportableFunctionUI ....................................................................................... 18
IStateFunctionUI ............................................................................................... 18
IGate .............................................................................................................. 18
IGateVariable ................................................................................................... 19
IGateVariableCustomProperties .......................................................................... 20
ICollectionalProperty ......................................................................................... 20
ILockalableObject ............................................................................................. 20
IFunction ......................................................................................................... 21
Приложение 2: Объектная модель карточек СУБП ................................................. 22
Library ............................................................................................................ 23
Dictionary ........................................................................................................ 24
DocsVision 4.5: Руководство разработчика в среде СУБП
2
DictGate .......................................................................................................... 24
DictFunction ..................................................................................................... 24
Process ............................................................................................................ 24
Gate ................................................................................................................ 25
ProcFunction .................................................................................................... 26
PassState ......................................................................................................... 26
Constraint ........................................................................................................ 26
DocType .......................................................................................................... 27
Link................................................................................................................. 27
LogMessage ..................................................................................................... 27
Variable ........................................................................................................... 28
EnumValue ...................................................................................................... 28
LogValue.......................................................................................................... 28
Перечисления.................................................................................................. 29
ProcessStateEnum ......................................................................................... 29
TemplateStateEnum....................................................................................... 29
FuncStateEnum ............................................................................................. 29
LinkTypeEnum .............................................................................................. 29
ActionTypeEnum............................................................................................ 29
VarTypeEnum ............................................................................................... 29
Приложение 3: примеры сценариев...................................................................... 30
Получение ФИО пользователя ....................................................................... 30
Получение заместителя пользователя ............................................................ 30
Получение URL-ссылки на карточку ............................................................... 31
Перемещение ярлыка карточки ..................................................................... 32
Удаление унаследованных прав на карточку .................................................. 33
DocsVision 4.5: Руководство разработчика в среде СУБП
3
ВВЕДЕНИЕ
Настоящий документ предназначен для системных аналитиков и разработчиков,
использующих платформу DocsVision и приложение «Управление процессами» для
создания дополнительных функций, сценариев, шлюзов и других объектов системы,
расширяющих её функциональные возможности по реализации специфичных бизнеспроцессов.
Документ освещает следующие вопросы:

правила разработки пользовательских функций и шлюзов;

правила разработки, отладки и использования сценариев;

описания интерфейсов, свойств и методов объектов системы;

примеры кода.
Документ содержит следующие разделы:

раздел 1 «Общее описание СУБП» посвящён общему описанию бизнеспроцессов, переменных процесса, функций и шлюзов;

раздел 2 «Программные компоненты СУБП» содержит правила построения
шлюзов, функций, создания и отладки сценариев;

раздел Error! Reference source not found. «Error! Reference source not
found.» посвящён описанию стандартных интерфейсов, объектной модели
карточек СУБП, шлюза к файловой системе и шлюза к DocsVision.
Перед использованием данного руководства рекомендуется ознакомиться с
документом «Руководство пользователя DocsVision», раздел «Управление процессами»;
а также “Руководством разработчика на платформе DocsVision”.
1
ОБЩЕЕ ОПИСАНИЕ СУБП
Платформа DocsVision и приложение «Управление процессами» (далее – СУБП)
представляют собой систему описания сложных процессов обработки информации в
организации и полнофункциональный Workflow-сервер. СУБП является решением на
основе платформы DocsVision, предназначенным для создания бизнес-процессов любой
сложности и управления ими.
СУБП может быть установлена автономно (отдельно от сервера DocsVision), либо
совместно с ним. Автономная установка подразумевает наличие выделенного сервера,
на котором будут работать сервисы СУБП. При этом необходимо также наличие сервера
DocsVision, предназначенного для хранения данных.
Ключевыми объектами в терминологии
переменные процесса, функции и шлюзы.
1.1
СУБП
являются
бизнес-процесс,
БИЗНЕС-ПРОЦЕСС
Бизнес-процесс представляет собой формальное описание бизнес-процесса
организации. Формальное описание строится из набора атомарных операций
(функций), составляющих процесс, и связей между ними, определяющих порядок
выполнения операций. Функции процесса оперируют данными внешних систем с
помощью шлюзов и обмениваются ими через переменные процесса.
Процесс должен обязательно включать в себя специальную функцию,
инициирующую выполнение процесса, а также одну или несколько функций,
завершающих выполнение процесса. Остальные функции могут быть связаны между
собой произвольным количеством связей, которые определяют порядок их выполнения
в процессе. Возможно наличие в процессе циклов, условных и безусловных переходов.
Физически бизнес-процесс состоит из набора данных, хранящихся в БД DocsVision,
набора свойств и методов для операций с этими данными и карточки бизнес-процесса –
DocsVision 4.5: Руководство разработчика в среде СУБП
4
карточки DocsVision,
данными процесса.
1.2
реализующей
пользовательский
интерфейс
для
управления
ПЕРЕМЕННЫЕ ПРОЦЕССА
Переменные процесса являются субъектами, которыми оперируют функции
процесса, обеспечивая единый способ обмена информацией между функциями
процесса.
Каждая переменная имеет уникальный идентификатор (в формате строки),
позволяющий отличить её от остальных переменных бизнес-процесса: имя, значение
(величину или набор данных, которые характеризуют переменную) и отображаемое
значение, которое может как соответствовать значению, так и характеризовать
переменную для пользователя более явным образом. Например, для переменной,
представляющей карточку DocsVision, значением является идентификатор карточки, а
отображаемым значением – её название.
ПРИМЕЧАНИЕ
Имена переменных в бизнес-процессе являются регистро-зависимыми.
Все переменные являются строго типизированными. К стандартным (системным)
типам переменных относятся следующие типы:

String – строка;

Integer - целое число;

Double – число с плавающей точкой;

Boolean – булевское значение;

DateTime – дата и время;

Перечисление – при формировании шаблона процесса можно описать поля
типа перечисления и задать все возможные значения. Все значения
перечисления в процессе – строковые.
Кроме этих стандартных типов, в процесс могут быть добавлены переменные
шлюзов. Каждый зарегистрированный в системе шлюз поставляет собственные типы
переменных.
Автоматического преобразования типов не предусмотрено. Для преобразования
экземпляра переменной из одного типа в другой (если таковое возможно) необходимо
использовать специальные функции, либо воспользоваться сценарием.
1.3
ФУНКЦИИ
Описание процесса содержит набор принадлежащих ему функций, настройки их
свойств (свойства функции могут быть проинициализированы как непосредственным
заданием значения, так и некой переменной процесса) и описание связей между
функциями. Каждая функция имеет собственный набор данных (обычно - в формате
XML), отображающих настройки функции и любые дополнительные данные.
Функции и связи между ними могут иметь собственные названия и описания для
улучшения читаемости бизнес-процесса.
Экземпляры каждой функции могут выполняться как параллельно (при установке
соответствующего свойства), так и последовательно, что означает использование одних
и тех же данных для выполнения функции при ее повторном запуске (например, в
циклах). Последовательное выполнение экземпляров функции подразумевает, что её
повторный запуск не будет произведен, пока не будет завершено исполнение
предыдущего экземпляра.
Функция может быть как независимой (выполняться без взаимодействия с
внешними системами), так и привязанной к одной или нескольким внешним системам
DocsVision 4.5: Руководство разработчика в среде СУБП
5
при помощи шлюзов. Привязка к шлюзам декларируется функцией на программном
уровне и проверяется на этапе добавления функции в процесс.
1.4
ШЛЮЗЫ
Шлюз
представляет
собой
совокупность
программных
компонент,
предназначенных для обеспечения взаимодействия СУБП с внешними системами.
Основными функциями шлюза являются:

обмен данными между прикладной системой и СУБП;

маршрутизация ссылки на объект прикладной системы в функциях СУБП;

специализированная обработка прикладного объекта в рамках процесса.
Шлюзы также предоставляют свой набор типов переменных, которыми можно
оперировать в СУБП наряду с обычными переменными. Под типами переменных
подразумеваются все возможные виды объектов, которыми может оперировать шлюз.
Например, шлюз к файловой системе оперирует двумя типами объектов – файлами и
папками файловой системы. Соответственно, данный шлюз предоставляет бизнеспроцессам два типа переменных – Папка файловой системы и Файл файловой системы.
Выбор механизма использования уникальных значений и отображаемых значений
переменных, поставляемых конкретным шлюзом, выбирается разработчиком шлюза.
Например, в рассмотренном выше шлюзе к файловой системе, в качестве уникальных
значений используются полные физические пути к файлам и папкам, а в качестве
отображаемых значений – их частичные имена.
2
ПРОГРАММНЫЕ КОМПОНЕНТЫ СУБП
2.1
ШЛЮЗЫ
Пользовательские шлюзы разрабатываются как дополнение к системе управления
бизнес-процессами при решении задач интеграции СУБП с внешними системами,
взаимодействие с которыми не предусмотрено в стандартной поставке DocsVision. К
таким системам можно отнести сторонние системы документооборота, EPR-системы,
бухгалтерские системы и прочие.
Все пользовательские шлюзы заносятся в справочник шлюзов. После занесения в
справочник шлюз становится доступен в объектной модели и в карточке бизнеспроцесса.
Реализация пользовательского шлюза включает в себя, как минимум, два
основных компонента:

клиентский компонент, реализующий
отображения и выбора объектов шлюза;
пользовательский
интерфейс
для

серверный компонент, работающий в рамках сервиса СУБП и реализующий
программный интерфейс для работы с объектами шлюза.
Каждый шлюз имеет собственный уникальный идентификатор, задаваемый на
этапе разработки. Этот идентификатор заносится в справочник и используется в
дальнейшем для обеспечения уникальности шлюзов в системе.
2.1.1 Клиентский компонент шлюза
Клиентский компонент шлюза представляет собой стандартный COM-компонент,
реализующий ряд предопределенных интерфейсов, в частности:

интерфейс IObjectUI – стандартный для всех клиентских объектов СУБП
(функций и шлюзов); содержит свойства, возвращающие идентификатор
объекта, его название, иконку и хранимые данные;

интерфейс IGateUI – стандартный интерфейс клиентского компонента шлюза.
Реализует свойства и методы для работы с доступными типами переменных
DocsVision 4.5: Руководство разработчика в среде СУБП
6
(объектов шлюза). Например, шлюз к файловой системе может обрабатывать
два типа переменных – файлы и папки файловой системы;

интерфейс IDVObjectUI (необязательный) – стандартный интерфейс для
компонент, использующих объекты DocsVision. Позволяет получить доступ к
текущей сессии и окну Навигатора.
Наиболее важными в реализации клиентского компонента шлюза являются
следующие методы:

GetObjectTypes – возвращает коллекцию описаний регистрируемых шлюзом
типов переменных;

GetMethods – возвращает коллекцию описаний методов, предоставляемых
шлюзом для манипуляций над объектами;

SelectObject – выбор значения переменной указанного типа. Обычно, вызов
данного метода влечет за собой открытие одного или нескольких диалоговых
окон;

GetObjectDisplayValue – возвращает отображаемое значение переменной
указанного типа по её числовому значению.
Шлюз может иметь собственные хранимые данные (например, настройки
соединения с внешней системой или иные необходимые настройки), которые могут
меняться в зависимости от того, в каком процессе используется шлюз. В таком случае
эти данные передаются и возвращаются при помощи свойства Data интерфейса
IObjectUI и сохраняются в БД DocsVision. Пользовательский интерфейс для изменения
этих настроек (при необходимости) также реализуется клиентским компонентом шлюза
при помощи страниц свойств. Для передачи шлюзу настроек, общих для всех
экземпляров шлюза одного типа, также предусмотрен интерфейс
IGateInit. В
существующих шлюзах он используется для установки xml-описания шлюза. Для
разработки страниц свойств рекомендуется использовать компонент Property Page
Designer (DDPropPageD.ocx), входящий в комплект поставки DocsVision.
Настройки (данные) шлюза используются в дальнейшем в серверном компоненте
шлюза при его инициализации.
При занесении шлюза в справочник необходимо указать
идентификатор (ProgID) разработанного клиентского компонента.
программный
Клиентский компонент может быть разработан с использованием Visual Basic или
Visual C++.
2.1.2 Серверный компонент шлюза
Серверный компонент шлюза реализуется как .NET assembly, и используется
сервисом СУБП при работе с объектами шлюза (переменными). Компонент реализует
следующую функциональность:

предоставление программного интерфейса для обработки объектов шлюза;

создание экземпляров объектов;

удаление экземпляров объектов;

сравнение объектов;

дополнительные функции (свои для каждого шлюза).
Компонент реализует стандартный интерфейс
вызываемые сервисом СУБП или функциями процесса.
IGate,
содержащий
методы,
Кроме этого интерфейса, серверный компонент шлюза определяет собственные
интерфейсы для всех типов переменных, реализуемых шлюзом. Каждый объект шлюза
реализует стандартный интерфейс IGateVariable для совместимости с другими шлюзами,
а также, возможно, некоторые специфические для данного типа методы. Например, тип
DocsVision 4.5: Руководство разработчика в среде СУБП
7
Пользователь может, кроме стандартных свойств, содержать такие специфические
свойства как ФИО, Дата рождения и другие.
Серверный компонент шлюза реализуется на любом из языков платформы .NET –
Visual Basic .NET или C#.
2.2
ФУНКЦИИ
Пользовательские функции разрабатываются как дополнение к системе
управления бизнес-процессами при решении задач расширения функциональности
СУБП, которые не могут быть решены при помощи сценариев. Чаще всего,
пользовательские функции реализуют механизмы работы со специфическими
(пользовательскими) шлюзами и поставляются вместе с ними.
Все пользовательские функции заносятся в справочник функций.
После
добавления в справочник функция становится доступной в объектной модели и
появляется на панели инструментов в карточке бизнес-процесса.
Реализация
компонента:
пользовательской
функции
включает
в
себя
два
основных

клиентский компонент, реализующий пользовательский интерфейс
настройки параметров функции (если таковые предусмотрены);
для

серверный компонент, работающий в рамках сервиса СУБП и реализующий
логику работы функции.
Функция может быть независимой от шлюзов (глобальной функцией СУБП), либо
требовать для своего исполнения наличия в процессе одного (либо нескольких)
предустановленных шлюзов. Эти требования определяются на этапе разработки
функции. Например, функция копирования файлов может требовать для своей работы
наличия в процессе шлюза к файловой системе.
Каждая функция имеет собственный уникальный идентификатор (ID), задаваемый
на этапе разработки. Этот идентификатор заносится в справочник и используется в
дальнейшем для обеспечения уникальности функций в системе.
2.2.1 Клиентский компонент функции
Клиентский компонент функции представляет собой COM-компонент, имеющий
пользовательский интерфейс для настройки её свойств.
Клиентский компонент функции реализует ряд предопределенных интерфейсов:

интерфейс IObjectUI – стандартный для всех клиентских объектов СУБП –
содержит свойства, возвращающие идентификатор объекта, его название,
иконку и хранимые данные;

интерфейс IFunctionUI – стандартный интерфейс клиентского
компонента
функции – реализует свойства и методы, вызываемые карточкой бизнеспроцесса при использовании функции;

интерфейс
IExportableFunctionUI
(необязательный)
–
интерфейс,
предназначенный для функций, обладающих специфическим механизмом
экспорта/импорта. Методы данного интерфейса используются для корректной
работы функции при загрузке и выгрузке процесса в XML;

интерфейс IStateFunctionUI (необязательный) – данный интерфейс должен
быть реализован в функциях, имеющих собственный набор состояний
(например, таких как функция Задание). Свойства и методы данного
интерфейса позволяют определить для каждого состояния функции
собственный цвет, название и иконку, которые будут отображаться на графе
бизнес-процесса.
Наиболее важными в реализации клиентского компонента функции являются
следующие методы:
DocsVision 4.5: Руководство разработчика в среде СУБП
8

GetRequiredGates – возвращает список необходимых для работы функции
шлюзов (идентификаторы шлюзов, разделенные запятой). При разработке
функции, данные идентификаторы должны быть известны;

AllowExecute – разрешает или запрещает исполнение функции. В
зависимости от того, все ли необходимые для запуска функции параметры
указаны, функция может разрешить или запретить создание экземпляра
процесса. Вызов данного метода производится из карточки бизнес-процесса;

Convert – позволяет преобразовать настройки функции при преобразовании
процесса к более поздней версии.
Все настройки функции сохраняются в строчном формате, передаются и
возвращаются при помощи свойства Data интерфейса IObjectUI и сохраняются в БД
DocsVision. Для удобства сохранения настроек функции рекомендуется использовать
формат XML.
При реализации визуального интерфейса настройки параметров функции
рекомендуется использовать механизм страниц свойств (Property Pages). Тогда
уникальные страницы свойств функции будут добавлены к стандартным страницам
свойств в карточке бизнес-процесса. При разработки страниц свойств рекомендуется
использовать компонент Property Page Designer (DDPropPageD.ocx), входящий в
комплект поставки DocsVision.
При занесении функции в справочник необходимо указать программный
идентификатор
(ProgID)
разработанного
клиентского
компонента.
Например:
DVFunctonsUI.StartFunction.
Клиентский компонент функции может быть разработан с использованием Visual
Basic или Visual C++.
2.2.2 Серверный компонент функции
Серверный компонент функции реализуется как .NET assembly и реализует
внутреннюю
логику
работы
функции.
Компонент
реализует
следующую
функциональность:

доступ к настройкам (параметрам) функции;

проверка возможности выполнения функции;

реализация действий, требуемых от данной функции.
Серверный компонент функции реализует интерфейс IFunction, методы которого
вызываются сервисом СУБП во время исполнения функции.
До начала непосредственного исполнения функция получает заданные
пользователем настройки в виде строки (свойство Data) и производится повторная
проверка на их достаточность и полноту (метод AllowExecute). Далее вызывается
метод Execute, реализующий непосредственно логику функции.
Серверный компонент функции реализуется на любом из языков платформы .NET
– Visual Basic .NET или C#.
2.3
СЦЕНАРИИ
Сценарии представляют собой мощный механизм расширения функциональности
СУБП, используемый в тех случаях, когда требуемые действия слишком сложно (или
невозможно) выполнить при помощи стандартных функций.
Типовые применения сценариев следующие:

преобразование типов и форматов данных;

динамическое изменение данных процесса во время его работы (добавление и
удаление переменных процесса, изменение значений переменных);
DocsVision 4.5: Руководство разработчика в среде СУБП
9

сложные операции обработки данных, которые невозможно осуществить
стандартными
средствами
(например,
работа
со
справочниками
и
специфическими карточками DocsVision);

взаимодействие с внешними системами (не предусмотренное функциями или
шлюзами этих систем).
Функция сценария (Script) позволяет выполнить в рамках процесса произвольный
код на языке платформы .NET (C# или VB.NET).
2.3.1 Разработка сценариев
Разработка сценариев включает в себя следующие этапы: написание кода
сценария; отладка кода сценария; сохранение готового сценария в процессе или
подпроцессе.
Написание кода сценария можно производить как непосредственно в диалоговом
окне функции сценария, так и в любом другом редакторе или при помощи Visual
Studio.NET - с последующей вставкой полученного кода в функцию процесса.
Последний вариант предпочтительнее, так как позволяет избежать грубых ошибок
форматирования, синтаксиса и преобразования типов.
Код сценария должен располагаться в классе DVScript, в пространстве имён
DVScriptHost:
namespace DVScriptHost
{
class DVScript
{
}
}
Сценарий также может содержать другие классы и пространства имен, но
существенным является именно указанный. Класс должен содержать стандартный
метод:
public void Execute (ProcessInfo process, PassState passInfo)
В начале исполнения функции управление будет передано данному методу.
Входящие параметры метода содержат ссылки на информацию о процессе (process) и
данные о текущем проходе (passInfo). Под проходом в данном случае понимается
совокупность данных (контекст), специфических для выполнения данного конкретного
экземпляра функции. При повторном вызове функции эти данные могут измениться.
Функция сценария должна ссылаться на внутренние пространства имен:

DocsVision.Workflow.Objects – пространство имен, содержащее описания
структур данных карточек СУБП (карточка процесса, справочники);

DocsVision.Workflow.Runtime
–
пространство
производящего обработку процессов;

DocsVision.Workflow.Gates – пространство имен стандартных шлюзов.
имен
сервиса
СУБП,
Для работы с клиентскими объектами DocsVision необходимо дополнительно
указать ссылку на пространство имен DocsVision.Platform.ObjectManager (описание
соответствующих объектов приведено в руководстве разработчика DocsVision).
При необходимости использовать внешние системы (напрямую или через шлюзы)
имеется возможность подключить необходимые программные модули на странице
свойств функции сценария.
2.3.2 Объектная модель сценариев
Основные объекты, которыми оперирует функция сценария, – это внутренние
объекты сервиса СУБП, специфические для исполняемого процесса. К ним относятся
DocsVision 4.5: Руководство разработчика в среде СУБП
10
переменные процесса, шлюзы, журнал процесса и др. Необходимые типы данных
расположены в пространстве имен DocsVision.Workflow.Runtime.
Класс ProcessInfo содержит данные о текущем выполняющемся процессе и
включает в себя следующие свойства и методы:
Gates – коллекция шлюзов, входящих в процесс;
Variables – коллекция переменных процесса;
Library – ссылка на справочники (библиотека WorkflowObjects);
ProcessData – ссылка на карточку процесса (библиотека WorkflowObjects);
ProcessLog – журнал процесса (библиотека WorkflowObjects);
GetGateByName – получение шлюза с указанным именем;
GetVariableByName – получение переменной с указанным именем;
LogMessage – запись информационного сообщения в журнал процесса.
Экземпляр данного класса выступает в качестве входного параметра функции
сценария. С его помощью сценарий может оперировать данными процесса.
Для получения конкретных экземпляров переменных или шлюзов рекомендуется
использовать методы
GetVariableByName
и
GetGateByName.
Корректность
выполнения данных методов обеспечивается уникальностью имён шлюзов и
переменных в процессе.
2.3.2.1 Работа со шлюзами
Коллекция шлюзов процесса
(Gates) содержит типизированные экземпляры
серверных классов шлюзов, реализующих общий интерфейс IGate. Для получения
конкретного шлюза из коллекции, необходимо знать его название или тип. Тип шлюза
(уникальный идентификатор) задается в процессе его разработки и в дальнейшем не
должен изменяться.
Для организации взаимодействия с объектами внешней системы сценарий может
общаться с ней как напрямую (при помощи ее собственного API ), так и с помощью
шлюза, который может содержать вспомогательные классы для работы с каждым из
объектов внешней системы. Например, при работе со справочником сотрудников
DocsVision разработчик сценария может работать как напрямую с данными справочника
(см. «Руководство разработчика на платформе DocsVision»), так и воспользоваться
соответствующими объектами шлюза DocsVision. Однако чаще всего такие объекты
шлюза служат внутренним целям (для организации работы стандартных функций), и
могут не иметь всех свойств и методов по сравнению с оригинальным API. Поэтому при
наличии такой возможности, рекомендуется работать с внешней системой напрямую.
Пример работы с объектами DocsVision через оригинальный API:
// получение шлюза
DVGate dvGate;
dvGate = (DVGate)process.Gates[DVGate.GateID];
// получение объекта сессии для доступа к API
UserSession session = oDVGate.Session;
// работа через API DocsVision - получение данных карточки
CardData data = session.CardManager.get_CardData("...");
2.3.2.2 Работа с переменными
Коллекция
переменных
бизнес-процесса
содержит
объекты
ProcessVariable, включающие в себя следующие свойства и методы:
класса
ID – уникальный идентификатор переменной;
Name – название переменной;
DocsVision 4.5: Руководство разработчика в среде СУБП
11
DisplayValue – отображаемое значение объекта, хранящегося в переменной;
Type – тип переменной (VarTypeEnum);
TypeID – идентификатор типа переменной в шлюзе. Для простых типов
переменных не заполняется;
GateID – идентификатор шлюза, которому принадлежит переменная. Для
простых типов этот идентификатор является пустым GUID;
Value – значение переменной. Для простых типов переменных содержит
значение соответствующего типа (string, long, …). Для шлюзовых переменных
содержит экземпляр переменной шлюза, реализующий стандартный интерфейс
IGateVariable;
VarEnumValues – коллекция строчных значений (для переменных типа
Перечисление);
Values – коллекция значений для переменной-коллекции;
IsNull – флаг, показывающий, что значение переменной не задано;
IsMultipleValued – флаг, показывающий, что переменная хранит несколько
значений (переменная-коллекция).
Необходимо подчеркнуть, что при работе с переменными простых типов данных,
значение переменной можно получить непосредственно из свойства Value. Для прочих
типов (переменные шлюзов) в качестве значения переменной будет возвращена ссылка
на соответствующий типизированный объект шлюза. Пример:
// получение переменных простого и сложного типа
ProcessVariable varStr = process.GetVariableByName("Строка");
ProcessVariable varDoc = process.GetVariableByName("Карточка договора");
// получение типизированных значений переменных
string strValue = (string)varStr.Value;
DVCard card = (DVCard)varDoc.Value;
Присваивание значений переменным выполняется аналогичным образом.
Переменные простых типов получают непосредственное значение, тогда как шлюзовые
переменные в качестве нового значения могут получать только объекты шлюза:
// получение переменных простого и сложного типа
ProcessVariable varStr = process.GetVariableByName("Строка");
ProcessVariable varDoc = process.GetVariableByName("Карточка договора");
// получение типизированных значений переменных
varStr.Value = "новое значение строки";
varDoc.Value = dvGate.GetVariable((int)DVVariableType.DOCUMENT,
"ID_карточки");
Примеры простейших сценариев можно найти в приложении 3.
2.3.3 Отладка сценариев
Отладка сценариев представляет собой процесс тестирования разработанного
кода сценария с последующим включением его в разработанный бизнес-процесс.
Отладку можно условно разделить на две стадии:

отладка на стадии компиляции;

отладка на стадии исполнения.
При обработке экземпляра СУБП исполнение всех функций сценария проходит две
фазы: компиляция и непосредственное исполнение. Компиляция производится при
первом обращении к функции сценария и осуществляется при помощи стандартного
DocsVision 4.5: Руководство разработчика в среде СУБП
12
компилятора, входящего в состав Microsoft .NET Framework. Язык сценария (C# или
VB.NET) выбирается соответствующим переключателем в настройках функции.
Если компиляция кода сценария завершилась с одной (или несколькими)
ошибками, то дальнейшее выполнение бизнес-процесса считается невозможным и
работа бизнес-процесса завершается с ошибкой. Подробное описание возникших
ошибок можно найти в журнале соответствующего экземпляра бизнес-процесса (они
будут помечены именем функции сценария, компиляция которой не удалась) или в
общем журнале работы СУБП - если такой журнал ведется. Подробнее о журнале
работы можно узнать в «Руководстве пользователя DocsVision».
Проверить компиляцию сценария можно непосредственно из окна ввода текста
сценария, нажатием кнопки “Компилировать”.
В случае, если компиляция завершена успешно, производится исполнение
сценария. Исполнение производится последовательно, если структурой кода не
предусмотрено иное. После завершения исполнения всего кода сценария сервис СУБП
переходит к обработке следующей функции бизнес-процесса.
Для упрощения отладки бизнес-процесса на этапе исполнения можно
использовать механизм сообщений. Сценарий может выводить произвольные
сообщения в журнал бизнес-процесса при помощи функции LogMessage класса
ProcessInfo. Сообщения могут носить декларативный характер (например, сообщать о
корректном выполнении тех или иных участков кода) или информировать о состоянии
данных
(например,
значениях
переменных).
После
завершения
отладки
необязательные для работы сценария сообщения желательно убрать из кода, чтобы
избежать замусоривания журнала готового бизнес-процесса.
Сценарии могут использовать для организации корректной работы стандартный
механизм исключений. Исключения могут возникать в результате ошибок исполнения
сценария, либо сознательно продуцироваться в коде для выполнения необходимых
действий. Все возможные исключения сценарий должен обрабатывать самостоятельно и
в зависимости от этого реализовывать тот или иной вариант работы (например,
записать информацию об исключении в журнал или выполнить другой участок кода).
Если исключение не было обработано сценарием, то оно обрабатывается сервисом
СУБП, и сценарий считается завершенным с непредвиденной ошибкой. Обработка
процесса в этом случае прерывается на функции сценария, вызвавшей исключение.
Итак, сценарий завершается успешно (исполнение процесса продолжается),
если:

компиляция сценария завершена без ошибок;

все возникшие
сценарием;
во
время
исполнения
исключения
обработаны
самим
или неуспешно (исполнение бизнес-процесса прерывается), если:

возникла одна или более ошибок при компиляции кода сценария
(синтаксические, семантические ошибки или не удалось подключить
дополнительные библиотеки);

во время исполнения сценария возникло хотя бы одно необработанное
исключение.
2.3.4 Сохранение сценариев в сборку и подключение сборок
Начиная с версии DocsVision 4.5 в функции “Сценарий” появилась кнопка
“Создать функцию”, которая позволяет сохранить сценарий как библиотеку, т.е. файл
*.dll:
DocsVision 4.5: Руководство разработчика в среде СУБП
13
При нажатии на эту кнопку отображается стандартный диалог выбора файла для
сохранения сборки. При успешной компиляции сборки производится добавление
ссылки на сборку в список сборок в справочнике системных настроек, в ветке,
относящейся к настройкам Workflow. Это позволяет в дальнейшем использовать данный
сценарий в других процессах как готовую функцию, без необходимости копирования
его исходного кода.
Внимание! Возможность сохранения сценария в сборку доступна только на
сервере DocsVision, т.к. файлы сборок должны располагаться на сервере для
возможности работы с ними сервиса Workflow.
После сохранения сценария как .Net-сборки, он отображается в диалоге выбора
типа объекта в Универсальной функции в дереве на одном уровне с добавленными в
процесс шлюзами:
DocsVision 4.5: Руководство разработчика в среде СУБП
14
Чтобы обеспечить возможность повторного использования сценария в виде
скомпилированной сборки, в нем обязательно должен быть хоть один публичный
(publiс) класс, а в нем должны присутствовать публичные статические (отмеченные в
коде как public static) методы. В рамках одного сценария возможно наличие
произвольного числа таких методов – каждый из них будет выступать как отдельная
функция в Универсальной функции. При этом, методы в качестве параметров и
возвращаемого значения должны содержать только параметры типов реализованными
шлюзами Workflow (включая шлюз к базовым типам).
Таким образом, если в поле Тип выбрать в качестве типа переменных класс,
принадлежащий сборке, в поле Функция отобразятся статические методы выбранного
класса, а в поле Параметры функции — параметры метода.
Помимо сборок, созданных на базе сценариев, возможно подключение в таком
качестве любых произвольных сборок, отвечающих тем же требованиям:
 в них обязательно должны присутствовать публичные статические
(отмеченные в коде как public static) методы
 методы в качестве параметров и возвращаемого значения должны
содержать только параметры типов реализованными шлюзами Workflow
(включая шлюз к базовым типам)
Такие сборки необходимо вручную добавить ее в список сборок в справочнике
системных настроек, в ветке, относящейся к настройкам Workflow.
Для корректной работы диалога на клиенте сборка должна находиться либо в
одном каталоге с клиентским приложением (IE), либо в GAC. На сервере сборка должна
находиться либо в одном каталоге с ExecLogic.exe, либо в GAC.
DocsVision 4.5: Руководство разработчика в среде СУБП
15
ПРИЛОЖЕНИЕ 1: ОПИСАНИЕ СТАНДАРТНЫХ ИНТЕРФЕЙСОВ
IObjectUI
Интерфейс,
шлюзов).
реализующий
Свойства и методы
Тип
свойства
клиентских
Параметры
объектов
СУБП
(функций,
Описание
Data (R/W)
string
Данные объекта (функции,
шлюза)
Icon (R/O)
IPictureDisp
Иконка объекта
TypeName (R/O)
string
Название данного типа
объектов
ID (R/O)
string
Уникальный идентификатор
объекта
IDVObjectUI
Реализуется всеми объектами, использующими DocsVision. Позволяет объекту
работать с сессией и хостом.
Свойства и методы
Тип
Параметры
Описание
UserSession (R/W)
IDispatch
Сессия DocsVision
Host (R/W)
IDispatch
Хост DocsVision
IObjectLocalize
Дополнительный интерфейс для объектов, поддерживающих локализацию:
Свойства и методы
Тип
Параметры
Получить идентификатор
текущей локализации
long
GetLocaleID
(long) LocaleID
SetLocaleID
Описание
Установить идентификатор
текущей локализации
IGateInit
Интерфейс клиентских компонент шлюза. Реализует свойства и методы для
работы с доступными типами переменных.
Свойства и методы
Тип
Initialize
Параметры
Описание
(string) Data – данные
шлюза
Инициализирует шлюз,
передавая данные,
сохраненные в настройках
шлюза в справочнике
шлюза. Как правило – xmlописание шлюза.
IGateUI
Интерфейс клиентских компонент шлюза. Реализует свойства и методы для
работы с доступными типами переменных.
Свойства и методы
Тип
Параметры
DocsVision 4.5: Руководство разработчика в среде СУБП
Описание
16
GetObjectTypes
IobjectType
Collection
Коллекция описаний типов
объектов, поддерживаемых
шлюзом
GetMethods
Imethod
Collection
Коллекция описаний
методов, поддерживаемых
шлюзом
SelectObject
bool
(long) hWnd –
идентификатор
родительского окна
(long) TypeID –
идентификатор типа
объекта
(string) ObjectID – выходной
параметр,
идентификатор\значение
объекта в шлюзе
Выбор объекта в шлюзе.
Метод позволяет выбрать и
вернуть идентификатор
объекта указанного типа.
Измененное значение
возвращается в параметре
ObjectID. Метод возвращает
true, если значение было
выбрано, и false в противном
случае.
ShowObject
(long) hWnd –
идентификатор
родительского окна
(long) TypeID –
идентификатор типа
объекта
(string) ObjectID –
идентификатор/значение
объекта в шлюзе
Отображение объекта в
шлюзе. Метод позволяет
активизировать объект по
его идентификатору и типу.
Может быть поддержано не
для всех типов объектов.
GetObjectDisplayValue string
(long) TypeID –
идентификатор типа
(string) ObjectID –
идентификатор объекта в
шлюзе
Возвращает отображаемое
значение объекта по его
типу и идентификатору
GetObjectReference
string
GetQuickSearchValues IDispatch
(long) TypeID –
Возвращает строку-ссылку
идентификатор типа
на объект в шлюзе
(string) ObjectID –
идентификатор объекта в
шлюзе
(ObjectReferenceTypeEnum)
– тип ссылки
(long) TypeID –
идентификатор типа
(string) SearchFor – строка
для поиска
Возвращает коллекцию
идентификаторов объектов,
найденных по строке,
заданной параметром
SearchFor
IFunctionUI
Интерфейс клиентских компонент функции. Реализует методы, вызываемые
карточкой бизнес-процесса при работе с функцией.
Свойства и методы
Тип
Параметры
Описание
GetRequiredGates
string
Возвращает список
идентификаторов
необходимых шлюзов
(разделенных запятой)
AllowExecute
bool
Проверка на наличие всех
необходимых для запуска
функции данных.
Возвращает true, если
DocsVision 4.5: Руководство разработчика в среде СУБП
17
функция готова к
выполнению, и false в
противном случае
IExportableFunctionUI
Клиентский интерфейс для функций, обладающих собственным механизмом
экспорта/импорта в XML.
Свойства и методы
Тип
Параметры
Описание
Вызывается при экспорте
функции. Возвращает
данные для экспорта в виде
строки.
string
Export
(string) Data – данные
функции
Import
Вызывается при импорте
функции.
IStateFunctionUI
Клиентский
состояний.
интерфейс
Свойства и методы
для
Тип
функций,
обладающих
Параметры
собственным
набором
Описание
CurrentIcon (R/O)
IPictureDisp
Возвращает иконку для
текущего состояния
CurrentName (R/O)
string
Возвращает локализованное
название текущего
состояния
CurrentColor (R/O)
long
Возвращает цвет иконки для
текущего состояния (в
формате OLE Color)
CurrentFunction (R/W)
IDispatch
Данные о состоянии
функции (ProcFunction)
IGate
Данный интерфейс реализуется серверными компонентами шлюзов. При помощи
методов, представленных в данном интерфейсе, сервис СУБП работает с переменными
шлюза.
Свойства и методы
Тип
Параметры
Описание
Data
string
Сохраненные настройки шлюза.
Позволяет передать шлюзу
настройки, заданные в
клиентской части.
GetVariable
IGateVariable (long)Type – тип
переменной
(string)ID –
идентификатор
переменной
Получение переменной из
шлюза по типу в формате long.
Возвращает стандартизованную
переменную.
GetVariable
IGateVariable (int)Type – тип
переменной
(string) ID –
идентификатор
переменной
Получение переменной из
шлюза по типу в формате int.
Возвращает стандартизованную
переменную.
GetVariable
IGateVariable (int)Type – тип
Получение переменной из
DocsVision 4.5: Руководство разработчика в среде СУБП
18
GetVariableReference
переменной
(string)SubTypeID –
идентификатор
подтипа переменной
(string) ID –
идентификатор
переменной
шлюза с указанием подтипа
переменной.
Возвращает стандартизованную
переменную.
string
(int)Type – тип
переменной
(string)ID –
идентификатор
переменной
Получение внешней ссылки на
переменную из шлюза.
object
(int)Type – тип
переменной
(string)ID –
идентификатор
переменной
Получение ссылки на
переменную во внутреннем
формате интегрируемой
шлюзом системы.
GetVariableInternalReference
AddVariable
IGateVariable (int)Type – тип
переменной
(string)VariableInfo –
информация о
создаваемом
объекте
DeleteVariable
CompareVariables
long
Создание нового объекта
заданного типа.
(int)Type – тип
переменной
(string)ID –
идентификатор
переменной
Удаление объекта из шлюза.
(int)Type – тип
сравниваемых
переменных
(string)ID1 –
идентификатор
первой переменной
(string)ID2 –
идентификатор
второй переменной
Сравнение двух переменных
одного типа.
IGateVariable
Данный интерфейс описывает свойства стандартной переменной шлюза, единые
для всех типов переменных. Все переменные, уникальные для конкретного шлюза,
должны реализовывать этот интерфейс.
Свойства и методы
Тип
Параметры
Описание
ID
string
Идентификатор переменной
GateID
string
Уникальный идентификатор
шлюза
Name
string
Название переменной
DisplayValue
int
Отображаемое значение
Type
long
Тип переменной в шлюзе
LogicalOperation
bool
(string)OperationType – тип
операции
(IGateVariable)Variable –
переменная для сравнения
DocsVision 4.5: Руководство разработчика в среде СУБП
Сравнение с другой
переменной того же типа
19
Convert
object
(VarTypeEnum)VarType – тип Сконвертировать переменную
переменной
в переменную другого типа
(IGate) Gate – ссылка на
шлюз
(int)TypeID – тип переменной
в шлюзе
IGateVariableCustomProperties
Данный интерфейс описывает методы для работы с пользовательскими
свойствами объекта шлюза, поддерживающего обработку подобных свойств.
Свойства и методы
GetCustomProperty
Тип
Параметры
Описание
object
(string)PropertyName –
название свойства
Получить значение свойства
(string)PropertyName –
название свойства
(object) – значение свойства
Установить значение свойства
SetCustomProperty
ICollectionalProperty
Данный интерфейс описывает способ
свойством стандартной переменной шлюза.
интерфейсов IEnumerable, IEnumerator.
Свойства и методы
Тип
взаимодействия с
Данный интерфейс
Параметры
коллекционным
унаследован от
Описание
Count
int
Число элементов в коллекции
[Key]
object
Получить элемент по ключу
Add
object
AddNew
object
AddNew
object
(object)Item – элемент для
добавления
Добавить существующий
элемент в коллекцию
Добавить новый элемент в
коллекцию
(object)Key – элемент для
добавления
Добавить новый элемент в
коллекцию с указанием ключа
(IEnumerator)Key – элементы Добавить несколько
для добавления
элементов в коллекцию с
указанием ключа
AddRange
(int)Index– индекс элемента
Получить элемент по индексу
Remove
(object)Key– ключ элемента
Удалить элемент по ключу
RemoveAt
(int)Index– индекс элемента
Удалить элемент по индексу
GetByIndex
object
Очистить коллекцию
Clear
ILockalableObject
Данный
интерфейс
описывает
методы
и
свойства
поддерживающего блокировку доступа к данным объекта.
Свойства и методы
Тип
Параметры
объекта
шлюза,
Описание
IsLocked
bool
Заблокирован ли объект
PlaceLock
bool
Заблокировать объект.
Результат – флаг
успешности операции
блокирования
DocsVision 4.5: Руководство разработчика в среде СУБП
20
PlaceAutoLock
Заблокировать объект и
получить объект блокировки.
Блокировка автоматически
снимется при уничтожении
объекта ObjectLock
ObjectLock
Снять блокировку
RemoveLock
IFunction
Этот интерфейс реализует свойства и методы серверного компонента функции.
Свойства и методы
Тип
Параметры
Описание
Data
string
Сохраненные настройки
функции. Позволяет
передать функции
настройки, заданные в
клиентской части.
FunctionData
ProcFunction
Данные функции в
процессе
AllowExecute
bool
(ProcessInfo)process –
данные о процессе
(PassState)pass – данные
прохода
Проверка, можно ли
начинать выполнение
функции
string
(ProcessInfo)process –
данные о процессе
(PassState)pass – данные
прохода
Получить описание
причины, по которой
функция не может быть
выполнена
GetExecuteDisallowReason
Execute
ExecResultEnum (ProcessInfo)process –
данные о процессе
(PassState)pass – данные
прохода
GetNextExecuteTime
DateTime
(int) PoolingInterval –
заданный для функции
интервал опроса
DocsVision 4.5: Руководство разработчика в среде СУБП
Выполнение функции
Вычислить время
следующего
срабатывания функции с
учетом заданного в
минутах интервала
опроса, вызывается для
функций, оставшихся в
активном состоянии
21
ПРИЛОЖЕНИЕ 2: ОБЪЕКТНАЯ МОДЕЛЬ КАРТОЧЕК СУБП
Объектная модель карточек СУБП представляет собой ряд классов, содержащих
свойства и методы, позволяющие оперировать соответствующими объектами (данными)
в базе данных DocsVision. К ним относятся следующие карточки:

Бизнес-процесс;

Справочник функций;

Справочник шлюзов.
Все объекты и коллекции содержат следующие стандартные методы:
BeginUpdate – включение режима отложенных изменений;
UpdateNow – закрепление всех сделанных изменений;
EndUpdate – окончание режима отложенных изменений с их сохранением;
CancelUpdate – отмена режима отложенных изменений с их отменой;
Refresh – обновление данных.
Все коллекции, помимо того, обладают также рядом стандартных свойств и
методов:
Count – количество элементов в коллекции;
Keys – ключи элементов коллекции;
Values – значения элементов коллекции;
AddNew – добавление нового элемента в коллекцию;
Clear – очистка коллекции;
СontainsKey – наличие элемента с указанным ключом;
ContainsValue – наличие элемента с указанным значением;
CopyTo – копирование в массив элементов;
GetEnumerator – получение указателя на нумератор;
Remove – удаление элемента с указанным ключом.
На рис. 2.1 приведена схема объектной модели карточек СУБП.
DocsVision 4.5: Руководство разработчика в среде СУБП
22
Рис. 2.1. Схема объектной модели карточек СУБП
Ниже приводится детальное описание всех объектов.
Library
Библиотека карточек СУБП:
Свойства и методы
Dictionary
Тип
Параметры
Описание
Справочники
Dictionary
(UserSession) Session – сессия Конструктор
Library
GetProcesses
ProcessCollection
(bool) IsTemplate – только
шаблоны
(bool) IsActive – только
активные
Получение списка всех
процессов
GetProcess
Process
ProcessID (Guid) идентификатор процесса
Получение конкретного
процесса
CreateProcess
Process
(Process) Template - шаблон
процесса
Создание экземпляра
процесса по шаблону
DocsVision 4.5: Руководство разработчика в среде СУБП
23
Dictionary
Справочники СУБП:
Свойства и методы
Тип
Параметры
Описание
Functions
DictFunctionCollection
Справочник функций
Gates
DictGateCollection
Справочник шлюзов
DictGate
Шлюз в справочнике шлюзов:
Свойства и методы
Тип
Параметры
Описание
ID
Guid
Глобальный уникальный идентификатор
данного шлюза
Key
Guid
Ключ элемента в коллекции
Assembly
string
Название и путь к сборке серверного
компонента шлюза
Class
string
Класс в сборке серверного компонента
шлюза
Name
string
Название шлюза в справочнике
UIClass
string
ProgID клиентского компонента шлюза
DictFunction
Функция в справочнике функций:
Свойства и методы
Тип
Параметры
Описание
ID
Guid
Глобальный уникальный идентификатор
данной функции
Key
Guid
Ключ элемента в коллекции
Assembly
string
Название и путь к сборке серверного
компонента функции
Class
string
Класс в сборке серверного компонента
функции
Name
string
Название шлюза в справочнике
UIClass
string
ProgID клиентского компонента шлюза
IsStart
bool
Является ли функция стартовой
IsStop
bool
Является ли функция конечной
Process
Описание процесса:
Свойства и методы
Тип
Параметры
Описание
ID
Guid
Идентификатор процесса
Functions
ProcFunctionCollection
Функции процесса
Gates
GateCollection
Шлюзы процесса
Links
LinkCollection
Связи процесса
DocsVision 4.5: Руководство разработчика в среде СУБП
24
Variables
VariableCollection
Переменные процесса
DocTypes
DocTypeCollection
Типы инициирующих
документов
LogMessages
LogMessageCollection
Журнал процесса
State
ProcessStateEnum
Состояние экземпляра
процесса
AuthorCreated
string
Автор шаблона процесса
AuthorModified
string
Автор последних изменений
Calendar
string
Ссылка на бизнес-календарь
DateCreated
DateTime
Дата создания
DateModified
DateTime
Дата последних изменений
DateBegin
DateTime
Дата начала работы
экземпляра
DateEnd
DateTime
Дата окончания работы
экземпляра
Description
string
Описание процесса
Folder
string
Папка для создания
экземпляров
HasLayout
bool
Имеется ли нарисованный
граф
InstanceName
string
Название экземпляра процесса
LocaleID
int
Языковые настройки
пользователя, запустившего
процесс
Name
string
Название шаблона процесса
SubProcess
bool
Признак подпроцесса
TemplateState
TemplateStateEnum
Состояние шаблона процесса
Version
int
Номер версии шаблона
PlaceLock
Блокировка карточки процесса
ForceUnlock
Немедленное разблокирование
RemoveLock
Снятие блокировки карточки
Gate
Шлюз в бизнес-процессе:
Свойства и методы
Тип
Параметры
Описание
ID
Guid
Идентификатор
Key
Guid
Ключ элемента в коллекции
Caption
string
Название шлюза в процессе
Data
string
Персональные данные шлюза
Description
string
Описание шлюза
TypeID
Guid
Идентификатор шлюза в справочнике
шлюзов
DocsVision 4.5: Руководство разработчика в среде СУБП
25
ProcFunction
Функция в бизнес-процессе:
Свойства и методы
Тип
Параметры
Описание
ID
Guid
Идентификатор
Key
Guid
Ключ элемента в коллекции
Caption
string
Название функции в процессе
Data
string
Персональные данные функции
Description
string
Описание функции
TypeID
Guid
Идентификатор функции в
справочнике функций
CardID
string
Идентификатор связанной карточки
(дополнительные данные функции)
Height
int
Высота функции на графе
Width
int
Ширина функции на графе
XPos
int
Абсцисса функции на графе
YPos
int
Ордината функции на графе
ReuseStep
bool
Разрешать повторное использование
данных прохода
States
PassStateCollection
Состояния функции в проходах
PassState
Данные о проходе функции:
Свойства и методы
Тип
Параметры
Описание
ID
Guid
Идентификатор
Key
Guid
Ключ элемента в коллекции
Pass
int
Номер прохода
Data
string
Данные прохода
State
FuncStateEnum
Состояние функции
Constraints
ConstraintCollection
Коллекция предшествующих
ограничений
Constraint
Ограничение в проходе функции:
Свойства и методы
Тип
Параметры
Описание
ID
Guid
Идентификатор
Key
Guid
Ключ элемента в коллекции
Completed
bool
Признак успешного выполнения
PrevFunction
Guid
Идентификатор предыдущей
выполненной функции
DocsVision 4.5: Руководство разработчика в среде СУБП
26
DocType
Тип инициирующего документа. Свойства и методы:
Свойства и методы
Тип
Параметры
Описание
ID
Guid
Идентификатор
Key
Guid
Ключ элемента в коллекции
TypeID
Guid
Идентификатор типа документа
Link
Описывает связь между двумя функциями в процессе:
Свойства и методы
Тип
Параметры
Описание
ID
Guid
Идентификатор
Key
Guid
Ключ элемента в коллекции
Caption
string
Название связи
Source
Guid
Идентификатор начальной функции
Destination
Guid
Идентификатор конечной функции
LinkType
LinkTypeEnum
Тип срабатывания связи
Style
int
Стиль отображения связи на графе
(прямая, ломаная, кривая)
LogMessage
Запись в журнале бизнес-процесса:
Свойства и методы
Тип
Параметры
Описание
ID
Guid
Идентификатор
Key
Guid
Ключ элемента в коллекции
Action
string
Описание производимого действия
ActionType
ActionTypeEnum
Тип производимого действия
ChangeState
string
Смена состояния функции (для событий
от функций)
FunctionName
string
Имя функции (для событий от функций)
InputParameters
string
Входные данные функции (обычно –
XML), для событий от функций
OutputParameters
string
Выходные данные функции (обычно –
XML), для событий от функций
MessageDate
DateTime
Дата и время события
Priority
int
Приоритет события (1..100). Приоритет
выставляется инициатором события по
собственному усмотрению.
DocsVision 4.5: Руководство разработчика в среде СУБП
27
Variable
Переменная бизнес-процесса:
Свойства и методы
Тип
Параметры
Описание
ID
Guid
Идентификатор
Key
Guid
Ключ элемента в коллекции
DefaultValue
object
Значение по умолчанию (для
шаблонов)
Description
string
Описание переменной
EnumValues
EnumValueCollection
Коллекция значений перечисления
(для переменных перечислимого
типа)
LogValues
LogValueCollection
Коллекция значений переменной
(для переменных с историей
изменения значений)
GateID
Guid
Идентификатор шлюза, которому
принадлежит переменная (для
шлюзовых переменных)
TypeID
int
Тип переменной в шлюзе (для
шлюзовых переменных)
Name
string
Имя переменной
IsAdded
bool
Признак того, что переменная была
добавлена во время выполнения
процесса
IsAdditive
bool
Признак переменной с сохранением
истории изменения значений
IsDefault
bool
Признак наличия значения “по
умолчанию”
IsRequired
bool
Признак обязательного заполнения
значения переменной
IsMultipleValued
bool
Признак переменной-коллекции
Value
object
Значение переменной
VarType
VarTypeEnum
Тип переменной
EnumValue
Значение переменной перечислимого типа:
Свойства и методы
Тип
Параметры
Описание
ID
Guid
Идентификатор
Key
Guid
Ключ элемента в коллекции
Value
string
Значение переменной
LogValue
Запись в журнале изменения значения переменной:
Свойства и методы
ID
Тип
Guid
Параметры
Описание
Идентификатор
DocsVision 4.5: Руководство разработчика в среде СУБП
28
Key
Guid
Ключ элемента в коллекции
ChangeDate
DateTime
Дата и время изменения значения
Value
String
Новое значение
Перечисления
ProcessStateEnum – состояние экземпляра процесса
{
NonActive = 0, остановлен
Active = 1, активен
Paused = 2, приостановлен
Failed = 3, приостановлен из-за ошибки
Finished = 4, завершен успешно
}
TemplateStateEnum – состояние шаблона процесса
{
Design = 0, в разработке
InUse = 1, используется
Test = 2, тестирование
ReadyToStart = 3, готов к созданию экземпляров
}
FuncStateEnum – состояние функции в проходе
{
NonActive = 0, не активна
Wait = 1, готова к исполнению
Active = 2, выполняется
Done = 3, проход завершен
Finished = 4, процесс завершен
Error = 5, ошибка исполнения функции
}
LinkTypeEnum – тип связи
{
LinkSuccess = 0, выполняется только при успешном завершении
функции
LinkFail = 1, выполняется только при неудачном завершении функции
LinkCompletion = 2, выполняется всегда
}
ActionTypeEnum – тип записи в журнале процесса
{
Error = 0, ошибка
Warning = 1, предупреждение
Information = 2, дополнительная информация
}
VarTypeEnum – тип переменной
{
Generic = 0, шлюзовая
Integer = 1, целое
Float = 2, дробное
String = 3, строка
Boolean = 4, да/нет
DateTime = 5, дата/время
Enum = 6, перечисление
}
DocsVision 4.5: Руководство разработчика в среде СУБП
29
ПРИЛОЖЕНИЕ 3: ПРИМЕРЫ СЦЕНАРИЕВ
Получение ФИО пользователя
class DVScript
{
// Получение ФИО пользователя DV
// На входе – переменная “UserDV” типа “Пользователь DV”
// На выходе – переменная “User” типа “Строка”
public void Execute(DocsVision.Workflow.Runtime.ProcessInfo process,
PassState passInfo)
{
try
{
process.LogMessage("Получение ФИО Пользователя DV...");
// Переменная типа пользователь DV
ProcessVariable oEmployeeID =
process.GetVariableByName("UserDV");
// Переменная типа строка
ProcessVariable oUserFIO = process.GetVariableByName("User");
//Получаем Гейт к DocsVision
DVGate m_oDVGate = (DVGate)process.Gates[DVGate.GateID];
//Получаем Сотрудника
DVPrincipal oEmployee = (DVPrincipal)oEmployeeID.Value;
///Подготоваливаем строки вида Фамилия И.О.
string sTempFIO = "";
if (oEmployee.LastName.Length > 0) { sTempFIO =
oEmployee.LastName; }
if (oEmployee.FirstName.Length > 0) { sTempFIO += " " +
oEmployee.FirstName.Substring(0, 1) + "."; }
if (oEmployee.MiddleName.Length > 0) { sTempFIO +=
oEmployee.MiddleName.Substring(0, 1) + "."; }
oUserFIO.Value = sTempFIO;
process.LogMessage("ФИО:" + sTempFIO);
}
catch (Exception ex)
{
// запись в журнал ошибки исполнения
process.LogMessage("Ошибка выполнения скрипта:" +
ex.Message);
}
return;
}
}
Получение заместителя пользователя
class DVScript
{
// вход: переменная "UserDV" процесса типа Пользователь DV
// выход: переменная "Deputy" процесса типа Пользователь DV,
// которая вычисляется как первый заместитель у пользователя из
переменной1
public void Execute(DocsVision.Workflow.Runtime.ProcessInfo process,
PassState passInfo)
{
try
DocsVision 4.5: Руководство разработчика в среде СУБП
30
{
process.LogMessage("Получение заместителя...");
// Переменная типа пользователь DV
ProcessVariable oUserDV =
process.GetVariableByName("UserDV");
ProcessVariable oDeputy =
process.GetVariableByName("Deputy");
DVPrincipal dvUser = (DVPrincipal)oUserDV.Value;
process.LogMessage("Пользователь: " +
dvUser.LastName + " " + dvUser.FirstName + " " +
dvUser.MiddleName);
DVPrincipal dvDeputy = dvUser.ActiveDeputy;
oDeputy.Value = dvDeputy;
// Результат
process.LogMessage("Заместитель: " +
dvDeputy.LastName + " " + dvDeputy.FirstName + " " +
dvDeputy.MiddleName);
}
catch (Exception ex)
{
// запись в журнал ошибки исполнения
process.LogMessage("Ошибка выполнения скрипта:" +
ex.Message);
}
return;
}
}
Получение URL-ссылки на карточку
class DVScript
{
// вход:
// переменная "Card" процесса типа "Карточка DV" – карточка
// выход:
// переменная "URL" процесса типа строка – содержит URL на карточку
private DVGate m_oDVGate;
public void Execute(DocsVision.Workflow.Runtime.ProcessInfo process,
PassState passInfo)
{
try
{
process.LogMessage("Формирование URL карточки...");
// Переменные
ProcessVariable oURL = process.GetVariableByName("URL");
ProcessVariable oCard = process.GetVariableByName("Card");
// Получаем шлюз
m_oDVGate = (DVGate)process.Gates[DVGate.GateID];
// Приводим тип переменной
DVCard dvCard = (DVCard)oCard.Value;
// Формируем URL
string strUrl = oURL.Value.ToString();
if (m_oDVGate.BaseURL != null)
strUrl += Environment.NewLine + "<" + m_oDVGate.BaseURL +
((m_oDVGate.BaseURL.IndexOf('?') > 0) ? "&" : "?") + "CardID=" + dvCard.ID +
">";
// Результат
oURL.Value = strUrl;
process.LogMessage("Url: " + strUrl);
}
DocsVision 4.5: Руководство разработчика в среде СУБП
31
catch (Exception ex)
{
// запись в журнал ошибки исполнения
process.LogMessage("Ошибка выполнения скрипта:" +
ex.Message);
}
return;
}
}
Перемещение ярлыка карточки
class DVScript
{
// вход:
// переменная "TargetFolder" процесса типа "Папка DV" – целевая папка
// переменная "Card" процесса типа "Документ DV" – карточка
// выход:
// перемещает сильную ссылку карточки "Card" в "TargetFolder"
private DVGate m_oDVGate;
public void Execute(DocsVision.Workflow.Runtime.ProcessInfo process,
PassState passInfo)
{
try
{
process.LogMessage("Перемещение ярлыка...");
// Переменные
ProcessVariable oTargetFolder =
process.GetVariableByName("TargetFolder");
ProcessVariable oCard = process.GetVariableByName("Card");
// Приводим типы переменных
DVFolder dvTargetFolder = (DVFolder)oTargetFolder.Value;
DVCard dvCard = (DVCard)oCard.Value;
// Получаем шлюз
m_oDVGate = (DVGate)process.Gates[DVGate.GateID];
process.LogMessage("Получили шлюз");
// получаем сессию
UserSession oSes = m_oDVGate.Session;
process.LogMessage("Получили сессию");
// получение карточки папок
FolderCard oFoldersCard =
(FolderCard)oSes.CardManager.get_Card(oSes.CardManager.GetCardByRow(dvTargetF
older.ID, "FE27631D-EEEA-4E2E-A04C-D4351282FB55").ID);
process.LogMessage("Получили карточку папок");
// получение ярлыка
Shortcut oShortcut = oFoldersCard.GetHardLink(dvCard.ID);
process.LogMessage("Получили ярлык, перемещаем");
// перемещение ярлыка
oShortcut.Move(dvTargetFolder.ID);
process.LogMessage("Ярлык перемещен успешно.");
}
catch (Exception ex)
{
// запись в журнал ошибки исполнения
process.LogMessage("Ошибка выполнения скрипта:" +
ex.Message);
}
return;
}
DocsVision 4.5: Руководство разработчика в среде СУБП
32
}
Удаление унаследованных прав на карточку
class DVScript
{
// Удаление унаследованных прав на карточке
// На входе – переменная “Карточка” типа “Карточка DV”
public void Execute(DocsVision.Workflow.Runtime.ProcessInfo process,
PassState passInfo)
{
try
{
ProcessVariable varCard =
process.GetVariableByName("Карточка");
// получение шлюза
DVGate dvGate;
dvGate = (DVGate)process.Gates[DVGate.GateID];
// получение объекта сессии для доступа к API
UserSession session = dvGate.Session;
// получение дескриптора
string cardID = ((DVCard)varCard.Value).ID;
ISecurable secureCard =
session.AccessManager.GetSecureCard(cardID);
byte[] descBytes = (byte[])secureCard.ADsSecurityDescriptor;
CommonSecurityDescriptor desc = new
CommonSecurityDescriptor(true, false, descBytes, 0);
// отключение наследования
desc.SetDiscretionaryAclProtection(true, false);
// сохранение измененного дескриптора
descBytes = new byte[desc.BinaryLength];
desc.GetBinaryForm(descBytes, 0);
secureCard.ADsSecurityDescriptor = descBytes;
process.LogMessage("Унаследованные права удалены");
}
catch (Exception ex)
{
process.LogMessage("Ошибка выполнения скрипта:" +
ex.Message);
}
return;
}
}
DocsVision 4.5: Руководство разработчика в среде СУБП
33
Download