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