Подключение файлов данных
Как правило, параметры подключения к источникам данных хранятся в самом шаблоне отчета. Для работы с файловыми источниками данных, такими как XML, JSON, CSV не требуется никаких дополнительных действий, все алгоритмы находятся в скрипте генератора отчетов.
Для просмотра и изменения параметров подключения файловых данных перед их загрузкой, необходимо определить событие onBeginProcessData у компонента. В аргументах события будет передана информация о подключении к файловому источнику данных - имя и тип подключения в шаблоне отчета, а также путь к файлу данных. Подробное описание доступных значений свойств, передаваемых в аргументах события, находится в разделе События генератора отчетов.
Допускается изменить путь к файлу данных. В этом случае после завершения события, генератор отчетов будет запрашивать файл по новому пути, заданному в аргументах. Например, требуется для указанного соединения изменить путь к JSON файлу данных:
index.php |
<?php use Stimulsoft\Report\StiReport; use Stimulsoft\Events\StiDataEventArgs;
$report = new StiReport(); $report->onBeginProcessData = function (StiDataEventArgs $args) { if ($args->connection == "MyJsonConnection") $args->pathData = "Data/Demo.json"; };
$report->render(); $report->process(); ?>
|
При необходимости, те же самые действия можно выполнить в событии на стороне JavaScript клиента:
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; use Stimulsoft\Events\StiDataEventArgs;
$report = new StiReport(); $report->onEndProcessData = function (StiDataEventArgs $args) { $data = $args->result->data; };
$report->render(); $report->process(); ?>
|
При необходимости, просмотр либо корректировку загруженных данных можно выполнить в событии на стороне JavaScript клиента. В аргументах события будет передана информация о подключении к файловому источнику данных - имя и тип подключения, сохраненные в шаблоне отчета, а также подготовленный объект DataSet, содержащий таблицы и строки данных, полученных из файлового источника. Подробное описание доступных значений свойств, передаваемых в аргументах события, доступно в разделе События генератора отчетов.
index.php |
<?php use Stimulsoft\Report\StiReport;
$report = new StiReport(); $report->onEndProcessData = 'onEndProcessData'; $report->renderHtml(); ?>
function onEndProcessData(args) { let dataSet = args.dataSet; }
|
Отключение обработки файловых адаптеров данных на стороне сервера
По умолчанию, загрузка файловых данных осуществляется на стороне сервера. Это необходимо, если требуется контролировать параметры подключения и сами данные в событиях на стороне сервера. Если в этом нет необходимости, обработку файловых данных на стороне сервера можно отключить. В этом случае загрузка данных будет осуществляться при помощи JavaScript, это немного упростит цепочку событий и ускорит загрузку данных.
Для отключения файловых адаптеров данных на стороне сервера, достаточно установить свойство $allowFileDataAdapters у обработчика событий в значение false, например:
index.php |
<?php use Stimulsoft\Report\StiReport;
$report = new StiReport(); $report->handler->allowFileDataAdapters = false; ?>
|
Использование переменных в файловых данных
Предусмотрена возможность использовать переменные в виде выражений (а также использовать выражения) при указании пути к файловому источнику данных. Переменная или выражение задаются в фигурных скобках. Допустимо использовать несколько выражений в любом месте пути к файлу данных, например:
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";
|