Обработчик события вызывается при выполнении запроса к серверной таблице, имеющейся в конфигурации Mobile SMARTS. Данный механизм позволяет организовать получение по запросу с терминала различных данных, которые при работе без онлайн вызовов, хранятся в выгружаемых таблицах (например, цены, остатки, серии).
Чтобы обработчик вызывался при запросе данных из таблицы, в настройках таблицы должно быть включено «Поиск на сервере — Да», «Поиск во внешней системе — Да».
Параметры
Имя параметра | Тип данных | Описание |
ЗапросXML | string (строка) | Массив идентификаторов запрошенных товаров. |
ИдПользователя | string (строка) | Идентификатор пользователя Mobile SMARTS, при работе которого на ТСД, произошел вызов обработчика. |
XmlСессии | string (строка) | Объект сессии сервера Mobile SMARTS, сериализованный в xml. Параметр передается, только если включена настройка «Добавлять объект сессии в вызов событий» |
Для обработки запроса необходимо загрузить из xml объект Cleverence.Warehouse.DocumentQuery с помощью функции FormXML объекта Cleverence.Warehouse.StorageConnector.
DocumentQuery содержит следующие свойства, используемые при обработке запроса:
Свойство | Тип данных | Описание |
From | Строка | Наименование таблицы, из которой выполняется выборка данных (например, Остатки). Равно наименованию одной из таблиц, имеющихся в конфигурации Mobile SMARTS. |
WhereRootElement | Ссылка на объект IQueryElement | Корневой элемент синтаксического дерева выражения условия в запросе. |
По значению, заданному в свойстве From, обработчик должен определить, откуда следует выбрать данные. Далее нужно обойти элементы дерева выражения условия и наложить соответствующее условие на запрос учетной системы. IQueryElement содержит:
Свойство | Тип данных | Описание |
IsGroup | Boolean | Признак, является ли элемент группой (И, ИЛИ, НЕ) |
Группа: IsGroup = Истина например, (ИдНоменклатуры == «cbcf493e-55bc-11d9-848a-00112f43529a» && Характеристика == «светло-серый» && ВидЦеныВнутр == 1) | ||
GroupTypeStr | Строка | Тип группы (какой логической операцией объединены условия в группе). Одно из следующих значений: «Or» (Или), «And» (И), «Not» (Не). |
Elements | QueryElementCollection | Коллекция элементов группы, может содержать как отдельные элементы условия (IsGroup=Ложь), так и другие группы (IsGroup=Истина). |
Элемент: IsGroup = Ложь например, ИдНоменклатуры == «cbcf493e-55bc-11d9-848a-00112f43529a» | ||
ComparisonTypeStr | Строка | Вид сравнения. Одно из следующих значений: «==» (равно), «!=» (не равно), «<» (меньше), «>» (больше), «<=» (меньше или равно), «>=» (больше или равно), «Contains» (содержит), «StartsWith» (начинается с). |
LeftValue | Строка | Наименование сравниваемого поля |
RightValue | Object | Значение сравниваемого поля (число, строка). |
Возвращаемое значение
Результат, возвращаемый функцией, должен быть в виде Xml-представления объекта Cleverence.Warehouse.RowCollection (коллекция строк таблицы, см. справочник). Xml-представление объектов Mobile SMARTS следует получать с помощью функции ToXml компоненты StorageConnector.
В случае 1С функция может возвращать таблицу значений. Наименования полей (как в случае строк Cleverence.Warehouse.Row, так и в случае колонок таблицы значений 1С) должны соответствовать наименованиям полей таблицы из конфигурации Mobile SMARTS.
Описание в панели управления:
1C
<ид. коннектора>:ОбработатьЗапрос
Ид. коннектора — задается в панели управления.
Например: OneC_Connector:ОбработатьЗапрос
Пример функции
1C
Функция ОбработатьЗапрос(запросXML, userId, mXmlDoc=Неопределено) Экспорт ... docQuery = connector.FromXML(запросXML); ИмяМакетаСхемыКомпоновки = ПолучитьИмяМакета(docQuery.From); СхемаКомпоновки = ЭтотОбъект.ПолучитьМакет(ИмяМакетаСхемыКомпоновки); ... КомпоновщикНастроекКомпоновкиДанных = Новый КомпоновщикНастроекКомпоновкиДанных; ... ЗаполнитьОтбор(docQuery.From, docQuery.WhereRootElement, КомпоновщикНастроекКомпоновкиДанных.Настройки.Отбор.Элементы); ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений; ТабВыгрузки = ПроцессорВывода.Вывести(ПроцессорКомпоновки); Возврат ТабВыгрузки; КонецФункции Процедура ЗаполнитьОтбор(ИмяОтбора, queryElement, Элементы) Если queryElement = NULL Или queryElement = Неопределено Тогда Возврат; КонецЕсли; Если queryElement.IsValueItem Тогда Возврат; КонецЕсли; Если Не queryElement.IsGroup Тогда ЭлементОтбора = Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ЭлементОтбора.ВидСравнения = ПолучитьВидСравнения(queryElement.ComparisonTypeStr); ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(queryElement.LeftValue); ЭлементОтбора.ПравоеЗначение = ПолучитьЗначениеДляОтбора(ИмяОтбора, queryElement.LeftValue, queryElement.RightValue); Иначе ЭлементОтбора = Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных")); ЭлементОтбора.ТипГруппы = ПолучитьТипГруппыОтбора(queryElement.GroupTypeStr); Для Инд = 0 По queryElement.Elements.Count-1 Цикл queryEl = queryElement.Elements.Item(Инд); ЗаполнитьОтбор(ИмяОтбора, queryEl, ЭлементОтбора.Элементы); КонецЦикла; КонецЕсли; КонецПроцедуры