logo

Создание напоминания о завершении задачи в сценарии

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

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

Пример сценария, который позволяет создать напоминание для пользователя, указанного в настройках ЗО (с использованием PublicAPI)

Примечание
Актуальная документация по PublicAPI доступна по ссылке.
Внимание!
Сценарий, указанный ниже, актуален для версий системы ELMA до 3.15.38 включительно.

Пространства имён:

using EleWise.ELMA.Model.Entities.EntityReferences;

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

var r = ReferenceOnEntity.Create(context.Zadacha); //создание ссылки на задачу      
var rem = PublicAPI.Portal.Objects.Common.Reminder.Create(); //создание напоминания
rem.RefObject = r; //ссылка на задачу, о которой следует напомнить
rem.RemindDate = context.SendTime; //время, в которое следует посылать напоминание
rem.RemindTo = context.Interval; //интервал времени, который остался до завершения задачи и который указывается в напоминании
rem.PropertyName = "StartDate"; //для задачи это может быть строка "StartDate" или "EndDate"
rem.Save(); //сохранение напоминания

Пример сценария, который позволяет создать напоминание для определённого пользователя (без использования PublicAPI)

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

EleWise.ELMA.Tasks

EleWise.ELMA.Workflow

Пространства имён:

using EleWise.ELMA.Model.Entities.EntityReferences;

using EleWise.ELMA.Common.Models;

using EleWise.ELMA.Tasks.Models;

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

/// <summary>
/// Переопределение метода создания задачи
/// </summary>
/// <param name="task">Задача</param>
/// <param name="context">Контекст процесса</param>
public override void OnTaskCreate(ITaskBase task, Context context)
{
    base.OnTaskCreate(task, context); //Исполнение основного сценария

    var user = PublicAPI.Portal.Security.User.LoadByLogin("admin"); //Пользователь, которому будет создано напоминание

    //Выполнение сценария от имени пользователя определяет, кому будет направлено напоминание. На каждого пользователя необходимо создать своё напоминание
    PublicAPI.Services.Security.RunByUser(user, () => {
        if (task != null && task.EndDate.HasValue){
            ReferenceOnEntity r = ReferenceOnEntity.Create(task); //Создание ссылки на задачу
            var reminder = new Reminder(); //Создание напоминания
            reminder.RefObject = r; //Ссылка на задачу, о которой следует напомнить
            reminder.RemindDate = task.EndDate.Value.AddMinutes(-10); //Время, в которое следует посылать напоминание
            reminder.RemindTo = task.EndDate.Value - reminder.RemindDate.Value; //Интервал времени, который остался до завершения задачи
            reminder.PropertyName = "EndDate"; //Для задачи принимает значения "StartDate" или "EndDate"
            reminder.Save(); //Сохранение напоминания
        }
    });
}