Система взаимодействия. Быстрый старт

Публикация № 707892

Программирование - Практика программирования

73
В статье описано принципиальное взаимодействие клиентского сеанса с сервером взаимодействия.

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

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

Итак, начинаем с модуля управляемого приложения. При начале работы системы:

  1. Проверяем, что база зарегистрирована на сервере взаимодействия.
  2. Получаем из константы значение уникального идентификатора обсуждения для наших универсальных сообщений севера.
  3. Проверяем существование обсуждения с таким идентификатором.
  4. Если обсуждение не существует, то создаем его c полученным из константы идентификатором.
  5. Добавляем текущего пользователя в участники обсуждения.
  6. Создаем два оповещения: одно оповещение успешного подключения обработчика новых сообщений, второе оповещение о получении нового сообщения.
  7. Подключаем оповещение о новых сообщениях функцией НачатьПодключениеОбработчикаНовыхСообщений.
 
 Модуль управляемого приложения

 

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

Теперь рассмотрим служебный модуль работы с функциями системы уведомления. Модуль привилегированный.

 
 Модуль "СерверВзаимодействияПривилегированный"

 

Функция СоздатьОбсуждениеБезКонтекста: создает новое обсуждение, признак "Отображаемое" выставляем в ЛОЖЬ, чтобы обсуждение не появилось в стандартном интерфейсе уведомлений пользователей. После записи идентификатора записываем в константу. Функция вызывается только один раз (вопросы возможного одновременного создания обсуждений несколькими пользователями не будем тут рассматривать)

Функция ОбсуждениеСуществует проверяет существование обсуждения по его идентификатору.

Функция ДобавитьТекущегоПользователяВОбсуждение добавляет идентификатор текущего пользователя в обсуждение, если он туда еще не добавлен.

Функция ПолучитьИдентификаторТекущегоПользователя получает идентификатор текущего пользователя.

Функция СоздатьСообщение создает новое сообщение в обсуждения с переданными параметрами (Ищет пользователя по представлению параметра "Ответственный", в текст сообщения вставляет ссылку на документ)

В модуле документа "СчетНаОплату" в обработчике ПриЗаписи добавим код.

 
 Модуль документа "Счет на оплату"

 

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

 
 Модуль "КлиентскиеФункции"

 

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

В статье не были затронуты вопросы оптимизации, используемых функций. Бесспорно, функцию создания сообщения часто имеет смысл выносить в фоновое задание. Возможно, при большом количестве пользователей имеет смысл создать каждому пользователю свое обсуждение, чтобы клиентские сеансы не тратили свое время на проверку получателей заведомо ненужных сообщений (т.к. сервер знает получателей, находит обсуждения этих пользователей и отсылает сообщения только им). Также стоит учитывать, что очередь сообщений сохраняется на сервере взаимодействия, и при первом входе в 1С пользователь получит их все.

Но даже в такой реализации мы избавляем клиентские сеансы от постоянных обращений к серверу из обработчиков ожидания.

73

Скачать файлы

Наименование Файл Версия Размер
Система взаимодействия. Быстрый старт.:
.cf 15,81Kb
28.11.17
16
.cf 15,81Kb 16 Скачать

См. также

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. pbazeliuk 1652 28.11.17 20:04 Сейчас в теме
Не правильный подход формировать сообщение при записи, необходимо формировать сообщение после завершения транзакции.
3. Goleff74 149 28.11.17 21:59 Сейчас в теме
(1)
Предлагаю поменять текст в сообщении на "Кто-то пытался записать ваш документ.", чтобы не было споров :)
2. script 203 28.11.17 20:58 Сейчас в теме
Огромное Спасибо. А что с той базой, которая используется системой взаимодействия. Про нее что-то известно?
4. Goleff74 149 28.11.17 22:01 Сейчас в теме
(2)
До базы пока не добрался.
5. asddsaas 28.12.17 11:16 Сейчас в теме
Спасибо за статью! Возможно ли в системе взаимодействия вставлять в сообщение ссылку (гиперссылку) на документ по типу Ссылка? Или позиционирование на объекте ИБ возможно только в рамках контекстного обсуждения?
6. Goleff74 149 28.12.17 17:29 Сейчас в теме
(5)
Оформление, установленное в форматированной строке, не используется.

Так что как вариант на текущий момент - рисовать свою форму оповещения с форматированной строкой и показывать эту форму пользователям.
7. FreeArcher 84 25.01.18 11:00 Сейчас в теме
Я правильно понимаю, что появление нового сообщения через колокольчик сделать пока нельзя?
8. Goleff74 149 25.01.18 11:10 Сейчас в теме
(7)
При создании обсуждения указываете
НовоеОбсуждение.Отображаемое = ИСТИНА;

и то, что сервер отсылает на клиент, будет отображаться пользователю.
9. andrey.luchkin@gmail.com 15.03.18 12:38 Сейчас в теме
Добрый день и спасибо за Вашу публикацию.

Я столкнулся с ситуацией, когда вызов метода СистемаВзаимодействия.ПолучитьОбсуждение(ИдентификаторОбсуждения) при вызове в начале работы системы прерывается по таймауту:
"Превышено максимальное время ожидания ответа от сервера системы взаимодействия"

При этом сервер взаимодействия доступен, база зарегистрирована. Может есть идеи?
10. Goleff74 149 15.03.18 14:53 Сейчас в теме
(9)
В идентификаторе уберите кириллицу.
11. andrey.luchkin@gmail.com 15.03.18 15:25 Сейчас в теме
(10) Спасибо, но не помогло. Ключ обсуждения формирую из фиксированного префикса и строки идентификатора пользователя системы взаимодействия.

В продолжение поиска ошибки оставил преобразованный в строку ИдентификаторПользователяСистемыВзаимодействия в качестве ид обсуждения и тогда сваливается система с ошибкой "Объект системы взаимодействия не найден".
12. andrey.luchkin@gmail.com 15.03.18 15:38 Сейчас в теме
(11) Все, ошибку нашел. Пропустил преобразование ключа обсужденяи в ИдентификаторОбсуждения. Поиск обсуждения по ключу отлично работает.
13. Stepka1206 08.08.18 09:14 Сейчас в теме
Как проверить работает она или нет?
в обсуждениях красный ⚠
14. terrorion 10 27.02.19 08:58 Сейчас в теме
Добрый день. Использовал Ваши наработки, спасибо.
Возможно ли сделать сообщение прочитанным программно?
Оставьте свое сообщение