ОбработатьЗапрос

Последние изменение: 28.08.2019

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

Описание в панели управления:

C#
<ид. коннектора>:ОбработатьЗапрос

Ид. коннектора - задается в панели управления.

Например: OneC_Connector:ОбработатьЗапрос

Пример функции

C#
Функция ОбработатьЗапрос(запрос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, ЭлементОтбора.Элементы); КонецЦикла; КонецЕсли; КонецПроцедуры