Организация вынесения нескольких резолюций по одному документу

Несколько резолюций по документу

В статье будут рассмотрены следующие задачи:

  1. Создание нескольких резолюций по одному документу.
  2. Создание задач по каждой резолюции.
  3. Изменение вида стандартной страницы: добавление вкладки Рассмотрение для определенного типа документа для информативного отображения задач по каждой резолюции. 

Создание резолюций

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

Сценарий для создания нескольких результатов резолюций

Пример сценария без использования PublicAPI

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

Для корректной работы сценария необходимо подключить пространства имен:

using EleWise.ELMA.Documents.Models;
using EleWise.ELMA.Services;

Текст сценария:

var resolution = ((IDocumentExt)context.Doc).Resolution.FirstOrDefault();
if (resolution == null)
{
// Создание новой резолюции

resolution = InterfaceActivator.Create<Resolution>();
resolution.Author = context.AvtorRezolyucii; // Автор резолюции
resolution.Date = context.DataRezolyucii; // Дата резолюции
resolution.Document = context. Doc; // Документ, по которому вынесли резолюцию
resolution.Status = ResolutionStatus.Complete; // Статус резолюции
}
// Создание результата
var addResult = InterfaceActivator.Create<ResolutionResult>();
addResult.CreationDate = context.DataRezolyucii; // Дата резолюции
addResult.Text = context.TekstRezolyucii; // Текст резолюции

addResult.User = context.AvtorRezolyucii; // Автор резолюции
addResult.Resolution = (Resolution)resolution; // Резолюция
resolution.Results.Add(addResult); // Добавление результата
resolution.Save(); // Сохранение результата

Пример сценария с использованием PublicAPI 

Примечание
Актуальная документация по PublicAPI доступна по ссылке.

Для корректной работы сценария необходимо подключить пространства имен:

using EleWise.ELMA.API;

Текст сценария:

var resolution = ((IDocumentExt)context.Doc).Resolution.FirstOrDefault();
if (resolution == null)
{
	resolution = PublicAPI.Docflow.Objects.Resolution.Create();
    resolution.Author = context.AvtorRezolyucii; // Автор резолюции
    resolution.Date = context.DataRezolyucii; // Дата резолюции
    resolution.Document = context.Doc; // Документ, по которому вынесли резолюцию
    resolution.Status = ResolutionStatus.Complete; // Статус резолюции
}
// Создание результата
var addResult = PublicAPI.Docflow.Objects.ResolutionResult.Create();
addResult.CreationDate = context.DataRezolyucii; // Дата резолюции
addResult.Text = context.TekstRezolyucii; // Текст резолюции

addResult.User = context.AvtorRezolyucii; // Автор резолюции
addResult.Resolution = (Resolution)resolution; // Резолюция
resolution.Results.Add(addResult); // Добавление результата
resolution.Save(); // Сохранение результата

Создание задач

Для отображения задач на вкладке Рассмотрение в объект Задача необходимо добавить булевый атрибут, например, ResolutionV. При создании задачи ему будет присваивается значение true.

Сценарий создает задачи исполнителям по резолюции со вложенным документом.

Сценариq для создания задач

Пример сценария без использования PublicAPI

Для корректной работы сценария необходимо подключить пространста имен:

using EleWise.ELMA.Documents.Models;
using EleWise.ELMA.Model.Services;
using EleWise.ELMA.Task.Models;

Текст сценария:

foreach (var user in context.Executors)
{
// Создание задачи
var task = InterfaceActivator.Create<Task>();
task.Subject = context.Name; // Тема задачи
task.Executor = user; // Исполнитель задачи
task.StartDate = context.DataRezolyucii; // Дата резолюции
task.EndDate = context.ExecutionDate; // Дата исполнения
task.Description = context.OrderText; // Описание задачи
task.ResolutionV = true; // Созданная переменная в объекте «Задача»
task.CreationAuthor = context.AvtorRezolyucii; // Автор задачи
// Добавление вложения
var newDocAtt = InterfaceActivator.Create<DocumentAttachment>();
newDocAtt.Document = context. Doc; // Вложенный документ
newDocAtt.CreationAuthor = task.CreationAuthor; // Автор вложения
newDocAtt.CreationDate = DateTime.Now; //Дата создания вложения
newDocAtt.Save(); // Сохранение вложения
task.DocumentAttachments.Add(newDocAtt); // Добавление вложения к задаче
task.Save(); // Сохранение задачи
}

Пример сценария с использованием PublicAPI

Примечание
Актуальная документация по PublicAPI доступна по ссылке.

Для корректной работы сценария необходимо подключить пространства имен:

using EleWise.ELMA.API;

Текст сценария:

foreach (var user in context.Executors)
{
    // Создание задачи
    var task = PublicAPI.Portal.TaskBase.Task.Create();
    task.Subject = context.Name; // Тема задачи
    task.Executor = user; // Исполнитель задачи
    task.StartDate = context.DataRezolyucii; // Дата резолюции
    task.EndDate = context.ExecutionDate; // Дата исполнения
    task.Description = context.OrderText; // Описание задачи
    task.ResolutionV = true; // Созданная переменная в объекте «Задача»
    task.CreationAuthor = context.AvtorRezolyucii; // Автор задачи
    // Добавление вложения
    var newDocAtt = PublicAPI.Docflow.Objects.DocumentAttachment.Create(context.Doc, task.CreationAuthor);
    task.DocumentAttachments.Add(newDocAtt); // Добавление вложения к задаче
    task.Save(); // Сохранение задачи
}

Изменение вида страницы

Для удобного отображения информации о резолюциях по документу и задачам, созданным по каждой резолюции, необходимо внести изменения в стандартный вид вкладки Рассмотрение в определенном типе документа. После внесения изменений страница будет иметь следующий вид:

Для изменения стандартного вида необходимо заменить/ добавить следующие файлы конфигурации:

\Web\Modules\EleWise.ELMA.Documents.Docflow.Web\Views\Resolution\Info.cshtml

\Web\Modules\EleWise.ELMA.Documents.Docflow.Web\Views\Resolution\Results.cshtml

\Web\Modules\EleWise.ELMA.Documents.Docflow.Web\Views\Resolution\ResultsContent.cshtml

\Web\Modules\EleWise.ELMA.Documents.Docflow.Web\Views\Resolution\ResultsContentExt.cshtml

\Web\Modules\EleWise.ELMA.Documents.Docflow.Web\Views\Resolution\ResultsExt.cshtml

\Web\Modules\EleWise.ELMA.Documents.Docflow.Web\Views\Shared\ResolutionGridExt.cshtml

 

Внести изменения в добавленные файлы:

  • в файле \Web\Modules\EleWise.ELMA.Documents.Docflow.Web\Views\Resolution\Info.cshtml в строке @{if(Model.Entity.Document.TypeUid == InterfaceActivator.UID<Тип Документа>()) указать тип документа, по которому будет несколько резолюций;
  • в файле \Web\Modules\EleWise.ELMA.Documents.Docflow.Web\Views\Shared\ResolutionGridExt.cshtml в строке filter.Query = String.Format("DocumentAttachments in (Document = {0}) and CreationAuthor = {1} and ResolutionV = true",document.Id,user.Id) указать созданный булевый атрибут в объекте Задача.

 Примеры форм приложены в архиве.

Прикрепленные файлы