Пробуем отправлять уведомления с сервера на клиент в 8.3.26
Новый механизм УведомленияКлиента из тестовой версии платформы 8.3.26.
- Описание
- Подробнее
Описание
Введение
Некоторое время назад 1С выпустила тестовые релизы новой версии платформы 8.3.26. Среди прочего, в ней был реализован новый механизм "Уведомления клиента".
Теория
В глобальном контексте появилось новое свойство УведомленияКлиента, содержащее три метода:
- ПодключитьОбработчик — назначает обработчик для входящего уведомления в клиентском коде;
- ОтключитьОбработчик — отключает ранее подключенный обработчик;
- ОтправитьУведомление — отправляет уведомление клиентским сеансам с сервера.
Уведомление может быть отправлено всем активным сеансам, либо определенному множеству сеансов. Для этого в ОтправитьУведомление можно передать массив номеров сеанса.
Также, в типе ФоновоеЗадание появилось новое свойство НомерРодительскогоСеанса. Его можно использовать, например, для отправки уведомлений о прогрессе выполнения длительной фоновой операции.
Разработчики заявляют, что механизм уведомлений клиента гарантирует доставку уведомления — уведомление не будет утеряно из-за временного обрыва соединения со стороны клиентского приложения или при падении рабочего процесса сервера 1С.
Пример использования
В качестве примера реализуем простейший мессенджер:
Подготовка клиентского кода
Пропишем подключение и отключение обработчика:
Реализуем сам обработчик:
Реализация отправки и доставки сообщений
В обработчике кнопки "Отправить сообщение" ничего необычного — спрашиваем текст и вызываем некоторую серверную процедуру:
А как отправить сообщение уже с сервера другим сеансам, в которых открыта эта же обработка? Записывать данные в какой-то регистр и стучаться в него раз в несколько секунд? Писать тонну кода для отправки и приема из системы взаимодействия? Нет, все гораздо проще:
В процедуре я подготовил произвольную структуру данных сообщения (в отличие от системы взаимодействия, я могу передавать не только строку) и вызвал УведомленияКлиента.ОтправитьУведомление. Т.к. я не передавал массив с номерами сеансов, уведомление отправится всем активным сеансам ИБ (включая текущий).