Чтение данных JSON в набор данных
Набор данных — это ключевой объект, используемый для хранения данных для бизнес-сущности. Как правило, бизнес-сущности необходимо заполнить набор данных соответствующими данными, возможно отфильтровать, а затем вернуть набор данных клиенту.
В реальном бизнес-приложении данные для набора данных поступают из базы данных OpenEdge. Вы ещё не научились писать уровни источника данных и доступа к данным приложения, которые используются для доступа к базе данных, поэтому на этом уроке вы просто заполните набор данных из файла JSON.
Java Script Object Notation (JSON) — популярный формат для обмена данными в распределённых приложениях. Набор данных или отдельная временная таблица легко заполняются данными из файла JSON при условии, что данные в файле JSON правильно отформатированы.
Также узнаете, как работать с данными временной таблицы, включая перебор временной таблицы, фильтрацию данных и удаление записей. А также узнаете, как использовать частные методы для организации бизнес-логики в классе.
Чтение данных JSON в набор данных
Чтобы считать данные JSON в набор данных, формат (имя, порядок и тип) данных в файле JSON должен соответствовать полям, определенным во временных таблицах набора данных.
Чтобы считать данные в набор данных, необходимо добавить код в метод бизнес-сущности для того, чтобы:
- получить дескриптор набора данных;
- вызвать метод read-json() для набора данных.
Получение дескриптора набора данных
Набор данных ABL имеет ряд встроенных методов для работы с данными, например, для чтения данных из файла или записи данных в файл. Чтобы получить доступ к этим встроенным методам, вы должны получить дескриптор (handle). Дескриптор — это атрибут объекта набора данных. Дескриптор является общим атрибутом многих типов объектов ABL. Получение дескриптора набора данных может оказаться полезным во многих частях приложения.
После того как вы определили переменную как дескриптор, вы получаете дескриптор из набора данных и устанавливаете переменную со значением дескриптора.
Синтаксис для получения дескриптора набора данных и установки переменной дескриптора со значением дескриптора:
<handle-name> = dataset <dataset-name>:handle.
<handle-name>, имя ранее определенной переменной дескриптора, которая будет использоваться для ссылки на объект набора данных.
<dataset-name>, имя набора данных.
Вызов метода read-json()
После того, как вы получите дескриптор набора данных, вы можете использовать его для чтения данных из файла JSON с помощью метода read-json(). Метод read-json() делает следующее:
- Открывает файл JSON.
- Считывает элемент JSON (аналог записи) из файла, соответствующего записи временной таблицы.
- Создаёт или находит запись временной таблицы.
- Присваивает значения, считанные из элемента JSON, полям записи временной таблицы.
- Повторяет шаги 2–4 до тех пор, пока не будут прочитаны все элементы из JSON -файла.
- Закрывает файл.
Поведение при чтении будет определяться заданным режимом чтения. Получив дескриптор набора данных, вы вызываете read-json() для чтения данных в набор данных следующим образом:
<handle-name>:read-json(<source-type>,<file-name>,<read-mode>).
<handle-name>, переменная, содержащая дескриптор набора данных, который вы заполните содержимым файла JSON.
<source-type>, задаёт тип источника. Вы должны указать строку «file» в качестве типа источника.
<file-name>, путь (полный или относительный) к файлу JSON.
<read-mode>, указывает AVM, что делать с набором данных. Возможные значения: EMPTY, UPDATE, MERGE и APPEND.
Пример кода метода GetData () в классе CustomerBE, который считывает данные из файла myExample.json для заполнения набора данных. Мы устанавливаем выходной параметр дескриптора phds на дескриптор набора данных dsCustomerBE. Напомним, что этот набор данных определён как элемент данных класса CustomerBE . Получив дескриптор набора данных, мы вызываем метод read-json () для чтения данных в набор данных. Обратите внимание, что мы указали «empty» для режима чтения. Это гарантирует, что набор данных будет пустым перед чтением файла JSON.
method public void GetData( input pFilter as character, output phds as handle ): phds = dataset dsCustomerBE:handle. phds:read-json("file", "C:\OpenEdge\WRK\myExample.json", "empty"). return. end method.