Подгрузка данных из JSON
Добавлено: 26 авг 2016, 14:49
Добрый день!
Решил настроить отчет, который подгружает данные из JSON и показывает его на странице html.
Взял последнюю версию Designer для того чтобы сделать отчет и последнюю версию JS чтобы разместить отчет в html. (готовый отчет тут - https://yadi.sk/d/5Z0_NwVwuWLAm)
В качестве источника выбрал JSON (вариант 1 - https://yadi.sk/d/lm1irTcKuWLHG) и тут пошли какие то непонятные вещи.
Если в дизайнере перейти на вкладку Предварительный просмотр, то мы увидем что из JSON подгрузились только объекты "Подписи". Остальные нет.
Опытным путём выяснил, что это из-за того, что остальные объекты в единственном экземпляре, а "Подписи" - 2 объекта.
Ок, делаем костыль и добавляем по одному пустому объекту в "Акт" и "Замечания" (вариант - 2. https://yadi.sk/d/AEG2S0lluWLZA). Теперь все рендерится. Все классно. Но появились пустые значения.
Это был баг №1.
Теперь попробуем вывести этот отчет в JS, используя JSON вариант 1:
Создаем страничку index.html:
Здесь ситуация получше, но в итоге рендерится только Акт, а вот остальные объекты (Замечания и Подписи) не отображаются по какой то причине. Даже если
использовать JSON из варианта 2, ничего не поменяется. Тут я не нашел какой либо костыль.
Это был Баг #2. Или возможно я что то не так сделал. Поправьте меня если что то не так
Ну и попробуем теперь загрузить JSON не в коде а из файла.
Заменим строчку dataSet.readJson() на dataSet.readJsonFile("../reports/ActTest.json");
В это случае вообще ничего не рендерится. Получается что механизм парсинга JSON из кода и из файла - разный?
Это был баг №3
А вообще меня интересует конкретно как сделать так чтобы в JS рендерились все объекты, которые пришли из JSON.
Решил настроить отчет, который подгружает данные из JSON и показывает его на странице html.
Взял последнюю версию Designer для того чтобы сделать отчет и последнюю версию JS чтобы разместить отчет в html. (готовый отчет тут - https://yadi.sk/d/5Z0_NwVwuWLAm)
В качестве источника выбрал JSON (вариант 1 - https://yadi.sk/d/lm1irTcKuWLHG) и тут пошли какие то непонятные вещи.
Если в дизайнере перейти на вкладку Предварительный просмотр, то мы увидем что из JSON подгрузились только объекты "Подписи". Остальные нет.
Опытным путём выяснил, что это из-за того, что остальные объекты в единственном экземпляре, а "Подписи" - 2 объекта.
Ок, делаем костыль и добавляем по одному пустому объекту в "Акт" и "Замечания" (вариант - 2. https://yadi.sk/d/AEG2S0lluWLZA). Теперь все рендерится. Все классно. Но появились пустые значения.
Это был баг №1.
Теперь попробуем вывести этот отчет в JS, используя JSON вариант 1:
Создаем страничку index.html:
Код: Выделить всё
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Register JSON data for report template</title>
<!-- Report viewer Office2013 style -->
<link href="../css/stimulsoft.viewer.office2013.css" rel="stylesheet">
<!-- Stimusloft Reports.JS -->
<script src="../scripts/stimulsoft.reports.js" type="text/javascript"></script>
<script src="../scripts/stimulsoft.viewer.js" type="text/javascript"></script>
</head>
<body>
Load 'SimpleList' report template and render it.
<br><br>
<script type="text/javascript">
// Create a new report instance
var report = new Stimulsoft.Report.StiReport();
// Load report from url
report.loadFile("../reports/Act.mrt");
// Create new DataSet object
var dataSet = new Stimulsoft.System.Data.DataSet("Demo");
// Load JSON data file from specified URL to the DataSet object
dataSet.readJson({ "Акт": [{ "primaryKey": "13ddcdf5-d970-458e-ba45-12cd04fd312d", "Дата": "2016-12-13T00:00:00.000Z", "Наименование предприятия": "ИП Шакирова Р. И.", "Адрес контрагента": "б-р Гагарина, 66а", "Телефон контрагента": "2-38-53-00", "Номер лицевого счета": "112233445566", "Адрес объекта": "ул Щербакова 8", "Назначение объекта": "Колбасная \"Три поросенка\"", "Заключение": "Не сделано", "Вывод о готовности": false, "Номер": "5-ТТТ/14" }], "Замечания": [{ "ВидЗамечания": "Отсутствуют пломбы на дроссельных устройствах в тепловом узле", "ДатаУстранения": null, "ДатаВыдачи": "2016-08-18T10:42:13.013Z" }], "Подписи": [{ "Контрагент": "Тепловая инспекция АО «КТТК»", "Должность": "Инспектор", "Ф.И.О.": "Оксана" }, { "Контрагент": "Фейковый поставщик", "Должность": null, "Ф.И.О.": "А." }] });
// Remove all connections from the report template
report.dictionary.databases.clear();
// Register DataSet object
report.regData("Demo", "Demo", dataSet);
// Render report with registered data
var options = new window.Stimulsoft.Viewer.StiViewerOptions();
options.toolbar.zoom = 75;
options.toolbar.showAboutButton = false;
options.appearance.scrollbarsMode = true;
options.appearance.showTooltips = false;
var viewer = new window.Stimulsoft.Viewer.StiViewer(options, 'StiViewer', false);
viewer.report = report;
viewer.renderHtml('stiReportViewer');
</script>
</body>
</html>
использовать JSON из варианта 2, ничего не поменяется. Тут я не нашел какой либо костыль.
Это был Баг #2. Или возможно я что то не так сделал. Поправьте меня если что то не так
Ну и попробуем теперь загрузить JSON не в коде а из файла.
Заменим строчку dataSet.readJson() на dataSet.readJsonFile("../reports/ActTest.json");
В это случае вообще ничего не рендерится. Получается что механизм парсинга JSON из кода и из файла - разный?
Это был баг №3
А вообще меня интересует конкретно как сделать так чтобы в JS рендерились все объекты, которые пришли из JSON.