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