Каталог решений - Передача данных с сервера на клиент

Передача данных с сервера на клиент

Передача данных с сервера на клиент

В наличии

Не так давно столкнулся с задачей интеграции облачной АТС и 1С CRM. Типовой функционал предполагает получения http-запросов через http-сервис. Обработкой запросов занимается сервер, и создается документ «Телефонный звонок». И все бы ничего, если данного функционала хватило для работы, но данной статьи тогда бы не было.
Дополнительная задача заключалась в открытии форм существующего документа по клиенту «Интерес» и обработки «Мастер формирования интереса».

Категория:

Описание

  1. Предисловие

Не так давно столкнулся с задачей интеграции облачной АТС и 1с CRM. Типовой функционал предполагает получения http-запросов через http-сервис. Обработкой запросов занимается сервер и создается документ «Телефонный звонок». И все бы ничего если данного функционала хватило для работы, но данной статьи тогда бы не было.

Дополнительная задача заключалась в открытии форм существующего документа по клиенту «Интерес» и обработки «Мастер формирования интереса».

  1. Поиск решения

Проблема была проста: при приеме http-запроса работает только Сервер, вызова Клиента не происходит. Вопрос, как реализовать открытие форм и отображение их конкретному пользователю?

За день «гуглежа» энтузиазм устремился в минус бесконечность пока не наткнулся на статью,  посвященную функционалу «Обсуждения» добавленного в платформу 8.3.11.2867.

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

Данная статья подразумевает передачу данных с сервера на клиент путем отправки сообщения конкретному пользователю системы.

  1. Реализация

Код в основном использовался из статьи указанной выше лишь с малыми изменениями необходимыми для решения моих задач.

Для начала каждому пользователю необходимо создать свое «Служебное обсуждение», ориентироваться будем по Ключу, который (в моем случаи) формируется из идентификатора пользователя в системе обсуждения (уид пользователя в системе обсуждения и уид в информационной базе разный) и произвольного префикса (оставил как в статье, для меня это было не принципиально).

 

&НаСервере

Процедура СоздатьСлужебноеОбсуждение(КлючСлужебногоОбсуждения) Экспорт

               

                Если СистемаВзаимодействия.ПолучитьОбсуждение(КлючСлужебногоОбсуждения) = Неопределено Тогда

                              

                               Обсуждение = СистемаВзаимодействия.СоздатьОбсуждение();

                               Обсуждение.Отображаемое = Ложь;

                               Обсуждение.Ключ = КлючСлужебногоОбсуждения;

                               Обсуждение.Участники.Добавить(СистемаВзаимодействия.ИдентификаторТекущегоПользователя());

                               Обсуждение.Записать();

                              

                КонецЕсли;

               

КонецПроцедуры



&НаСервере

Функция КлючСлужебногоОбсуждения() Экспорт

               

                Возврат "Сообщения сервера " + СистемаВзаимодействия.ИдентификаторТекущегоПользователя();

               

КонецФункции

 

Функция для генерации ключа «Служебного обсуждения» возвращает сформированный ключ и процедура, в которую передаем ключ, для формирования самого обсуждения.

Участники обсуждения добавляются по идентификатору пользователя в системе обсуждения.

СистемаВзаимодействия.ИдентификаторТекущегоПользователя() – возвращает идентификатор в системе по текущему пользователю информационной базы.

СистемаВзаимодействия.ПолучитьИдентификаторПользователя(ПользовательИБ.УникальныйИдентификатор) – возвращает идентификатор пользователя по уникальному идентификатору пользователя информационной базы.

Обсуждение.Отображаемое = Ложь – скрываем обсуждение от пользователя (а зачем оно ему?).

Обсуждение создано, пользователь подвязан, следующий этап – добавление возможности пользователя получать эти самые «Служебные обсуждения».

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

&НаКлиенте

Процедура ПодписатьсяНаСлужебноеОбсуждение(КлючСлужебногоОбсуждения) Экспорт

               

                ОшибкаПодключения = Новый ОписаниеОповещения( , , , "ОшибкаПодключения", БИТ_СерверВзаимодействия);

                ОбработкаСообщенийСервера = Новый ОписаниеОповещения("ОбработкаСообщенийСервера", БИТ_СерверВзаимодействия);

                СистемаВзаимодействия.НачатьПодключениеОбработчикаНовыхСообщений(ОшибкаПодключения, КлючСлужебногоОбсуждения, ОбработкаСообщенийСервера);

               

КонецПроцедуры

 

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

Следующее что нам необходимо сделать – создать сообщение, которое мы и будем обрабатывать.

В моем случаи я получаю данные из http-запроса, типовым функционалом формируется документ «Телефонный звонок», а дальше забираю входящий номер телефона, внутренний телефон менеджера и сам документ себе в процедуру формирования служебного сообщения.


&НаСервере

Процедура ВыполнитьДействиеПриЗвонке(НомерТелефонаВх, НомерПользователя, ДокументЗвонка) Экспорт
               

                ПользовательСВ = ПолучитьПользователяСВ(НомерПользователя);

                Ключ = "Сообщения сервера " + ПользовательСВ;

                СлужебноеОбсуждение = СистемаВзаимодействия.ПолучитьОбсуждение(Ключ);

               

                СтруктураДанных = Новый Структура;

                СтруктураДанных.Вставить("Значение", ДокументЗвонка);

                СтруктураДанных.Вставить("СпособОбработки", "Индикатор");

                СтруктураДанных.Вставить("НомерТелефона", НомерТелефонаВх);

               

                Сообщение = СистемаВзаимодействия.СоздатьСообщение(СлужебноеОбсуждение.Идентификатор);

               

                Сообщение.Данные = СтруктураДанных;

                Сообщение.Записать();


КонецПроцедуры

Функция ПолучитьПользователяСВ(НомерПользователя) – получает данные по внутреннему номеру АТС пользователя. Сначала я получаю пользователя информационной базы, после чего по уникальному идентификатору получаю пользователя системы взаимодействия.

Далее по ключу ищу его «Служебное обсуждение» и завожу в него структуру с данными. Так же через структуру можно передать название «клиентской» процедуры или функции и в обработке данного сообщения ее вызвать (Выполнить(«НазваниеПроцедуры()») – для процедуры и Вычислить(«НазваниеФункции()») – для функции).

Создаем сообщение в «Служебном обсуждении» и записываем его.

Осталось нам только обработать новое сообщение у пользователя.

&НаКлиенте

Процедура ОбработкаСообщенийСервера(Сообщение, ДополнительныеПараметры) Экспорт

                 СтруктураЗвонка(Сообщение.Данные.НомерТелефона, Сообщение.Данные.Значение);


КонецПроцедуры


&НаКлиенте

Процедура СтруктураЗвонка(НомерТелефона, Документ)

…

КонецПроцедуры

 

Это та самая процедура которую мы подключаем в ОбработкаСообщенийСервера.

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

Касательно новых конфигурации, например Управление торговлей 11.4 включение сервиса взаимодействий находится в НСИ и администрирование -> Интернет-поддержка и сервисы -> Группа "Обсуждения"

На этом все.

Моя первая статья, особо ногами не пинайте)

has been added to your cart:
Оформление заказа