Приветствую, коллеги!
Менеджеры попросили уведомления о задачах с высоким приоритетом на почту. Когда бывают в командировках, чтобы могли получать уведомления с основными параметрами задачи.

Хотел бы поинтересоваться, есть идеи как можно реализовать ?

Нравится

40 комментариев

Павел, мне кажется, самым простым и эффективным будет создание БП с двумя стартовыми сигналами:
1. При создании записи Активность, если приоритет критический
2. При изменений записи Активность, если приоритет был изменен и стал критическим
После этого достаточно выполнить два чтения данных: ответственного и активности.
Затем подготовить тело письма в задании-сценарии, в которое следует поместить основные параметры задачи. В конце нужен элемент Автоматическая отправка E-Mail.

Спасибо, Максим, большое!
Я уже думал как-то работать с модулем напоминаний, но это вариант кажется действительно эффективнее, если можно будет отправлять e-mail за некоторое время до наступления события.
Попробую сегодня и отпишусь.

а можно сделать стартовый сигнал "текущее время = время начала задачи - 2 часа", например?

Сложные фильтры на стартовый сигнал наложить нельзя. Да и не нужно это, ведь с 7.2 доступен таймер, с помощью которого можно прервать выполнение ветки процесса на определенное время.

Максим, а почему так сделано, что в элементе "Отправить e-mail" нельзя указать значения уже ранее прочтенных параметров сразу, а нужно использовать скрип ?

"Харитонов Павел" написал:

Максим, а почему так сделано, что в элементе "Отправить e-mail" нельзя указать значения уже ранее прочтенных параметров сразу, а нужно использовать скрип ?

Да, очень хотелось бы тело и тему письма составлять попроще, не приглашая программиста

На странице элемента БП есть поле для заполнения тела письма. В структуре элемента доступен параметр Body, который можно заполнить используя макросы/програмный код.

"Maxim Gritsenko" написал:

На странице элемента БП есть поле для заполнения тела письма. В структуре элемента доступен параметр Body, который можно заполнить используя макросы/програмный код.


Максим, здравствуйте.
За ответ спасибо, но он не совсем отвечает на вопрос
"Харитонов Павел" написал:Максим, а почему так сделано, что в элементе "Отправить e-mail" нельзя указать значения уже ранее прочтенных параметров сразу, а нужно использовать скрип ?

Вернее совсем не отвечает.

Добрый день!
Павел, непонятно, что Вы имеете ввиду под фразой "нужно использовать скрип".
Значения параметров вставляются исключительно средствами визуального интерфейса:

"Андрей Каспаревич" написал:
Павел, непонятно, что Вы имеете ввиду под фразой "нужно использовать скрип".

"Maxim Gritsenko" написал:В структуре элемента доступен параметр Body, который можно заполнить используя макросы/програмный код.

Вот. Максим написал. Макросы и программный код, который указывается с элементе процесса- задание сценарий.
"Андрей Каспаревич" написал:Значения параметров вставляются исключительно средствами визуального интерфейса:

Предложенный вами вариант вызывает ошибку при публикации. Я уже пробовал вставлять туда формулы, выбирать параметр способом, который вы показали- возникает ошибка. Собственно оно и непонятно, почему так происходит.

"Харитонов Павел" написал:Предложенный вами вариант вызывает ошибку при публикации. Я уже пробовал вставлять туда формулы, выбирать параметр способом, который вы показали- возникает ошибка. Собственно оно и непонятно, почему так происходит.

У меня получалось вставлять лишь сам e-mail:
[#Читать ответственного.Первый элемент результирующей коллекции.E-mail#]

Павел, мой скриншот демонстрирует простоту вставки параметра.
Владимир прав, в поле "Кому" нужно вставлять именно E-mail адрес контакта.

Да, коллеги. С полем Кому это я неверно параметр указывал. Поэтому ошибка выходила.
Прощу прощения.

Только вот один вопрос. Уведомление нужно не в момент постановки задачи, а перед ее началом. В принципе можно брать значение из активности- напоминания-время, только как лучше отсрочить отправку - С помощью таймера ? В элементе "Отправить e-mail" нет возможности указать дату и время отправки.

Спасибо за помощь.

"Харитонов Павел" написал:В принципе можно брать значение из активности- напоминания-время, только как лучше отсрочить отправку - С помощью таймера ?

А если кто-то перенесет эту задачу? Таймер-то не изменится

Может и перенести. Такой вариант, конечно, возможен, но его пока не учитываем. Хотя надо.

"Харитонов Павел" написал:

Может и перенести. Такой вариант, конечно, возможен, но его пока не учитываем. Хотя надо.

На мой взгляд bpm'online как раз позволяет избавиться от лишних e-mail'ов. А напоминать менеджерам поможет синхронизация с google calendar, например, если они не готовы использовать Bpm'online постоянно

"Владимир Соколов" написал:если они не готовы использовать Bpm'online постоянно

Спасибо, Владимир.
Они то готовы, но всегда есть возможность. Хотя идея хорошая. Только вот вопрос конфиденциальности, пожалуй, этого сделать не позволит.

Коллеги, при таких раскладх задача несколько усложняется, но остается решаемой.
Поменять время выполнения таймера нет возможности, а отменять можно двумя способами:
1) завершать процесс;
2) вызывать метод CancelExecuting() примерно так:

ProcessSchemaIntermediateCatchTimerEvent1.CancelExecuting();

Поймать изменение записи нужно в том же БП, в котором ставится таймер.
Кроме того, можно воспользовться планировщиком QUARTZ из кода вместо таймера, если требуется более гибкая настройка.

Коллеги, а никак нельзя взаимодействовать с уведомлениями ? По сути нужно то же самое, мне так кажется, только не флажок нарисовать, а письмо отправить.

Павел, с уведомлениями, в общем-то, можно взаимодействовать, но это будет сложнее предложенного варианта.
Разве что при добавлении напоминания можно стартовать БП и брать время из времени напоминания. Но напоминания создаются в тот же момент, что и запись, по которой будет напоминание.

Коллеги, попробовал.
Таймер не ставил, но почему-то отправка произошла только в 00:00 следующего дня. Это первый вопрос.
Второй.
Пробовал указать параметры в задании-сценарии для тела письма:

Body = "<p>Внимание! Приближается время начала задачи: [заголовок]<br> Начало: [Начало]<br> Контрагент: [Контрагент]<br> Контакт: [контакт]<br> Средства связи: [мобильный телефон], [рабочий телефон]</p>";
return true;

И получил ошибку:
А еще хочется указать в задании-сценарии название контакта, контрагента и средства связи. Что делал не так ?
Спасибо.

Здравствуйте, Павел!
В Body - это свойство элемента БП, воответсвенно, в задании-сценарии необходимо обращаться к нем укак к свойству, то есть:

SendEmailUserTask1.Body = "<p>Внимание! Приближается время начала задачи: [заголовок]<br> Начало: [Начало]<br> Контрагент: [Контрагент]<br> Контакт: [контакт]<br> Средства связи: [мобильный телефон], [рабочий телефон]</p>";
return true;

По поводу отправки на следующий день. Не понял, как она у Вас заработала, если процесс не опубликовался. Данные контакта, контрагента и т.д. можно получать с помощью четния данных или esq-запроса.

Спасибо, Андрей.

"Андрей Каспаревич" написал:Не понял, как она у Вас заработала, если процесс не опубликовался.

Я опробовал без задания-сценария процесс. Он опубликовался и запустился.
Андрей, попробовал с учетом рекомендаций. У меня появляется ошибка. Можете помочь, в чем она ?

Павел, в тексте ошибки четко же написано, что в поле "Контакт" активности не содержится значение, то есть там NULL, что недопустимо. НУжно заполнить поле "Контакт" или добавить проверку в БП.

"Андрей Каспаревич" написал:в тексте ошибки четко же написано, что в поле "Контакт" активности не содержится значение, то есть там NULL, что недопустимо.

Спасибо, Андрей. Да, я прочитал. Почему NULL не допустимо ?
Если вопросы кажутся очень глупыми, заранее простите. :smile:
"Андрей Каспаревич" написал:добавить проверку в БП.

Подскажите, как можно осуществить проверку стандартными свойствами элементов дизайнера на наличие значения в поле Контакт в Активности, чтобы пустить процесс по нужной ветке ?

Добрый день, Павел!
Проверку можно делать с помощью условий в условном потоке. Например, так:

Спасибо, Андрей. Я пробовал, но ставил вместо "null" "0", потому получал ошибку.
Я поставил два потока:

В первом такое условие:

[#Читаем активность.Первый элемент результирующей коллекции.Контакт#] == null

Во втором такое

[#Читаем активность.Первый элемент результирующей коллекции.Контакт#] != null

Почему процесс идет по второму, не понятно. Если ставить поток по умолчанию- то же самое.

Павел, процесс должен идти по первому только в случае, если поле "Контакт" не заполнено. Если у Вас оно дейтсивтельно не заполнено, но процесс идет по другому потоку, попробуйте изменить условие следующим образом:

[#Читаем активность.Первый элемент результирующей коллекции.Контакт#] == null || [#Читаем активность.Первый элемент результирующей коллекции.Контакт#] == Guid.Empty

Андрей, получилось с вариантом "Guid.Empty". Теперь все идет так, как планировалось.
Процесс прошел без ошибки, но письмо так и не пришло. Мне кажется оно снова в 00:00 придет.
На всякий случай прикладываю последнюю версию.

Павел, возможно есть необходимость дополнительно настроить конфиг сайта для корректной работы планировщика. Тут зависит от того, какая у Вас сборка.
Какую Вы сейчас сборку используете?

"Андрей Каспаревич" написал:Какую Вы сейчас сборку используете?

Как и было в прошлый раз, письмо пришло в 00:00. Текущая версия 7.2.0.1263

Павел, кажется понял, в чем проблема. Нужно пул немного перенастроить на on-demand. Сегодня в течение дня должны сделать.

"Андрей Каспаревич" написал:
Нужно пул немного перенастроить на on-demand. Сегодня в течение дня должны сделать.

Спасибо, Андрей :smile:
Теперь не все получается с высчитыванием значения, через сколько отправлять письмо:

int DateTime newDate = new DateTime(start);
int DateTime oldDate = DateTime.Now;
int TimeSpan ts = newDate - oldDate;
ProcessSchemaIntermediateCatchTimerEvent1.StartOffset=ts.Second;

Выдает ошибку.

Павел, какую ошибку?)


Вот такую.
Весь код такой

string title=ReadDataUserTask1.ResultEntity.GetTypedColumnValue<string>("Title");
string start=ReadDataUserTask1.ResultEntity.GetTypedColumnValue<string>("StartDate");
string kontra=ReadDataUserTask3.ResultEntity.GetTypedColumnValue<string>("Name");
string konta=ReadDataUserTask5.ResultEntity.GetTypedColumnValue<string>("Name");
string id=ReadDataUserTask1.ResultEntity.GetTypedColumnValue<string>("Id");
int DateTime newDate = new DateTime(start);
int DateTime oldDate = DateTime.Now;
TimeSpan ts = newDate - oldDate;
ProcessSchemaIntermediateCatchTimerEvent1.StartOffset=ts.Second;
SendEmailUserTask1.Body="<p>Внимание! Приближается время начала задачи: </p>";
return true;

Здравствуйте, Павел!
Определение переменной вида

int DateTime newDate = ...

неправильна, так как int - это один тип данных, а DateTime - это другой тип данных.
Вы же определяете переменную типа DateTime. Зачем писать еще int?
Далее, если Вы хотите преобразовать промежуток времени (TimeSpan) в секунды, то нужно использовтаь свойство TotalSeconds. Так как оно возвращает double, а нужен int, необходимо преобразование, например:

ProcessSchemaIntermediateCatchTimerEvent1.StartOffset = Convert.ToInt32(ts.TotalSeconds);

Андрей, спасибо за помощь.
Ошибки закончились. Процесс успешно завершился, письмо в процессе отображается как отправленное, но пока не пришло. Очевидно снова ночью придет.

Здравствуйте, Андрей.
Подскажите,

"Андрей Каспаревич" написал:Нужно пул немного перенастроить на on-demand. Сегодня в течение дня должны сделать.

это настроено ? У меня сообщения все также только в 00:00 приходят.
Спасибо.

Здравствуйте, Павел.

Для Вашего сайта выполнены настройки на площадке on-demand - пул не останавливается.
Вероятно проблема в том как Вы устанавливаете задержку отправки уведомления, просьба перепроверить Ваш код.

Показать все комментарии