logo

[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();
});