События сервера Mobile SMARTS
События сервера Mobile SMARTS — это специальный механизм, позволяющий выполнять вызов функций внешних соединений (коннекторов) при наступлении определенных событий (например, запрос номенклатуры по идентификатору или штрихкоду с ТСД, получение сервером с ТСД завершенного документа и др.). При вызове функции-обработчика события коннектор, как правило, выполняет обращение к внешней системе, передавая параметры события во внешнюю систему (например, штрихкод, по которому нужно найти номенклатуру или идентификатор завершенного документа, по которому документ можно получить из базы Mobile SMARTS), внешняя система возвращает результат в требуемом виде (например, объект «Товар с упаковкой» PackedProduct, сериализованный в xml), коннектор передает результат серверу для возврата его на ТСД (подробнее написано в статье «Основной принцип работы коннекторов»). В некоторых случаях логика обработки определенных событий может быть реализована непосредственно в самом коннекторе, без вызова внешней системы (например, при добавлении в базу документа для обработки на ТСД коннектор может выполнить построение дополнительных таблиц документа или запретить добавление документа, если не заполнены определенные поля).
Настройка обработчиков событий сервера выполняется через панель управления. Для большинства стандартных коннекторов, входящих в дистрибутив Mobile SMARTS, функции-обработчики указываются в параметрах самого коннектора:
Указание обработчиков событий сервера в свойствах коннектора позволяет организовать вызов нескольких обработчиков для одного события. Порядок вызова обработчиков редактируется в панели управления в свойствах узла «События сервера»:
Примечание. Задание имени функции-обработчика события в параметрах коннектора не является обязательным условием для вызова обработчика. В платформе Mobile SMARTS версий до 3.1 (3.0.xx.xxxx) обработчики событий указывались только в узле «События сервера» в формате «Ид коннектора:Имя функции-обработчика», и коннекторы не имели параметров для задания обработчиков. Такой механизм поддерживается и в версиях 3.1.xx.xxxx. Т. е. если используется коннектор, разработанный для платформы 3.0, не имеющий параметров для указания обработчиков, и обработчик задан в узле «Событи я сервера», вызов обработчика сервером будет выполняться.
Параметры, передаваемые в функцию-обработчик, для каждого события, фиксированные, и функция для успешного вызова должна соответствовать этим параметрам.
ДокументДобавлен
Событие, возникающее после добавления документа на сервере. Вызывается при выгрузке документа в базу Mobile SMARTS из внешней системы.
Параметры
| Имя параметра | Тип данных | Описание |
| ИдДокумента | string (строка) | Код документа, который выгружен на сервер. |
| ИдПользователя | string (строка) | Передается null. |
| XmlСессии | string (строка) | Объект сессии сервера Mobile SMARTS, сериализованный в xml. Параметр передается, только если включена настройка «Добавлять объект сессии в вызов событий». |
Событие может быть обработано модулем «Вызов серверных операций», в э том случае в серверную операцию передается сам документ (переменная сессии Document).
Обработчик может внести изменения в документ. После вызова обработчика документ сохраняется на сервере.
Описание в панели управления:
C#
<ид. коннектора>:ДокументДобавлен
Описание в панели управления:
Ид. коннектора — задается в панели управления.
Например: OneC_Connector:ДокументДобавлен
ДокументДобавляется
Событие, возникающее в процессе добавления документа на сервере. Вызывается при выгрузке документа в базу Mobile SMARTS из внешней системы.
Параметры
| Имя параметра | Тип данных | Описание |
| ИдДокумента | string (строка) | Код документа, который выгружается на сервер. |
| ИдПользователя | string (строка) | Передается null |
| XmlСессии | string (строка) | Объект сессии сервера Mobile SMARTS, сериализованный в xml. Параметр передается, только если включена настройка «Добавлять объект сессии в вызов событий». |
Событие может быть обработано модулем «Вызов серверных операций», в этом случае в серверную операцию передается сам документ (переменная сессии Document). Если выполнение серверной операции прерывается (переход [прервать операцию]), добавление документа на сервер отменяется. Если отмена добавления не требуется, операция должна завершиться по переходу [завершить операцию].
В случае обычных коннекторов, если обработчик события вернул null, добавление документа на сервер отменяется.
Описание в панели управления:
C#
<ид. коннектора>:ДобавлениеДокумента
Ид. коннектора — задается в панели управления.
Например: OneC_DriverConnector:ДобавлениеДокумента
ДокументИзменен
Событие об изменении документа. Вызывается при сохранении документа на сервер в процессе работы на ТСД при использовании в конфигурации Mobile SMARTS действия «Сохранение документа на сервер».
Параметры
| Имя параметра | Тип данных | Описание |
| ИдДокумента | string (строка) | Код документа, который был изменен. |
| ИдПользователя | string (строка) | Идентификатор пользователя Mobile SMARTS, при работе которого на ТСД, произошел вызов обработчика. |
| XmlСессии | string (с трока) | Объект сессии сервера Mobile SMARTS, сериализованный в xml. Параметр передается, только если включена настройка «Добавлять объект сессии в вызов событий». |
Событие может быть обработано модулем «Вызов серверных операций», в этом случае в серверную операцию передается сам документ (переменная сессии Document).
Описание в панели управления:
C#
<ид. коннектора>:ДокументИзменен
Ид. коннектора — задается в панели управления.
Например: OneC_DriverConnector:ДокументИзменен
ДокументНазначаетсяПользователю
Событие о том, что документ готов передаваться на мобильное устройство. Вызывается при запросе с ТСД получения документа для работы.
Параметры
| Имя параметра | Тип данных | Описание |
| ИдДокумента | string (строка) | Код документа, который получает пользователь для работы на ТСД. |
| ИдПользователя | string (строка) | Ид. пользователя ТСД, который выполнил запрос. |
| XmlСессии | string (строка) | Объект сессии сервера Mobile SMARTS, сериализованный в xml. Параметр передается, только если включена настройка«Добавлять объект сессии в вызов событий». |
Событие может быть обработано модулем «Вызов серверных операций», в этом случае в серверную операцию передается сам документ (переменная сессии Document). Если выполнение серверной операции прерывается (переход [прервать операцию]), назначение документа пользователю ТСД отменяется. Если отмена назначения не требуется, операция должна завершиться по переходу [завершить операцию].
В случае обычных коннекторов, если обработчик события вернул null, назначение документа отменяется.
Описание в панели управления:
C#
<ид. коннектора>:ДокументНазначается
Ид. коннектора — задается в панели управления.
Например: OneC_Connector:ДокументНазначается
ДокументНазначенПользователю
Событие о том, что документ захвачен на обработку. Вызывается в момент, когда документ был передан на ТСД для работы с ним.
Параметры
| Имя параметра | Тип данных | Описание |
| ИдДокумента | string (строка) | Код документа, который отправлен для работы на ТСД. |
| ИдПользователя | string (строка) | Ид. пользователя ТСД, который выполнил запрос. |
| XmlСессии | string (строка) | Объект сессии сервера Mobile SMARTS, сериализованный в xml. Параметр передается, только если включена настройка «Добавлять объект сессии в вызов событий». |
Событие может быть обработано модулем «Вызов серверных операций», в этом случае в серверную операцию передается сам документ (переменная сессии Document).
Обработчик может внести изменения в документ. После вызова обработчика документ сохраняется на сервере.
Описание в панели управления:
C#
<ид. коннектора>:ДокументНазначен
Ид. коннектора — задается в панели управления.
Например: OneC_Connector:ДокументНазначен
ДокументУдален
Событие об удалении документа с сервера. Удаление выполняется внешней системой.
Параметры
| Имя параметра | Тип данных | Описание |
| ИдДокумента | string (строка) | Код документа, который получает пользователь для работы на ТСД. |
| ИдПользователя | string (строка) | Идентификатор пользователя Mobile SMARTS, при работе которого на ТСД, произошел вызов обработчика. |
| XmlСессии | string (строка) | Объект сессии сервера Mobile SMARTS, сериализованный в xml. Параметр передается, только если включена настройка «Добавлять объект сессии в вызов событий». |
Событие может быть обработано модулем «Вызов серверных операций», в этом случае в серверную операцию передается сам документ (переменная сессии Document).
Описание в панели управления:
C#
<ид. коннектора>:ДокументУдален
Ид. коннектора — задается в панели управления.
Например: OneC_DriverConnector:ДокументУдален
ДокументВозвращенСТсдБезОбработки
Вызывается, когда документ с терминала был возвращен пользователем вызовом release (вернуть документ без изменений).
Параметры
| Имя параметра | Тип данных | Описание |
| ИдДокумента | string (строка) | Код документа, который получает пользователь для работы на ТСД. |
| ИдПользователя | string (строка) | Ид. пользователя ТСД, который выполнил запрос. |
| XmlСессии | string (строка) | Объект сессии сервера Mobile SMARTS, сериализованный в xml. Параметр передается, только если включена настройка «Добавлять объект сессии в вызов событий». |
Событие может быть обработано модулем «Вызов серверных операций», в этом случае в серверную операцию передается сам документ (переменная сессии Document).
Описание в панели управления:
C#
<ид. коннектора>:ДокументВозвращен
Ид. коннектора — задается в панели управления.
Например: OneC_Connector:ДокументВозвращен
ДокументЗавершен
Событие о завершении обработки документа. Вызывается при получении сервером завершенного документа с ТСД. Может использоваться для автоматической загрузки завершенных документов в учетную систему. Учетная система может выполнить загрузку документа по ID с помощью функции GetDocument компоненты Cleverence.Warehouse.StorageConnector, после загрузки документ может быть удален из базы с помощью вызова RemoveDocument. Подробнее описано здесь.
Параметры
| Имя параметра | Тип данных | Описание |
| ИдДокумента | string (строка) | Код документа, который был завершен. |
| XmlСессии | string (строка) | Объект сессии сервера Mobile SMARTS, сериализованный в xml. Параметр передается, только если включена настройка «Добавлять объект сессии в вызов событий». |
Событие может быть обработано модулем «Вызов серверных операций», в этом случае в серверную операцию передается сам документ (переменная сессии Document).
Описание в панели управления:
C#
<ид. коннектора>:ДокументЗавершен
Ид. коннектора — задается в панели управления.
Например: OneC_Connector:ДокументЗавершен
ПолучитьДокумент
Событие о запросе получения документа по идентификатору или штрихкоду с сервера. Событие может использоваться совместно с событием «Получить список документов». Обработчик события «Получить список документов» возвращает список описаний документов (Cleverence.Warehouse.DocumentDescriptionCollection). Cписок отображается в окне выбора документа на ТСД, пользователь ТСД выбирает позицию из списка, идентификатор выбранного документа передается сервером в обработчик события «Получить документ». Обработчик «Получить документ» возвращает документ Mobile SMARTS (объект Cleverence.Warehouse.Document, сериализованный в xml).Также получение документа может выполняться по штрихкоду, отсканированному в окне выбора документов. В этом случае в параметрах типа документа должна быть включена настройка «Выбирать по штрихкоду с сервера — Да».
Параметры
| Имя параметра | Тип данных | Описание |
| ИдПользователя | string (строка) | Идентификатор пользователя Mobile SMARTS, при работе которого на ТСД, произошел вызов обработчика. |
| КодДокумента | string (строка) | Идентификатор или штрихкод запрашиваемого документа. |
| ТипДокумента | string (строка) | Тип документов, которые запрашиваются с терминала. |
| Режим | int (целое число) | =0 — получить документ по коду; =1 — получить документ по штрихкоду. |
| XmlСессии | string (строка) | Объект сессии сервера Mobile SMARTS, сериализованный в xml. Параметр передается, только если включена настройка «Добавлять объект сессии в вызов событий». |
Возвращаемое значение
Функция должна вернуть объект типа Cleverence.Warehouse.Document в виде XML или пустую строку, если документ не найден.
Событие может быть обработано модулем «Вызов серверных операций». В этом случае в серверную операцию в переменную сессии Document передается результат вызова предыдущего обработчика в цепочке обработчиков данного события (если задано несколько обработчиков). Если предыдущих обработчиков в цепочке нет или результат вызова предыдущего обработчика = null, то создается новый документ с указанным типом. Также в сессию заносятся следующие значения: DocumentTypeName (тип запрошенного документа), DocumentId (ид. или штрихкод запрошенного документа), GetDocumentMode (режим получения документа: 0 — по ид., 1 — по штрихкоду). Возвращаемое значение (документ) операция должна занести в переменную Result.
Описание в панели управления:
C#
<ид. коннектора>:ПолучитьДокумент
Ид. коннектора — задается в панели управления.
Например: OneC_Connector:ПолучитьДокумент
Пример функции
Для «1С:Предприятия 8»:
1CФункция ПолучитьДокумент(UserId, КодДокумента, ОперацияТСД, Режим, mXmlDoc = Неопределено) Экспорт
//код обработки поиска документа
...
ДокументТСД = Новый COMОбъект ("Cleverence.Warehouse.Document");
//заполнение документа ТСД данными из документа 1С
...
Результат = StorageConnector.ToXml (ДокументТСД);
Возврат Результат;
КонецФункции
ПолучитьСписокДокументов
Событие о запросе получения списка документов с сервера. Вызывается при открытии списка документов на терминале и периодически при нахождении внутри списка. Позволяет реализовать поиск и отбор документов по параметрам непосредственно в базе учетной системы, без предварительной выгрузки.
Вызов события может происходить только в том случае, если включен режим отображения серверных документов в списке документов терминала.
Если в панели управления в типах документов «Показывать в списке документы на сервере» проставлено «Нет», то никакого события на сервере не происходит. В случае, когда проставлено «Да», то терминал по необходимости будет запрашивать документы с сервера, заодно вызывая событие получения списка.
Параметры
| Имя параметра | Тип данных | Описание |
| ИдПользователя | string (строка) | Идентификатор пользователя Mobile SMARTS, при работе которого на ТСД, произошел вызов обработчика. |
| ТипДокумента | string (строка) | Тип документов, которые запрашиваются с терминала. Если тип документа null (неопределено) или пустая строка — запрашиваются все документы, вне зависимости от их типа. |
| XmlСессии | string (строка) | Объект сессии сервера Mobile SMARTS, сериализованный в xml. Параметр передается, только если включена настройка «Добавлять объект сессии в вызов событий» |
Возвращаемое значение
В качестве возвращаемого значения ожидается коллекция описаний документов Cleverence.Warehouse.DocumentDescriptionCollection, сохраненная в виде XML.
Событие может быть обработано модулем «Вызов серверных операций», в этом случае в серверную операцию в параметр Result передается результат вызова предыдущего обработчика в цепочке обработчиков данного события (если задано несколько обработчиков). Результат также возвращается в переменной Result. Серверная операция может изменить полученный из внешней системы список документов или вернуть свой собственный.
Описание в панели управления:
C#
<ид. коннектора>:ПолучитьСписокДокументов
Ид. коннектора — задается в панели управления.
Например: OneC_Connector:ПолучитьСписокДокументов
Пример функции для «1С:Предприятия 8»
Ниже приведен пример метода «ПолучитьСписокДокументов» для использования в «1С:Предприятии» с целью получения списка документов в нужном формате. Процесс формирования списка документов на стороне 1С подробно не рассматривается (в данном примере он происходит в рамках функции «ОтобратьДокументы (…)»).
1CФункция ПолучитьСписокДокументов(UserId, ТипДокумента, mXmlDoc = Неопределено) Экспорт
StorageConnector = Новый COMObject("Cleverence.Warehouse.StorageConnector");
ДокументыТСД = Новый COMObject("Cleverence.Warehouse.DocumentDescriptionCollection");
ОтобранныеДокументы = ОтобратьДокументы(UserId, ТипДокумента);
Для Каждого СтрокаДок из ОтобранныеДокументы Цикл
DocDescr = Новый COMОбъект("Cleverence.Warehouse.DocumentDescription");
DocDescr.Id = XMLСтрока(СтрокаДок.Ссылка);
cDescr.Name = Строка(СтрокаДок.Ссылка);
DocDescr.DocumentTypeName = ТипДокумента;
DocDescrs.Add(DocDescr);
КонецЦикла;
Результат = StorageConnector.ToXml(DocDescrs);
Возврат Результат;
КонецФункции
В готовой интеграции «1С:Предприятия» и Mobile SMARTS рассматриваемая функция уже добавлена в модуль основной обработки «КлеверенсТСД_ОсновнаяОбработка.epf». Если вы делаете самостоятельную интеграцию Mobile SMARTS с «1С:Предприятием» с помощью основной обработки, то вы можете использовать готовые методы.
Итогом выполнения функции «ПолучитьСписокДокументов» будет отображение документов из обработки 1С на экране мобильного устройства, подключенного к учетной системе (при работе в онлайн-режиме).
ПолучитьТовар
Событие о том, что товар был запрошен терминалом по идентификатору или каким-либо реквизитам (штрихкод, артикул, код) с сервера и не был найден в серверном справочнике. Позволяет реализовать поиск товаров непосредственно в базе учетной системы, без предварительной выгрузки.
Для того, чтобы выполнялся вызов обработчика события, в настройках номенклатуры должен быть включен «Поиск на сервере» и «Поиск во внешней системе».
Параметры
| Имя параметра | Тип данных | Описание |
| ИдТовара | string (строка) | Идентификатор или атрибут для поиска (штрихкод, артикул, код) для поиска. |
| ИдУпаковки | string (строка) | Идентификатор упаковки товара. Заполняется только для режимов 2 и 3. |
| ИдПользователя | string (строка) | Идентификатор пользователя Mobile SMARTS, при работе которого на ТСД, произошел вызов обработчика. |
| Режим | int (цело е число) | Режим поиска =0 — поиск по коду товара, без указания конкретной упаковки. =1 — поиск по штрихкоду, артикулу или любой другой характеристике товара. =2 — поиск по коду товара с заданной упаковкой. =3 — поиск упаковки для товара. |
| XmlСессии | string (строка) | Объект сессии сервера Mobile SMARTS, сериализованный в xml. Параметр передается, только если включена настройка «Добавлять объект сессии в вызов событий» |
Возвращаемое значение
В качестве возвращаемого значения ожидаются разные типы данных, в зависимости от режима:
Cleverence.Warehouse.Product, Cleverence.Warehouse.Packing, Cleverence.Warehouse.PackedProduct или Cleverence.Warehouse.PackedProductCollection в виде XML.
Режим 0:
Требуется найти товар по его идентификатору. Возвращаемое значение Cleverence.Warehouse.Product в виде XML. Если товар не найден, необходимо вернуть null (неопределено).
Следует возвращать товар с базовым типом упаковки. Если другие упаковки потребуются в процессе работы, программа запросит их с помощью режима 2 или 3.
В данном режиме событие вызывается, когда на ТСД было вызвано получение товара по идентификатору. Например, при отображении строк документа в списке выполняется получение товаров по их идентификаторам из строк документа.
Режим 1:
Требуется найти товар по штрихкоду, артикулу или иному реквизиту, по которому предусмотрен поиск. Возвращаемое значение Cleverence.Warehouse.PackedProduct или Cleverence.Warehouse.PackedProductCollection в виде XML. Если товар не найден, необходимо вернуть null (неопределено).
В данном режиме событие вызывается при сканировании на ТСД штрихкода товара в действии Выбор номенклатуры или при вводе пользователем значения, по которому требуется найти товар.
Режим 2:
Требуется найти товар по коду товара с заданной упаковкой. Возвращаемое значение Cleverence.Warehouse.Product в виде XML. Если товар не найден, необходимо вернуть null (неопределено). Отличие от режима 0 состоит в том, что в режиме 0 должен возвращаться товар с базовой упаковкой, а в данном режиме запрашивается товар с конкретной упаковкой.
Режим 3:
Требуется найти упаковку товара. Возвращаемое значение Cleverence.Warehouse.Packing в виде XML. Если товар не найден, необходимо вернуть null (неопределено).
Описание в панели управления:
C#
<ид. коннектора>:ПолучитьТовар
Ид. коннектора — задается в панели управления.
Например: OneC_Connector:ПолучитьТовар
При использовании коннекторов, у которых имена обработчиков указываются в свойствах самого коннектора (производные от ConnectorTypical), есть возможность указать разные обработчики для разных режимов получения товара:
Режим 0 и Режим 2 — «Получить товар по Id»,
Режим 1 — «Получить товар по реквизитам (Штрихкод, Код, Артикул)»,
Режим 3— «Получить упаковку товара».
Параметры обработчиков те же, что описаны выше.
