Коллеги, приветствую.

Нужно реализовать уведомление пользователю, что через 2 часа срок разрешения обращения закончится.

 

2 часа (120 минут) буду зашивать в системную настройку (чтобы можно было варьировать админу)

 

Хочу реализовать с помощью БП по таймеру, который раз в час будет отбирать обращения по определенным критериям. 
далее, из записи вычитаю поле "время разрешения" (тип поля - дата/время) и тут главная загвозка.... как мне высчитать, что обращение должно разрешиться через 2 часа (120 минут)?

 

если должно решиться больше 2 часов - пропустить запись

если меньше, то по идее, должно было уже отправиться уведомление.

ко всему прочему, кажется, что могут возникнут потери записей (из разряда, если на момент проверки, "время разрешения" должно быть через 2 часа и 5 минут, то в следующую проверку может быть уже меньше 2 часов) - это смущает.

из идей:

  1. пробовать преобразовать поле с помощью формул .TotalHours/.TotalMinutes в часы/минуты и сравнивать..
  2. попробовать с помощью формул .AddMinutes(), .AddHours() добавить настройке "текущее время и дата" значение системной настройки и сравнить...

в общем, буду рада советом, а сама пошла пока пробовать :) 

Нравится

3 комментария
Лучший ответ

Aleksei Efimenko, 

я прибегла к другому решению:

  • сделала системную настройку, которая хранит значение за сколько нужно уведомление (в минутах)
  • сделала 2 параметра: 

Параметр 1: [#Системная переменная.Текущее значение времени#]. AddMinutes([число из системной настройки])

Параметр 2: параметр 1. AddMinutes(59) - чтобы получился час

 

  • и развела условными потоками:

1. если время разрешение больше моих параметров или меньше - проскакиваю

2. если время разрешение попадает в промежуток параметров - высылаю уведомление

Создаю новое поле - Reminding time. И его сравниваю.

 

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

Александра Дубс, подскажите, решило ли вашу задачу предоставленное решение от Владимира?

Aleksei Efimenko, 

я прибегла к другому решению:

  • сделала системную настройку, которая хранит значение за сколько нужно уведомление (в минутах)
  • сделала 2 параметра: 

Параметр 1: [#Системная переменная.Текущее значение времени#]. AddMinutes([число из системной настройки])

Параметр 2: параметр 1. AddMinutes(59) - чтобы получился час

 

  • и развела условными потоками:

1. если время разрешение больше моих параметров или меньше - проскакиваю

2. если время разрешение попадает в промежуток параметров - высылаю уведомление

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

Приветствую. Представьте себе ситуацию. Есть некоторое событие, которое наступит через n  дней. Событие важное, а потому в системе отправляется уведомление "через n дней произойдет событие" , соответственно на следующий день отправляется новое уведомление "через n-1 дней произойдет событие", что очевидно не очень хорошо. В связи с этим появилась идея: обновить текст раннее отправленных уведомлений во вкладке системных уведомлений 

С помощью бизнес-процесса удалось обновить колонку description в объекте Reminding, который как раз и хранит в себе все системные уведомления. Однако после обновления данных в бд, на фронте никаких изменений не последовало, т.е. боковое меню с системными уведомлениями не обновилось. 

 

Вопрос: как принудительно обновить список системных уведомлений?

Нравится

2 комментария

У вас после обновления страницы данные обновляются?

Если да и вам требуется обновить записи без участия пользователя, то нужно использовать механизм сообщений. Пример реализации описан в этой статье https://academy.terrasoft.ru/documents/technic-sdk/7-16/clientmessagebr…

 

Из БП нужно послать сигнал на клиент и потом SystemNotificationsSchema вызвать метод обновления реестра записей, либо написать свой, либо найти что-то похожее из базовых.

Илья, добрый день! 

Во вкладке  хранятся уведомления с типом Notification (id = 685e7149-c015-4a4d-b4a6-2e5625a6314c). Что касается объекта Reminding, это другой тип уведомлений (напоминания), который находится в первой вкладке центра уведомлений. 

 

Если Вам необходимо поменять текст в уведомлениях с типом Notification, то Вам потребуется изменить содержимое колонки SubjectCaption. В бизнес-процессе Вы можете сделать это выбрав объект "Уведомление" и поле "Заголовок" в нём. 

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

Добрый день!
Есть ли возможность существующими средствами отследить, что кто-то тегнул другого пользователя?

Нравится

2 комментария
Лучший ответ

Если вы про упоминание в ленте, то отлавливайте в процессе событие объекта SocialMention. Мы таким образом тегнутых добавляем в участники активности

Если вы про упоминание в ленте, то отлавливайте в процессе событие объекта SocialMention. Мы таким образом тегнутых добавляем в участники активности

Владимир Соколов,

да, это то, что нужно, спасибо!)

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

Есть много примеров реализации уведомление в панеле уведомлений в правой части, но все они описывают создание с ссылкой на раздел с в нем запись

Но как создать на C# (не в бизнес процессе) уведомление без этой ссылки, как это реализовано например у уведомлений об синхронизации с LDAP?

Нравится

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

Создаете в с# в таблице Remindings запись, вот и будет вам текст без ссылки. Откройте таблицу Remindings и посмотрите запись у которой дата 24.02.2021 в 17:57 и увидите какие поля должны быть заполнены чтобы получить такое уведомление.

Именно туда и ложил, потому что все уведомления там лежат только с указанием разных типов. Пробовал и такой способ   и такой . Смотрел в таблице "Reminding" как реализовано уведомление что на скрине, но без указания раздела его пользователь просто не видит, а с указанием делает гиперссылкой 

Александр Тыра,

Мне эти ссылки не нужны. Приложите код которым создаете уведомление и скриншоты с полями в двух записях бд, та которая у вас создается уведомление и уведомление с ldap. 

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

Александр Тыра,

Я вам объясняю как правильно работать с системой если вам что-то непонятно. Вам необходимо читать исходный код, смотреть данные в бд и самостоятельно анализировать. Я написал что в бд уже есть такая запись, значит подобную можно создать, дальше вам нужно повторить поля в этой записи.

А исходные данные мне нужны чтобы понять куда вы смотрите и почему разницу не видите.

Данные из бд можно работая в SQL Server Management Studio  выгрузить в csv, можно выделить и скопировать в excel.

Выгрузите записи таблицы Reminding в файл, удалите все строки кроме двух, одна с правильным уведомлением, вторая с созданным вами.

И приложите свой c# код создания уведомления и файл с двумя записями из Reminding.

От

Полозюков Евгений Петрович,

Ответ простой - в 7.13 нельзя создать уведомление без ссылки, потому это поправили в более поздних версиях

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

Добрый день!

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

Нравится

3 комментария

Денис, о каких именно уведомлениях речь?

 

Если это записи в таблице Reminding (Уведомление), можно включить администрирование по записям и нужным записям сразу выдавать права на чтение только тем, кому надо. Это можно в БП на событии создания (проверяя, что именно по активности с определёнными названием или связями с обращением) или, если возможно, доработать сам код, где запись создают.

 

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

 

Аналогично для записей в ленте в таблице ESNNotification (Уведомление ленты).

 

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

 

Или речь о уведомлениях в виде писем, которые отправляет система? Они отсутствуют стандартно и добавлены в дополнениях. Соответственно, поможет удаление такого дополнения или отключение ненужного БП, которые входят в устанавливаемый пакет.

Добрый день!
Аналогичный вопрос!

Как можно ограничить видимость отдельного элемента коммуникационной панели для определённых групп?
 

Создать операцию, выдать группам права на неё, а в коде страницы, где эта кнопка, привязать видимость к проверке на эту операцию.

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

Всем доброго времени суток! 

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

Нравится

4 комментария

Этот механизм реализован в схеме DesktopPopupNotification, функция из которой вместе с параметрами сообщения вызывается в том месте системы, где хотим что-то сообщить. Например, в SectionMergeHelper:

/**
 * Show popup message with the merge info.
 * @param {Number} mergeRecordsCount Count of records to merge.
 */
showMergePopup: function(mergeRecordsCount) {
	var config = this.getMergePopupConfig(mergeRecordsCount);
	DesktopPopupNotification.showNotification(config);
},
 
/**
 * Returns the config of the popup notification.
 * @param {Number} mergeRecordsCount Count of records to merge.
 * @return {Object} Config of the popup notification.
 */
getMergePopupConfig: function(mergeRecordsCount) {
	var bodyTemplate = this.getMergePopupBodyTemplate();
	return {
		id: this.Terrasoft.generateGUID(),
		title: resources.localizableStrings.MergeNotificationTitleTemplate,
		body: this.Ext.String.format(bodyTemplate, mergeRecordsCount),
		icon: this.getMergePopupIconUrl(),
		onShow: this.onShowPopup,
		ignorePageVisibility: true
	};
},

Соответственно, если хотите, чтобы в одних разделах что-то показывалось, а в других — нет, нужно в ненужных переопределить логику, закомментировав вызов showNotification.

Александр, спасибо за развёрнутый ответ! В частности интересуют уведомления об успешном запуске процессов, например при опубликовании обращения или очистки кэша Redis, в схемах процессов вызов данной функции не обнаружил

Похоже на функцию _showSuccessfullyRunProcessPopup в схеме ProcessModuleUtilities.

Зверев Александр,

 Большое спасибо за помощь :3

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

Коллеги, добрый день.

Столкнулся с проблемой отображения уведомлений в коммуникационной панели.

Задача: при добавлении нового участника в деталь "команда" в карточке продажи - уведомлять добавленного участника в коммуникационной панели.

Делал через бп (скриншот во вложении).

При смене NotificationType на Notification - во вкладке системных уведомлений все отображается корректно. Можно перейти в продажу по ссылке.
При значении Reminding - во вкладке напоминаний пустота (а напоминание нужно как раз именно там). При этом на счетчике самой вкладки видно, что напоминание есть.

Решаема ли задача через бп? Или все же нужно кодить? Сначала подумал что нужно создавать провайдер, но я так понял что после 7.12 схема поменялась? Вообщем буду рад подсказке как это корректнее всего сделать.

С Активностями-Участниками аналогичный бп работает нормально (уведомления в напоминаниях отображаются).

Прикрепленные файлы

Нравится

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

Возможно, при создании записи в таблице Reminding не заполнены нужными значениями все поля. Сравните в базе значения у той записи, что отображается у пользователя в этом разделе верно и у Вашей, созданной при помощи БП.

Зверев Александр,

Александр, спасибо за подсказку. В таблице Reminding поле SourceId получает null. Не совсем пока понятно что с этим сделать, но это уже хоть что-то) Буду разбираться.

Александр, на Вашем скриншоте в элементе БП создания напоминания нет заполнения этого поля SourceId, нужно добавить. Возможные варианты значений есть в таблице справочника RemindingSource.

Зверев Александр,

Александр, так я тоже пробовал еще в самом начале. К сожалению никакого эффекта это не дает (но кстати SourceId в таблице заполняется, это да).

На данный момент оставил уведомления как NotificationType = Notification. Но хотелось бы конечно разобраться.

Сравните значения полей с уже существующими записями,которые отобразились верно.

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

Добрый день! Возможно ли в интерфейсе BPM Online настроить уведомления в почту о том, что есть незакрытые активности?

Например: в системе была заведена активность "встреча" на понедельник. В понедельник эта встреча прошла, но пользователь забыл поставить статус в этой активности "Завершена". Необходимо, чтобы система во вторник, после проведения встречи направила пользователю уведомление в системе о том, что у него есть активность, плановое завершение которой прошло, но при этом она не завершена

Нравится

4 комментария
Лучший ответ

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

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

Сидоров Александр Валерьевич,

Александр, спасибо за ответ! Скорее всего такой вариант устроит.

Не могли бы Вы подсказать где можно найти более подробную инструкцию по созданию логических полей и бизнесс процессов?

Вся эта информация есть в академии: поля, если они чисто служебные, без отображения, можно добавить в дизайнере объектов. Если и в каротчку — в мастере разделов.

А в этой статье есть готовое решение Вашей задачи:

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

Если просроченных задач очень много, то можно отправлять список одним письмом, используя добавление таблицы с задачами в текст письма с помощью дополнения https://marketplace.terrasoft.ua/template/data-table-e-mail-bpmonline

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

Добрый день господа.

Существует раздел задания в котором есть поле ответственный и (дата)крайний срок, необходимо чтобы за (N) дней ответственному приходило уведомление о приближении срока заявки с ссылкой соответственно.

Пробовал создавать БП , хоть и опыта нет.

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

Нравится

3 комментария
Лучший ответ

Здравствуйте, Кирилл! В активности есть параметр напомнить ответственному(чек-бокс) + дата напоминания - http://prntscr.com/orgt25, можете рассчитывать необходимую дату и время напоминания при формировании активности и заполнять.

Здравствуйте, Кирилл! В активности есть параметр напомнить ответственному(чек-бокс) + дата напоминания - http://prntscr.com/orgt25, можете рассчитывать необходимую дату и время напоминания при формировании активности и заполнять.

Нигрескул Алексей,  отлично я создал БП в котором один элемент "Добавить данные"  и с помощью которого успешно  добавляются данные в активность обрабатывая объект "задание", все замечательно но вот когда уведомление приходит юзеру в заголовке просто текст c ссылкой на активность , можно ли эту ссылку на свою запись "Задание" перебить?

А зачем Вы пишете курсивом?

Если это самодельный раздел заданий, напоминания для него можно разработать по этой инструкции.

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

Здравствуйте!

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

Вторая проблема, уведомления становятся сразу прочитанными, реально ли сделать так, что бы уведомление стало прочитанным только после клика на него?

Третья проблема - сделать ручное удаление уведомлений.

 

Вопрос оформлю идеей, но нужны советы куда копать для самостоятельной реализации этих "фишек"?

1 комментарий

Первое, не думаю, что все считают такой уж проблемой: если правая панель скрыта или открыта на другой вкладке, то при появлении нового системного уведомления появится красный кружок с цифрой. А при открытии нужной вкладке последнее будет уже сверху. Либо же пересматривать механизм центра уведомлений (CenterNotificationSchema).

По второму, нужно смотреть логику SystemNotificationsSchema и SystemNotificationProvider. В первой есть запуск функции markNewNotificationsAsRead, которая реализована в BaseNotificationsSchema.

По третьему, эти записи хранятся в таблице Reminding. При желании, можно зарегистрировать её как справочник и там удалять записи.

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