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

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

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

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

 

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

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

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

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

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(); // Сохранение результата

Используемые пространства имен

using EleWise.ELMA.Documents.Models;
using EleWise.ELMA.Services;
 
Создание аналогичного скрипта с использованием PublicAPI
Актуальная документация по PublicAPI доступна по ссылке
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.

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

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

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 = item.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(); // Сохранение задачи
}

Используемые пространства имен

using EleWise.ELMA.Services;
using EleWise.ELMA.Documents.Models;
 
Создание аналогичного скрипта с использованием PublicAPI
Актуальная документация по PublicAPI доступна по ссылке
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 = item.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);

указать созданный булевый атрибут в объекте Задача.

 

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

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