[ELMA3] Прерывание задач согласования из скрипта
В сценарии осуществляется прерывание активных задач согласования у определенного документа.
Пример сценария с использованием PublicAPI
Примечание
Актуальная документация по PublicAPI доступна по ссылке.
Внимание!
Сценарий, указанный ниже, актуален для версий системы ELMA до 3.15.38 включительно.
Контекстная переменная:
context.Dokument – переменная типа Документ, тип связи – Список.
Пространство имен:
using EleWise.ELMA.API;
Текст сценария:
foreach (var group in PublicAPI.Docflow.Tasks.GetActiveApprovementGroups(context.Dokument))
{
PublicAPI.Docflow.Objects.Tasks.ApprovementTaskGroup.Terminate(group, false);
}
Пример сценария без использования PublicAPI
Для работы сценария нужно подключить сборки:
EleWise.ELMA.Documents
EleWise.ELMA.Documents.Docflow
Пространства имен:
using EleWise.ELMA.Documents.Managers; using EleWise.ELMA.Documents.Models; using EleWise.ELMA.Documents.Models.Tasks; using EleWise.ELMA.Tasks.Models;Текст сценария:
//Тут загружаются активные листы согласования по документу (документ должен лежать в контекстной переменной context.DogovorArendy)
var groups = ApprovementTaskGroupManager.Instance.GetActive(new List<IDocument> { context.DogovorArendy }).ToList();
//Пробегаемся по активным листам согласования
groups.ForEach(g =>
{
//Проставляем для листов статус прервано
g.ApprovementList.Items.ToList().ForEach(i =>
{
i.Results.ToList().ForEach(r =>
{
if (r.Status == ApprovalStatus.None)
{
r.Status = ApprovalStatus.Terminated;
r.Save();
}
});
});
//Проставляем для задача согласования статус прервано
g.Tasks.ToList().ForEach(t =>
{
if (t.ApprovalStatus == ApprovalStatus.None)
{
if (t.IsActive())
t.Status = TaskStatus.WasClosed;
t.ApprovalStatus = ApprovalStatus.Terminated;
t.ListItem.Results.ToList().ForEach(r =>
{
if (r.Status == ApprovalStatus.None)
{
r.Status = ApprovalStatus.Terminated;
r.Save();
}
});
t.Save();
}
});
//Проставляем статус для листа согласования
g.Status = ApprovalStatus.Terminated;
g.Save();
});