Запись набора данных в файл 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"
},
. . .
]
}
}
