Как правило, параметры подключения к источникам данных хранятся в самом шаблоне отчета. Для работы с файловыми источниками данных, такими как 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. В этом случае необходимо выполнить авторизацию, используя имя пользователя, пароль пользователя или токен. Параметры авторизации указываются в строке подключения к хранилищу 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";