[ELMA3] Автоматическое переназначение задач-поручений при замещении
В приведенном примере рассматривается создание перехватчика (listener) для переназначения задач-поручений для действующих замещений. Стандартный механизм замещения не распространяется на простые задачи.
Пример сценария с использованием PublicAPI
Примечание
Актуальная информация по PublicAPI доступна по ссылке.
Внимание!
Сценарии, указанные ниже, актуальны для версий системы ELMA до 3.12.1 включительно.
Пространства имен:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using EleWise.ELMA.API;
using EleWise.ELMA.ComponentModel;
using EleWise.ELMA.Runtime.NH.Listeners;
using EleWise.ELMA.Security.Models;
using EleWise.ELMA.Tasks.Models;
using NHibernate.Event;
Текст сценария:
[Component]
public class ForTaskReplacement : PostFlushEventListener
{
//Создание объекта
public override void OnPostInsert(PostInsertEvent @event)
{
//Проверяем @event.Entity на нужный тип и выполняем с ним необходимы действия
var task = @event.Entity as ITask;
if(task != null)
{
//Создаем фильтр для поиска активного замещения для исполнителя текущей задачи
var rplscmnt = PublicAPI.Portal.Objects.Security.Replacement.Filter().SourceUser((User)task.Executor).Status(PublicAPI.Enums.Security.ReplacementStatus.Active).Find().FirstOrDefault();
//Проверка наличия замещения
if (rplscmnt != null)
{
//Соотнесение даты начала и конца замещения с сроком текущей задачи
if (rplscmnt.StartDate < task.StartDate.Value)
{
if (rplscmnt.EndDate.AddMinutes(5) > task.StartDate.Value)
{
//Подмена исполнителя задачи замещающим пользователем
task.Executor = rplscmnt.TargetUser;
task.Save();
}
}
}
}
}
}
Пример сценария без использования PubicAPI
Создадим объект Перехватчик.
Для корректной работы сценария необходимо подключить сборку Microsoft.CSharp.
Пространства имен:
using System; using System.Collections.Generic; using System.Linq; using System.Text;
using EleWise.ELMA.ComponentModel;
using EleWise.ELMA.Model.Managers;
using EleWise.ELMA.Model.Services;
using EleWise.ELMA.Runtime.NH.Listeners;
using EleWise.ELMA.Security.Models;
using EleWise.ELMA.Tasks.Models;
using NHibernate.Event;
Текст сценария:
namespace EleWise.ELMA.ConfigurationModel.Scripts { /// <summary> /// Модуль сценариев объекта "Замещение обычных задач" /// </summary> public class ForTaskReplacementScripts : EleWise.ELMA.Model.Scripts.Entities.EntityScriptModule<IForTaskReplacement> { [Component] public class ForTaskReplacement : PostFlushEventListener { //Создание объекта public override void OnPostInsert(PostInsertEvent @event) { //Проверяем @event.Entity на нужный тип и выполняем с ним необходимы действия var task = @event.Entity as ITask; if(task != null) { //Создаем фильтр для поиска активного замещения для исполнителя текущей задачи var fl = InterfaceActivator.Create<IReplacementFilter>(); fl.SourceUser = task.Executor; fl.Status = ReplacementStatus.Active; //Поиск замещения var rplscmnt = EntityManager<IReplacement>.Instance.Find(fl, null).FirstOrDefault(); //Проверка наличия замещения if (rplscmnt != null) { //Соотнесение даты начала и конца замещения с сроком текущей задачи if (rplscmnt.StartDate < task.StartDate.Value) { if (rplscmnt.EndDate.AddMinutes(5) > task.StartDate.Value) { //Подмена исполнителя задачи замещающим пользователем task.Executor = rplscmnt.TargetUser; task.Save(); } } } } } } } }