Разработка сценариев
-
Написание кода сценария.
-
Отладка кода сценария.
-
Сохранение готового сценария в процессе или подпроцессе.
Код сценария может быть написан непосредственно в диалоговом окне Редактирование скрипта, в диалоговом окне функции сценария, в любом другом редакторе или при помощи 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
) функции. При повторном вызове функции в метод будут переданы новые данные.