Разработка сценариев
-
Написание кода сценария.
-
Отладка кода сценария.
-
Сохранение готового сценария в процессе или подпроцессе.
Код сценария может быть написан непосредственно в диалоговом окне Редактирование скрипта, в диалоговом окне функции сценария, в любом другом редакторе или при помощи Visual Studio.NET — с последующей вставкой полученного кода в функцию процесса.
-
Mscorlib.dll -
System.dll -
System.Core.dll -
System.Data.dll -
System.ServiceModel.dll -
System.Xml.dll -
DocsVision.Platform.dll -
DocsVision.Platform.CardLib.dll -
DocsVision.Platform.ObjectManager.dll -
DocsVision.Platform.ObjectModel.dll -
DocsVision.ObjectManager.Interop.dllДанная библиотека может быть пропущена. Если в настройках сценария будет выставлен флаг
Не добавлять ссылку на DocsVision.ObjectManager.Interop.dll, будет подключена сборкаDocsVision.Platform.ObjectManager.dll. -
DocsVision.Workflow.Interfaces.dll -
DocsVision.Workflow.Objects.dll -
DocsVision.Workflow.Runtime.dll -
DocsVision.Workflow.Functions.dll -
DocsVision.Workflow.Gates.dll -
DocsVision.BackOffice.ObjectModel.dll -
DocsVision.SecurityManager.Interop.dll -
DocsVision.HelperAPI.Interop.dll
|
В сценариях, приведенных далее, будет использоваться сборка |
При добавлении в карточку бизнес-процесса сценария, автоматически формируется стандартная структура класса сценария — DVScript, со стандартной точкой входа — метод Execute:
class DVScript
{
public void Execute (ProcessInfo process, PassState passInfo) (1)
{
try
{
ProcessVariable oVar = process.GetVariableByName("Var1"); (2)
oVar.Value = "Scripted"; (3)
process.LogMessage ("Значение переменной изменено"); (4)
}
catch (Exception ex)
{
process.LogMessage("Ошибка выполнения скрипта:" + ex.Message); (5)
}
return;
}
}
| 1 | Стандартная функция, которая будет вызвана подсистемой СУБП.
Входные параметры функции:
|
| 2 | Пример — получение переменной процесса с именем Var1. |
| 3 | Присвоение переменной нового значения. |
| 4 | Запись в журнал процесса. |
| 5 | Запись в журнал ошибки исполнения. |
Если в сценарии идет обращение к контексту объектов, то вместо его создания из пользовательской сессии достаточно изменить точку входа. Также необходимо подключить пространство имён DocsVision.Platform.ObjectModel:
public void Execute (ProcessInfo process, PassState passInfo, ObjectContext objectContext)
public ExecResultEnum Execute(ProcessInfo process, PassState passInfo)
Вариант с ExecResultEnum позволяет после завершения сценария оставить функцию активной или ожидающей какого-то события — сценарий будет запущен повторно после наступления события или (в зависимости от ExecResultEnum) при следующем проходе.
|
В ранних версиях Docsvision подобное поведение можно было организовать при помощи вызова в сценарии исключения типа |
Сигнатура приведенного метода не является жесткой — список параметров может формироваться разработчиком сценария. Допускается использование параметров определённых типов, указанных ниже.
| Тип | Привязка к объекту |
|---|---|
|
Расширенная объектная модель текущего бизнес-процесса. |
|
Объектная модель текущего бизнес-процесса. |
|
Объектная модель над данными текущей выполняемой функции. |
|
Объектная модель текущего прохода исполняемой функции. |
|
Исполняемая функция "Сценарий". |
|
Интерфейс |
|
Интерфейс |
|
Объект представляющий текущий |
|
Пользовательская сессия, в контексте которой работает текущий бизнес-процесс. Эта сессия не имеет отношения к сессии, хранящейся в шлюзе к Docsvision, текущего бизнес-процесса. |
|
Проинициализированный контекст для работы с объектной моделью над данными, доступной через библиотеку |
|
Шлюз к Docsvision текущего бизнес-процесса. |
|
Шлюз к почте текущего бизнес-процесса. |
|
Шлюз к файловой системе текущего бизнес-процесса. |
|
Шлюз к базовым типам текущего бизнес-процесса. |
|
Шлюз к |
|
Шлюз к |
|
Шлюз к 1C текущего бизнес-процесса. |
Тип стороннего шлюза |
Любой сторонний шлюз, который реализует интерфейс |
Кроме того, предусмотрено использование переменной типа ProcessVariable — переменная процесса.
-
У параметра осуществляется поиск атрибута типа
VariableNameAtrribute, в значении которого должно быть указано название переменной бизнес-процесса. Переменную требуется передать в выполняемый сценарий.Если такой атрибут у параметра отсутствует, то в качестве имени переменной принимается имя самого параметра метода.
-
Если переменная с полученным именем не найдена в бизнес-процессе, то в качестве значения параметра будет передан
null. -
Если значение параметра определить не удалось, то в качестве его значения принимается
DefaultValueданного параметра. ЕслиDefaultValueравноDBValue.Null, то оно принимается равнымnull.
using System;
using System.Xml; (1)
using DocsVision.Workflow.Objects;
using DocsVision.Workflow.Runtime;
using DocsVision.Workflow.Gates;
using DocsVision.Platform.HelperAPI; (2)
using DocsVision.Workflow.Functions;
using DocsVision.Platform.ObjectManager; (3)
namespace DVScriptHost
{
class DVScript
{
public ExecResultEnum Execute( (4)
ProcessInfo process (5)
, PassState passInfo (6)
, UserSession session (7)
, DVGate gate (8)
, [VariableName("Input card")] ProcessVariable inputCard (9)
, ProcessVariable outputCard (10)
)
{
return ExecResultEnum.Done; (11)
}
}
}
| 1 | Подключение системных библиотек. |
| 2 | Подключение библиотек СУБП. |
| 3 | Подключение дополнительных пространств имён. |
| 4 | Стандартная функция, которая будет вызвана подсистемой СУБП. |
| 5 | Текущий процесс. |
| 6 | Описание состояния функции в процессе. |
| 7 | Сессия текущего процесса. |
| 8 | Шлюз к Docsvision текущего процесса. |
| 9 | Переменная текущего БП с именем "Input card", т.к. присутствует атрибут VariableName. |
| 10 | Переменная текущего БП с именем "outputCard". |
| 11 | Выполнение операций, предусмотренных бизнес-логикой. |
В приведенном примере метод Execute принимает несколько параметров, два из которых (inputCard, outputCard) будут получены их переменных процесса. Переменные процесса будут получены по схеме приведенной выше.
Сам метод Execute будет вызван при запуске функции, в которой он определён. После выполнения операций, предусмотренных бизнес-логикой, метод должен вернуть результат своей работы, например, ExecResultEnum.Done — "Функция успешно выполнилась". Параметр passInfo используется для передачи в метод контекста выполнения (см. описание типа PassState) функции. При повторном вызове функции в метод будут переданы новые данные.