Обработчик события вызывается при выполнении запроса к серверной таблице, имеющейся в конфигурации 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, ЭлементОтбора.Элементы); КонецЦикла; КонецЕсли; КонецПроцедуры