Каталог решений - Практика OData. Пишем проводник по данным

Практика OData. Пишем проводник по данным

Практика OData. Пишем проводник по данным

В наличии

Специалисты, начиная работать с OData, сталкиваются с трудностями с первых шагов — не очевидно какие именно данные может дать источник и какие механики доступны для формирования выборок данных. Так возникла идея написать обработку, которая позволяет проанализировать структуру и содержимое источника OData, а так же станет примером кода для всех тех, кто делает свою интеграцию на платформе 1С:Предприятие 8.

Категория:

Описание

Статья продолжает серию статей про возможности доступа в базу 1С посредством протокола OData. Предыдущие работы: "Практика доступа в базу 1С через протокол oData. Чтение данных" и "Практика доступа в базу 1С через протокол oData. Изменение данных".

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

 

Зачем?

  1. Количество инструментов для анализа данных доступных в источнике OData ограничено, анализировать "глазами" километры служебной выдачи в формате XML слишком утомительно.
  2. Существующие инструменты по работе с OData не учитывают специфику данных из баз 1С (типы данных платформы, особенности наименований, предопределенные свойства)
  3. Есть желание создать удобный конструктор формирования URL для запроса данных с "предпросмотром" для быстрого анализа результатов.

 

Ограничения при разработке

  • Базовая цель — написать единую обработку для использования в обычном и управляемом интерфейсе;
  • Код должен работать под 8.2 и желательно в 8.1 — в коде не используются новые возможности языка, которые добавлены с версии 8.3.6;
  • Независимость от БСП и прочих библиотек;
  • Отсутствие дублирования кода — вся общая функциональность для обычных и управляемых интерфейсов перенесена в модуль обработки (не смотря на то, что это создает сложности при разработке УФ);
  • Интерфейс форм полностью переведен на русский и украинский языки, что позволяет комфортно использовать обработку в 90% существующих конфигураций (для Казахстана, РБ и прочих стран предлагаю перезапускать базы в русском интерфейсе), но с другой стороны это не коммерческое решение и потому я позволил себе не тратить время на сообщения пользователям, которые вывожу только на русском языке без НСтр();
  • Ограничение типов информации, с которыми допустима работа, до плоских таблиц — это позволяет облегчить алгоритм формирования запросов и упрощает методику вывод полученных данных, но при проектировании решения пришлось отказаться от виртуальных таблиц с параметрами, получения объектов с подчиненными табличными частями и от левых соединений со связанными таблицами (которые делаются с помощью $expand);
  • Возможность по работе с отборами ограничил только до операций над примитивными типами и до работы с булевыми группировками; от функций по работе с датами, строками и привидением типов пришлось отказаться, чтобы иметь возможность применить штатный функционал платформы.

 

Обзор функционала

Подключение

Подключиться к источнику данных OData очень просто — нужно указать путь к публикации базы 1С, логин и пароль. Если это не база 1С, а произвольный источник, то нужно указать URL до части "/standard.odata/". На всякий случай добавил подсказку по формату ввода адреса и пример.

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

Для удобства многоразовой работы с одним и тем же источником данных, реализовано сохранение пути, логина и пароля между сеансами (в УФ полностью автоматически, а в ОФ необходимо использовать штатные команды формы).

 

Чтобы проверить корректность параметров подключения, можно воспользоваться командой "Проверить подключение".

 

Просмотр модели данных

Выполнив настройки подключения, можно делать запрос структуры доступных данных. Получение данных происходит с помощью GET-запроса с параметром $metadata (подробнее тут).

Все полученные с сервера результаты группируются по типам и будут выведены в виде дерева в левой части формы. Если источником была база 1С, то информация будет показана с указанием привычных типов метаданных платформы.

После выбора в дереве типов строки с данными, в правой части формы будет показана таблица свойств с колонками:

  • Название — привычное для пользователей представление;
  • Имя — настоящее название свойства, по которому следует делать запросы;
  • Тип — тип данных OData

В таблице свойств есть возможность ограничить свойства, которые в будущем попадут в выборку при анализе.

 

Отборы и сортировки

После выбора конкретного типа данных на закладке "Отбор и сортировка" становятся доступными настройки, как вы правильно догадались, для отборов и сортировок. Отборы будут преобразованы в параметр $filter (подробнее тут), а сортировка в параметр $orderby (подробнее тут).

Ввод отборов и сортировок реализован на базе объекта "Компоновщик настроек компоновки данных", который инициируется выбранными свойствами с учетом их типов. Реализована поддержка типов Число, Дата, Булево и Строка. Все остальные типы преобразовываются к Строка.

В отборах поддерживаются все три вида группировки — НЕ, И и ИЛИ с любым уровнем вложенности.

Среди операций поддерживаются только шесть:

  • равно
  • не равно
  • больше
  • больше или равно
  • меньше
  • меньше или равно

Если указать какую-то другую операцию, то она при формировании запроса будет преобразована к "Равно".

 

Строка запроса и просмотр результата

На закладке "Просмотр данных" можно посмотреть результаты предыдущих действий и заняться анализом данных полученных из источника OData.

Для анализа есть табличное поле для вывода результата запроса. Колонки таблицы формируются динамически в то время, когда мы выбираем интересующие данные в дереве типов и ставим галочки рядом с интересными для нас свойствами. Типы колонок соответствуют типам свойств данных. Поддерживаются Число, Дата, Булево или Строка. Все остальные типы приводятся к типу Строка.

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

  • выбор типа данных;
  • выбор свойств для выборки;
  • указание отборов;
  • указание сортировки;
  • дополнительные настройки.

Поле "Строка запроса" формируется автоматически, но пользователю дается право ручного редактирования. Хороший пример  — это работа с Комментарием. В типовых конфигурациях у многих объектов поле "Комментарий" безграничной длинны и такие поля нельзя использовать в операциях сравнения в фильтрах. Можно выкрутиться, если воспользоваться строковыми функциями и сравнивать с образцом полученную подстроку. Но поскольку в данной обработке не реализованы формы для ввода формул OData, то ручное редактирование окажется полезным.

Если при редактировании поля "Строка запроса" мы хотим вернуться к первоначальному состоянию, то достаточно выполнить очистку поля и первоначальное значение вернется.

Если есть желание посмотреть на результат вне 1С, то в поле "Строка запроса" можно воспользоваться стандартной командой "Открыть", после чего для выполнения запроса будет открыт браузер.

Для удобства анализа данных добавлены дополнительные параметры:

  • Вывод представления ссылок — позволяет для ссылочных типов выводить их текстовое представление вместо GUID (добавляет для выбранных ссылочных типов служебное свойство ____Presentation)
  • Пропустить записей ___ — позволяет получить выборку не с первой, а после указанной строки. Так, если указываем 10, то в результате получим данные начиная с 11 записи (используется параметр $skip, тут подробнее)
  • Размер выборки ___ — позволяет ограничить размер получаемого пакета указанным количеством записей. Так, если укажем 10, то в выводе получим 10 записей, даже если в базе их миллионы (используется параметр $top, тут подробнее)

 

Пример анализа данных.

Для закрепления давайте решим простую задачу:

Необходимо получить из внешней базы 1С последние 5 курсов для валюты "доллар".

Задача выполняется в три шага:

  1. Подключимся к базе 1С и получим дерево метаданных.
  2. Сделаем запрос к справочнику Валюты, чтобы узнать GUID для доллара.
  3. Настроим фильтр по регистру сведений "Курсы валют" для отбора только доллара, укажем обратную сортировку по Дате и укажем ограничение в 5 записей на результат.

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