<< Click to Display Table of Contents >> Разработка > Примеры разработки > Согласование по регламенту Как создать новый тип сценария для правила согласования |
Ситуация
Кроме этапов согласования в системе Directum RX можно добавить на схему правила согласования этапы с вычислениями – сценарии.
Предположим, что в процессе согласования после подписания требуется автоматически присваивать номер служебным запискам. В стандартной поставке Directum RX такого этапа согласования и сценария нет. Нужно создать новый тип сценария.
Решение
1.В своем модуле создайте тип справочника путем наследования от базового справочника «Этап выполнения сценария» (ApprovalFunctionStageBase):
2.В новом типе справочнике «Автонумерация служебных записок» (AutoNumberingOfMemo) добавьте серверную функцию и напишите ее код.
/// <summary>
/// Выполнить сценарий.
/// </summary>
/// <param name="approvalTask">Задача на согласование по регламенту.</param>
/// <returns>Результат выполнения сценария.</returns>
public override Sungero.Docflow.Structures.ApprovalFunctionStageBase.ExecutionResult Execute(Sungero.Docflow.IApprovalTask approvalTask)
{
var result = base.Execute(approvalTask);
var document = approvalTask.DocumentGroup.OfficialDocuments.SingleOrDefault();
if (document == null)
return this.GetErrorResult("Не найден документ.");
if (document.DocumentKind == null)
return this.GetErrorResult("Не найден вид документа.");
var documentRegisters = Sungero.Docflow.PublicFunctions.OfficialDocument.GetDocumentRegistersByDocument(document, Sungero.Docflow.RegistrationSetting.SettingType.Numeration);
if (!documentRegisters.Any())
return this.GetErrorResult("Не найден журнал регистрации.");
try
//Регистрация документа.
{
Sungero.Docflow.PublicFunctions.OfficialDocument.RegisterDocument(document, documentRegisters.First(), Calendar.Today, null, false, false);
document.Save();
}
catch (Exception ex)
{
result = this.GetRetryResult(string.Empty);
}
return result;
}
3.Чтобы новый тип сценария можно было выбрать в веб-клиенте, программно создайте его запись. Для этого в модуле создайте функцию инициализации CreateAutoNumberingOfMemoStage() и напишите ее код.
/// <summary>
/// Создание записи нового типа сценария "Автонумерация служебных записок".
/// </summary>
public static void CreateAutoNumberingOfMemoStage()
{
InitializationLogger.DebugFormat("Init: Create stage for automatic numbering of memos.");
if (DEV.MyCompany.AutoNumberingOfMemos.GetAll().Any())
return;
var stage = DEV.MyCompany.AutoNumberingOfMemos.Create();
stage.Name = "Автонумерация служебных записок";
stage.TimeoutInHours = 4;
stage.Save();
}
ВАЖНО. Вызовите добавленную функцию в событии Initializing():
public override void Initializing(Sungero.Domain.ModuleInitializingEventArgs e)
{
CreateAutoNumberingOfMemoStage();
}
4.Проверьте форму созданного справочника. Добавьте необходимые контролы или удалите ненужные. В этом примере разработки форма справочника не изменялась.
5.Сохраните изменения и опубликуйте разработку.
6.В веб-клиенте Directum RX добавьте на схему правила согласования блок «Сценарий» и нажмите на название.
7.В открывшемся окне нажмите на кнопку и выберите из списка этап «Автонумерация служебных записок», задайте необходимые настройки.
В результате схема правила согласования будет выглядеть так:
Для добавления новых сценариев в среде разработки переопределяйте функции базового решения: Execute(), Abort(), CheckCompletionState(), Validate(), Rework().
Пример использования функции Execute(). Проверка документов для преобразования в формат PDF
|
Пример использования функции Abort(). Прекращение задачи на рассмотрение
|
Пример использования функции CheckCompletionState(). Проверка состояния задачи на рассмотрение
|
Пример использования функции Validate(). Проверка схемы правила согласования
|
Пример использования функции Rework(). Отправка задания на доработку
|
© Компания Directum, 2024 |