Подключение файлов данных
Как правило, параметры подключения к источникам данных хранятся в самом шаблоне отчета. Для работы с файловыми источниками данных, такими как XML, JSON, Excel, CSV не требуется никаких дополнительных действий, все алгоритмы находятся в скрипте генератора отчетов. При необходимости, можно использовать другие способы подключения данных при помощи JavaScript функций генератора отчетов. Для этого можно воспользоваться событием onBeforeRender объекта отчета. Данные могут быть загружены напрямую в специальный объект DataSet, который используется для их хранения. Он содержит функции для загрузки данных из файлов форматов XML/XSD и JSON. После загрузки файлов, необходимо вызвать функцию regData() у объекта отчета для подключения данных, в аргументах функции указывается подготовленный объект DataSet.
Пример загрузки данных из файла XML с использованием схемы XSD:
index.php |
<?php use Stimulsoft\Report\StiReport;
$report = new StiReport(); $report->onBeforeRender = 'beforeRender'; $report->render(); ?>
function onBeforeRender(args) { let dataSet = new Stimulsoft.System.Data.DataSet("SimpleDataSet"); dataSet.readXmlSchemaFile("Demo.xsd"); dataSet.readXmlFile("Demo.xml");
let report = args.report; report.regData(dataSet.dataSetName, "", dataSet); report.dictionary.synchronize(); }
|
Информация |
Загрузка схемы данных не является обязательной. Если вы хотите использовать схему данных, вам следует добавить ее перед загрузкой данных XML.
|
Пример загрузки данных из файла JSON:
index.php |
<?php use Stimulsoft\Report\StiReport;
$report = new StiReport(); $report->onBeforeRender = 'beforeRender'; $report->render(); ?>
function onBeforeRender(args) { let dataSet = new Stimulsoft.System.Data.DataSet("SimpleDataSet"); dataSet.readJsonFile("Demo.json");
let report = args.report; report.regData(dataSet.dataSetName, "", dataSet); report.dictionary.synchronize(); }
|
Полный код примера доступен на GitHub
Кроме указанных функций readXmlFile() и readJsonFile(), предусмотрены функции readXml() и readJson(), принимающие на вход данные в виде строки либо объекта.
Информация |
Функция report.dictionary.synchronize() необходима для синхронизации подключаемых данных со словарем данных шаблона отчета. То есть, при вызове этой функции, словарь отчета будет создан на основе структуры данных, загруженных в DataSet. Функция синхронизации не требуется, если словарь создан заранее, и его структура совпадает с подключаемыми данными.
|
Для просмотра и изменения параметров подключения файловых данных перед их загрузкой, необходимо определить событие onBeginProcessData у компонента, например:
index.php |
<?php use Stimulsoft\Report\StiReport;
$report = new StiReport(); $report->onBeginProcessData = 'beginProcessData'; $report->render(); ?>
function onBeginProcessData(args) { let pathData = args.pathData; }
|
В аргументах события будет передана информация о подключении к файловому источнику данных - имя и тип подключения в шаблоне отчета, а также путь к файлу данных. Подробное описание доступных значений свойств, передаваемых в аргументах события, находится в разделе События генератора отчетов.
Допускается изменить путь к файлу данных. В этом случае после завершения события, генератор отчетов будет запрашивать файл по новому пути, заданному в аргументах. Например, требуется для указанного соединения изменить путь к JSON файлу данных:
index.php |
<?php use Stimulsoft\Report\StiReport;
$report = new StiReport(); $report->onBeginProcessData = 'beginProcessData'; $report->render(); ?>
function onBeginProcessData(args) { if (args.connection == "MyJsonConnection") args.pathData = "Data/Demo.json"; }
|
Информация |
Для XML источника данных событие onBeginProcessData будет вызвано дважды: первый раз для чтения XSD схемы, второй раз для чтения самого XML файла данных.
|
Для просмотра либо корректировки загруженных данных перед их подключением и построением отчета, необходимо определить событие onEndProcessData у компонента, например:
index.php |
<?php use Stimulsoft\Report\StiReport;
$report = new StiReport(); $report->onEndProcessData = 'onEndProcessData'; $report->renderHtml(); ?>
function onEndProcessData(args) { let dataSet = args.dataSet; }
|
В аргументах события будет передана информация о подключении к файловому источнику данных - имя и тип подключения, сохраненные в шаблоне отчета, а также подготовленный объект DataSet, содержащий таблицы и строки данных, полученных из файлового источника. Подробное описание доступных значений свойств, передаваемых в аргументах события, доступно в разделе События генератора отчетов.
Загрузка файловых данных на стороне PHP сервера
Иногда возникает необходимость контролировать загрузку файла данных на стороне сервера, или, например, создавать массив данных при помощи кода. Для этого достаточно вместо пути к самому файлу данных, указать путь к PHP скрипту либо сервису, который содержит логику получения данных. Простейший PHP скрипт загрузки данных будет выглядеть так:
Пример простейшего PHP скрипта загрузки данных:
json.php |
<?php echo file_get_contents('Data/Demo.json'); ?>
|
В этом случае, в качестве пути к данным в шаблоне отчета необходимо указать URL адрес к этому файлу, например:
File Data Source |
https://localhost/data/json.php
|
Использование переменных в файловых данных
Предусмотрена возможность использовать переменные в виде выражений (а также использовать выражения) при указании пути к файловому источнику данных. Переменная или выражение задаются в фигурных скобках. Допустимо использовать несколько выражений в любом месте пути к файлу данных, например:
File Data Source |
https://localhost/data/{VariableJsonFileName}.json https://localhost/data/json.php?id={VariableId} https://localhost/{VariableCategory}/{VariableId}
|
Таким образом, один источник данных может быть преобразован к REST синтаксису, это избавит от необходимости создавать несколько схожих источников данных для получения однотипных данных. А в совокупности с серверной PHP логикой и событиями генератора отчетов, сделать источник данных еще более гибким.
Также можно использовать данные для создания отчетов, полученные из хранилищ OData. В этом случае необходимо выполнить авторизацию, используя имя пользователя, пароль пользователя или токен. Параметры авторизации указываются в строке подключения к хранилищу OData с помощью символа ";" разделитель.
index.php |
// Authorization using a user account var oDataDatabase = new Stimulsoft.Report.Dictionary.StiODataDatabase("OData", "OData", "https://services.odata.org/V4/Northwind/Northwind.svc;AddressBearer=adress;UserName=UserName;Password=Password;Client_Id=Your Client ID", false, null);
// Authorization using a user token var oDataDatabase = new Stimulsoft.Report.Dictionary.StiODataDatabase("OData", "OData", "https://services.odata.org/V4/Northwind/Northwind.svc;Token=Enter your token", false, null);
report.dictionary.databases.add(oDataDatabase); report.dictionary.synchronize();
// Query with data filter var productsDataSource = report.dictionary.dataSources.getByName("Products"); if (productsDataSource != null) productsDataSource.sqlCommand = "Products?$filter=ProductID eq 2";
|