[ELMA3] Еженедельная проверка на наличие дней рождений контактов и создание задач ответственным за них
В статье приведено описание реализации процесса для еженедельной проверки дней рождения контактов, предстоящих на следующей неделе. При наличии дня рождения, ответственному за контакт пользователю ставится задача.
Чтобы бизнес-процесс запускался еженедельно, необходимо в настройках стартового события изменить триггер на Таймер, в появившейся вкладке Настройки таймера установить параметры запуска: еженедельно в выбранный день. Для получения списка пользователей, день рождения которых попадает в неделю с момента запуска процесса, и создания задач, используйте сценарий, приведенный ниже.
Пример сценария с использованием PublicAPI
Примечание
Актуальная документация по PublicAPI доступна по ссылке.
Внимание!
Сценарий, указанный ниже, актуален для версий системы ELMA до 3.15.38 включительно.
Контекстная переменная:
- context.Spisok – переменная типа Контакт с типом связи Список.
Пространство имен:
using EleWise.ELMA.API;
Текст сценария:
var kontragenti = PublicAPI.CRM.Contractor.Find(FetchOptions.All).ToList(); kontragenti.ForEach(kontr =>{ var kontrakti = kontr.Contacts.ToList(); //в каждом контрагенте просматриваем все имеющихся контактов kontrakti.ForEach(k =>{ if ((k.Birthday != null)&(kontr.Responsible != null)) //выбираем только те контакты, в которых указаны даты рождения и ответственный { if ((k.Birthday.Value.DayOfYear > context.WorkflowInstance.StartDate.Value.DayOfYear)& (k.Birthday.Value.DayOfYear < (context.WorkflowInstance.StartDate.Value.DayOfYear + 7))) //выбираем только тех контактов, у кого дата рождения попадает в неделю с момента запуска процесса { //если нужно вывести полученный список, добавляем контакт в контекстную переменную //типа "Контакт" с типом связи "Список" context.Spisok.Add(k); //создаем задачу и заполняем все ее обязательные поля var tsk = PublicAPI.Portal.TaskBase.Task.Create(); //в качестве автора задачи Вы можете указать любого другого пользователя tsk.CreationAuthor = kontr.Responsible; tsk.CreationDate = DateTime.Now; //в зависимости от срока выполнения так же можно указать другое значение даты окончания задачи tsk.EndDate=DateTime.Now.AddDays(1); //записываем в качестве исполнителя задачи ответственного за данного контрагента tsk.Executor = kontr.Responsible; //в теме задачи прописываем, у кого день рождения и к какому контрагенту этот контакт относится tsk.Subject = "День рождения у " + k.Name + " из " + kontr.Name; tsk.Description = "Любое описание задачи"; tsk.Save(); } } }); });
Пример сценария без использования PublicAPI
Для корректной работы сценария необходимо подключить сборки:
Elewise.ELMA.Project
Elewise.ELMA.Documents
Elewise.ELMA.Documents.Docflow
Elewise.ELMA.Tasks
Пространства имен:
using EleWise.ELMA.CRM.Models; using EleWise.ELMA.Model.Common; using EleWise.ELMA.Model.Managers; using EleWise.ELMA.Tasks.Models; using EleWise.ELMA.Tasks.Managers; using EleWise.ELMA.Model.Services;Текст сценария:
//просматриваем всех имеющихся контрагентов var kontragenti = EntityManager<Contractor>.Instance.Find(FetchOptions.All); kontragenti.ForEach(kontr =>{ //в каждом контрагенте просматриваем все имеющихся контактов var kontakti = kontr.Contacts.ToList(); kontakti.ForEach(k =>{ //выбираем только те контакты, в которых указаны даты рождения и ответственный if ((k.Birthday != null)&(kontr.Responsible != null)) { //выбираем только тех контактов, у кого дата рождения попадает в неделю с момента запуска процесса if ((k.Birthday.Value.DayOfYear > context.WorkflowInstance.StartDate.Value.DayOfYear)& (k.Birthday.Value.DayOfYear < (context.WorkflowInstance.StartDate.Value.DayOfYear + 7))) { //если нужно вывести полученный список, добавляем контакт в контекстную переменную //типа "Контакт" с типом связи "Список" context.Spisok.Add(k); //создаем задачу и заполняем все ее обязательные поля var tsk = InterfaceActivator.Create<Task>(); //в качестве автора задачи Вы можете указать любого другого пользователя tsk.CreationAuthor = kontr.Responsible; tsk.CreationDate = DateTime.Now; //в зависимости от срока выполнения так же можно указать другое значение даты окончания задачи tsk.EndDate=DateTime.Now.AddDays(1); //записываем в качестве исполнителя задачи ответственного за данного контрагента tsk.Executor = kontr.Responsible; //в теме задачи прописываем, у кого день рождения и к какому контрагенту этот контакт относится tsk.Subject = "День рождения у " + k.Name + " из " + kontr.Name; tsk.Description = "Любое описание задачи"; tsk.Save(); } } }); });