Перейти к содержанию

API скриптов

В данном разделе представлена информация о свойствах и методах, которые могут использоваться при написании сценариев.

Доступные свойства:

  • Сontext - контекст выполнения в обработчике WorkflowEngine.

    // Меняем у экземпляра процесса имя Context.ProcessInstance.Name = "New name for process";

  • DbScope - объект, обеспечивающий доступ к базам данных.

    // Создаем новое подключение к базе по другому connectionString using (dbScope.CreateNew("SomeConnectionString)) { ... }

  • Container - IoC-контейнер для получения любых необходимых зависимостей в рамках системы.

    // Резолвим объект из Unity-контейнера Container.Resolve<IRoleRepository>();

  • ValidationResult - результат валидации. В него можно записывать данные, которые будут отображены пользователю после выполнения обработки.

    // Добавляем в результат валидации ответ обработки ValidationResult.AddInfo(this, "Some process answer");

  • Session - сессия текущего пользователя.

    // Получаем из сессии имя текущего сотрудника var userName = Session.User.Name;

  • StoreCardObject - объект карточки, в контексте сохранения которой происходит обработка процесса.

    // Получаем задание из карточки, переданной из клиента, которое было завершено StoreCardObject.Tasks.FirstOrDefault(x => x.Action == CardTaskAction.Completed);

  • CardObject - объект карточки, в контексте которой происходит выполнение процесса. Данный объект содержит экземпляр карточки после основного сохранения и будет сохранен по окончанию обработки в случае, если в нем есть изменения. Данное свойство устарело, рекомендуется использовать метод GetCardObjectAsync.

    // Проверяем, есть ли в карточке файлы if (CardObject.Files.Count > 0) { ... }

  • CardID - идентификатор карточки, в контексте которой происходит выполнение процесса.

  • Card - представление строковых секций карточки посредством dynamic-полей. Данное свойство устарело, рекомендуется использовать метод GetCardAsync.

    // Устанавливаем в секцию DocumentCommonInfo в поле Amount значение 10000 Card.DocumentCommonInfo.Amount = 10000;

  • Tables - представление коллекционных секций карточки посредством dynamic-полей. Данное свойство устарело, рекомендуется использовать метод GetTablesAsync.

    // Возвращает список строк в секции OutgoingRefDocs Tables.OutgoingRefDocs.Count

  • Tasks - список текущих активных заданий в контексте обработки. Список никогда не равен null. Через данное свойство списком можно также управлять.

    // Устанавливаем во все новые задания значение в определенное поле foreach(var task in Tasks) { if(task.State == CardRowState.Inserted) { task.Card.Sections["MagicSection"].RawFields["MagicNumber"] = 42; } }

  • Task - возвращает первое задание из списка текущий активных заданий. Возвращает null, если список пустой. Может использоваться, например, для получения данных завершаемого пользователем задания, т.к. это задание добавляется в Tasks первым.

    // Записываем в сигнал комментарий завершаемого задания if(Task != null) { Signal.Comment = Task.Section["KrTask"].RawFields.TryGet<string>("Comment"); }

  • FileContainer - контейнер с файлами карточки, в контексте которой происходит работа с процессом. Данное свойство устарело, рекомендуется использовать метод GetFileContainerAsync.

    // Добавляем файл в карточку с именем Test.txt и текстом "Новый файл" FileContainer .BuildFile("Test.txt") .SetContentText("Новый файл", System.Text.Encoding.Default) .AddWithNotification();

  • Action - представление параметров текущего действия посредством dynamic-полей.

    // Устанавливаем в текущем действии в параметр SomeParam строковое значение "Value" Action.SomeParam = "Value";

  • ActionObject - объект текущего действия. Имеет тип WorkflowActionStateStorage.

    // записываем в переменную идентификатор текущего действия var actionID = ActionObject.ID;

  • ActionHash - параметры текущего действия в виде структуры IDictionary<string, object>.

    // Устанавливаем в текущем действии в параметр SomeParam строковое значение "Value" ActionHash["SomeParam"] = "Value";

  • Node - представление параметров текущего экземпляра узла посредством dynamic-полей.

    // Устанавливаем в текущем узле в параметр SomeParam строковое значение "Value" Node.SomeParam = "Value";

  • NodeObject - объект текущего экземпляра узла. Имеет тип WorkflowNodeStateStorage.

    // записываем в переменную идентификатор текущего узла var nodeID = NodeObject.ID;

  • NodeHash - параметры текущего экземпляра узла в виде структуры IDictionary<string, object>.

    // Устанавливаем в текущем узле в параметр SomeParam строковое значение "Value" NodeHash["SomeParam"] = "Value";

  • Process - представление параметров текущего экземпляра процесса посредством dynamic-полей.

    // Устанавливаем в текущем процессе в параметр SomeParam строковое значение "Value" Process.SomeParam = "Value";

  • ProcessObject - объект текущего экземпляра процесса. Имеет тип WorkflowProcessStateStorage.

    // записываем в переменную идентификатор текущего процесса var processID = ProcessObject.ID;

  • ProcessHash - параметры текущего экземпляра процесса в виде структуры IDictionary<string, object>.

    // Устанавливаем в текущем процессе в параметр SomeParam строковое значение "Value" ProcessHash["SomeParam"] = "Value";

  • Signal - представление параметров текущего сигнала посредством dynamic-полей.

    // Устанавливаем в текущем сигнале в параметр SomeParam строковое значение "Value" Signal.SomeParam = "Value";

  • SignalObject - объект сигнала, который в данный момент обрабатывается.

    // Устанавливаем в текущем сигнале тип сигнала CustomSignalType SignalObject.Type = "CustomSignalType";

  • SignalHash - параметры текущего сигнала в виде структуры IDictionary<string, object>.

    // Устанавливаем в текущем сигнале в параметр SomeParam строковое значение "Value" SignalHash["SomeParam"] = "Value";

  • Cancel - значение типа bool, которое определяет, нужно ли остановить обработку текущего сигнала.

    // Отменяет обработку сигнала Cancel = true;

  • RetryInfo - значение типа WorkflowEngineRetryInfo, которое содержит информацию о состоянии и настройках повторной асинхронной обработки сигнала. С помощью него можно включить/отменить повторную асинхронную обработку сигнала при ошибке, задать период, через который должна выполниться следующая попытка асинхронной обработки сигнала, а также таймаут, через который асинхронная обработка сигнала после возникновения ошибки должна оставновиться.

    Important

    Данное свойство имеет значение только при асинхронной обработке сигнала. При синхронной обработке сигнала оно всегда имеет значение null.

    // Включаем повторную обработку сигнала, если при его обработке возникла ошибка RetryInfo.RetryAllowed = true;

Доступные методы:

  • GetCardObjectAsync - метод для получения объекта карточки, в контексте которой происходит выполнение процесса. Данный метод возвращает экземпляр карточки после основного сохранения, а все изменения данного экземпляра будут сохранены по окончанию обработки.

    // Проверяем, есть ли в карточке файлы var cardObj = await this.GetCardObjectAsync(); if (cardObj.Files.Count > 0) { ... }

  • GetCardAsync - метод возвращает представление строковых секций карточки посредством dynamic-полей.

    // Устанавливаем в секцию DocumentCommonInfo в поле Amount значение 10000 (await GetCardAsync()).DocumentCommonInfo.Amount = 10000;

  • GetTablesAsync - метод возвращает представление коллекционных секций карточки посредством dynamic-полей.

    // Возвращает список строк в секции OutgoingRefDocs (await GetTablesAsync()).OutgoingRefDocs.Count

  • GetFileContainerAsync - метод возвращает контейнер с файлами карточки, в контексте которой происходит работа с процессом.

    // Добавляем файл в карточку с именем Test.txt и текстом "Новый файл" (await GetFileContainerAsync()) .BuildFile("Test.txt") .SetContentText("Новый файл", System.Text.Encoding.Default) .AddWithNotification();

  • SetMainCard(Guid cardID) - метод для установки основной карточки процесса по ее ID.

    var amount = Card.DocumentCommonInfo.Amount; // вернет сумму из текущей карточки, к которой относится процесс SetMainCard(someCardID); // устанавливаем новую карточку как текущую var amount2 = Card.DocumentCommonInfo.Amount; // вернет сумму из другой карточки с идентификатором someCardID, к которой теперь относится процесс

  • GetTask(Guid taskID) - метод для получения объекта задания по его ID из карточки. Если задание не найдено, метод вернет null.

    // Получаем родительское задание для текущего задания в контексте обработки, если для него есть родительское задание if (Task?.ParentRowID.HasValue) { var parentTask = GetTask(Task.ParentRowID); }

  • AddInfo(string text) - метод для добавления сообщения в ValidationResult с уровнем Info.

    // Добавляем сообщение в ValidationResult AddInfo("Text to user");

  • AddInfo(string format, params object[] args) - метод для добавления сообщения с форматом в ValidationResult с уровнем Info.

    // Добавляем сообщение в ValidationResult AddInfo("Text to user {0}", this.Session.User.Name);

  • AddWarning(string text) - метод для добавления сообщения в ValidationResult с уровнем Warning.

    // Добавляем сообщение с предупреждением в ValidationResult AddWarning("Warning to user");

  • AddWarning(string format, params object[] args) - метод для добавления сообщения с форматом в ValidationResult с уровнем Warning.

    // Добавляем сообщение с предупреждением в ValidationResult AddWarning("Warning to user {0}", this.Session.User.Name);

  • AddError(string text) - метод для добавления сообщения в ValidationResult с уровнем Error.

    // Добавляем сообщение об ошибке в ValidationResult AddError("Error to user");

  • AddError(string format, params object[] args) - метод для добавления сообщения с форматом в ValidationResult с уровнем Error.

    // Добавляем сообщение об ошибке в ValidationResult AddError("Error to user {0}", this.Session.User.Name);

  • AddValidationError(string text) - метод для добавления сообщения в ValidationResult с уровнем Error без создания карточки ошибки для бизнес-процесса.

    Note

    Если в ValidationResult присутствуют ошибки, добавленные другими методами, или если происходит асинхронная обработка сигнала, то карточка ошибки будет создана.

    // Добавляем сообщение об ошибке в ValidationResult, которое будет возвращено пользователю, но не записано в ошибки процесса AddValidationError("Error to user {0}", this.Session.User.Name);

  • AddValidationError(string format, params object[] args) - метод для добавления сообщения с форматом в ValidationResult с уровнем Error без создания карточки ошибки для бизнес-процесса.

    Note

    Если в ValidationResult присутствуют ошибки, добавленные другими методами, или если происходит асинхронная обработка сигнала, то карточка ошибки будет создана.

    // Добавляем сообщение об ошибке в ValidationResult, которое будет возвращено пользователю, но не записано в ошибки процесса AddValidationError("Error to user {0}", this.Session.User.Name);

API скриптов в условиях для кнопок бизнес-процессов

В связи с тем, что проверка условий на доступ к тайлам осуществляется вне контекста выполнения обработки процесса, API скриптов в условиях для тайлов упрощено.

Доступные свойства:

  • DbScope - объект, обеспечивающий доступ к базам данных.

  • Container - IoC-контейнер для получения любых необходимых зависимостей в рамках системы.

  • Session - сессия текущего пользователя.

  • CardObject - объект карточки, в контексте которой происходит выполнение нажатия кнопки. Не задан для тайлов запуска глобального процесса.

  • CardID - идентификатор карточки, в контексте которой происходит выполнение процесса. Не задан для тайлов запуска глобального процесса.

  • Card - представление строковых секций карточки посредством dynamic-полей. Не задан для тайлов запуска глобального процесса.

  • Tables - представление коллекционных секций карточки посредством dynamic-полей. Не задан для тайлов запуска глобального процесса.

  • Context - общий контекст компиляции для условий кнопок бизнес-процесса. Имеет тип IWorkFlowEngineTileContext. Данный объект контекста имеет следующие свойства:

    • Info - можно использовать как хранилище любой дополнительной информации. Имеет тип IDictionary<string, object?>.
    • ProcessInstances - здесь хранятся экземпляры бизнес-процессов по идентификатору процесса и идентификатору карточки. Используется в качестве кэша для методов TryGetProcessInstanceAsync и GetAllProcessInstancesAsync, описанных ниже. Имеет тип IDictionary<(Guid ProcessTemplateID, Guid? CardID), IList<WorkflowProcessStateStorage>>.

Доступные методы:

  • TryGetProcessInstanceAsync - получает экземпляр бизнес-процесса, к которому принадлежит кнопка или null, если экземпляров процессов для кнопки нет.

    #script // Получаем, активный процесс для кнопки. var processInstance = await this.TryGetProcessInstanceAsync(); if (processInstance is WorkflowProcessStateStorage instance) { ... }

Note

Метод TryGetProcessInstanceAsync получает первый экземпляр бизнес-процесса. Когда экземпляров несколько и/или необходимо получить все, используйте метод GetAllProcessInstancesAsync.

  • GetAllProcessInstancesAsync - получает все экземпляры бизнес-процессов, к которым принадлежит кнопка или пустой список, если экземпляров процессов для кнопки нет.

    #script // Получаем, все активные процессы для кнопки. var processInstances = await this.GetAllProcessInstancesAsync(); foreach (WorkflowProcessStateStorage instance in processInstances) { ... }

Back to top