Запись набора данных в файл JSON
Для записи данных из набора данных в объект JSON используется дескриптор (handle) набора данных и встроенные метод WRITE-JSON(), который выполняет следующие действия:
- Открывает файл JSON.
- Добавляет имена набора данных и первой временной таблицы в объект JSON.
- Перебирает все записи первой временной таблицы и добавляет каждую запись в объект JSON.
- Записывает следующее имя временной таблицы в объект JSON.
- Перебирает все записи следующей временной таблицы и записывает каждую запись в объект JSON.
- Повторяет шаги 4-5 до тех пор, пока не будут обработаны данные из всех временных таблиц.
- Записывает объект JSON в файл.
- Закрывает файл.
Упрощённый синтаксис вызова метода WRITE-JSON() для записи данных из набора данных в файл:
<dataset-handle>: WRITE-JSON(<target-type>,<file-name>,<formatted>[,other-parameters]).
Здесь:
- dataset-handle – дескриптор набора данных, который должен быть записан в файл JSON;
- target-type – задаёт тип целевого объекта. В случае записи в файл, указывается тип “FILE”.
- file-name – полный или относительный путь к файлу JSON.
- formatted – если TRUE, то добавляются дополнительные пробелы к элементам, чтобы сделать их более читаемыми. Значение по умолчанию FALSE.
- other-parameters – существует ряд дополнительных параметров, которые можно задать для настройки способа записи данных в выходной файл. О некоторых из этих параметров вы узнаете позже на этом уроке.
Пример вызова метода WRITE-JSON()
Далее приведён код для записи содержимого набора данных dsPO в файл JSON. Все данные записываются в файл с форматированием элементов.
DATASET dsPO:EMPTY-DATASET (). RUN get_dsPO IN hProc ("PONum >= 10100","", OUTPUT DATASET dsPO). DATASET dsPO:WRITE-JSON("FILE","C:\OpenEdge\WRK\ProDataSets\log\dsPO.json", TRUE).
Часть файла JSON, полученного этим кодом:
{"dsPO": { "ttPurchaseOrder": [ { "PONum": 8001, "DateEntered": "1998-05-05T00:00:00.000", "SupplierIDNum": 1, "ReceiveDate": "1998-07-29", "POStatus": "Received", "POTotal": 21851.69 } ], "ttPOLine": [ { "Linenum": 1, "Itemnum": 3, "Price": 16.55, "Qty": 123, "Discount": 60, "ExtendedPrice": 814.26, "PONum": 8001, "POLineStatus": "Received" }, { "Linenum": 2, "Itemnum": 45, "Price": 81.0, "Qty": 105, "Discount": 50, "ExtendedPrice": 4252.5, "PONum": 8001, "POLineStatus": "Received" }, . . . ] } }