Как правило, параметры подключения к источникам данных хранятся в самом шаблоне отчета. Для работы с файловыми источниками данных, такими как XML, JSON, CSV не требуется никаких дополнительных действий, все алгоритмы находятся в скрипте генератора отчетов.

 

Событие загрузки данных

Для просмотра и изменения параметров подключения файловых данных перед их загрузкой, необходимо определить событие onBeginProcessData у компонента. В аргументах события будет передана информация о подключении к файловому источнику данных - имя и тип подключения в шаблоне отчета, а также путь к файлу данных. Подробное описание доступных значений свойств, передаваемых в аргументах события, находится в разделе События генератора отчетов.

 

Допускается изменить путь к файлу данных. В этом случае после завершения события, генератор отчетов будет запрашивать файл по новому пути, заданному в аргументах. Например, требуется для указанного соединения изменить путь к JSON файлу данных:

 

app.py

 

from stimulsoft_reports.report import StiReport

from stimulsoft_reports.events import StiDataEventArgs

 

def beginProcessData(args: StiDataEventArgs):

   if args.connection == 'MyJsonConnection':

       args->pathData = 'Data/Demo.json'

 

 

report = StiReport()

report.onBeginProcessData += beginProcessData

report.loadFile(url_for('static', filename='reports/SimpleList.mrt'))

report.render()

 

 

 

При необходимости, те же самые действия можно выполнить в событии на стороне JavaScript клиента:

 

report.html

 

<script>

function beginProcessData(args) {

if (args.connection == "MyJsonConnection")

args.pathData = "Data/Demo.json";

}

</script>

 

 

Информация

 

Для XML источника данных событие onBeginProcessData будет вызвано дважды: первый раз для чтения XSD схемы, второй раз для чтения самого XML файла данных.

 

 

 

Событие обработки данных

Для просмотра либо корректировки загруженных данных перед их подключением и построением отчета, необходимо определить событие onEndProcessData у компонента. В аргументах события будет передана информация о подключении к файловому источнику данных - имя и тип подключения, сохраненные в шаблоне отчета, а также результат загрузки данных, содержащий загруженные данные в виде строки. Подробное описание доступных значений свойств, передаваемых в аргументах события, доступно в разделе События генератора отчетов.

 

app.py

 

from stimulsoft_reports.report import StiReport

from stimulsoft_reports.events import StiDataEventArgs

 

def endProcessData(args: StiDataEventArgs):

   data = args.result.data

 

 

report = StiReport()

report.onEndProcessData += endProcessData

report.loadFile(url_for('static', filename='reports/SimpleList.mrt'))

report.render()

 

 

 

При необходимости, просмотр либо корректировку загруженных данных можно выполнить в событии на стороне JavaScript клиента. В аргументах события будет передана информация о подключении к файловому источнику данных - имя и тип подключения, сохраненные в шаблоне отчета, а также подготовленный объект DataSet, содержащий таблицы и строки данных, полученных из файлового источника. Подробное описание доступных значений аргументов находится в разделе События генератора отчетов.

 

app.py

 

from stimulsoft_reports.report import StiReport

 

report = StiReport()

report.onEndProcessData += 'endProcessData'

report.loadFile(url_for('static', filename='reports/SimpleList.mrt'))

report.render()

 

 

report.html

 

<script>

function endProcessData(args) {

let dataSet = args.dataSet;

}

</script>

 

 

Информация

 

Компоненты вьювер отчетов и дизайнер отчетов также имеют свойство указанные выше события, при помощи которых можно управлять загрузкой данных указанным выше способом.

 

 

Отключение обработки файловых адаптеров данных на стороне сервера

По умолчанию, загрузка файловых данных осуществляется на стороне сервера. Это необходимо, если требуется контролировать параметры подключения и сами данные в событиях на стороне сервера. Если в этом нет необходимости, обработку файловых данных на стороне сервера можно отключить. В этом случае загрузка данных будет осуществляться при помощи JavaScript, это немного упростит цепочку событий и ускорит загрузку данных.

 

Для отключения файловых адаптеров данных на стороне сервера, достаточно установить свойство allowFileDataAdapters у обработчика событий в значение False, например:

 

index.php

 

from stimulsoft_reports.report import StiReport

 

report = StiReport()

report.handler.allowFileDataAdapters = False

 

 

 

Использование переменных в файловых данных

Предусмотрена возможность использовать переменные в виде выражений (а также использовать выражения) при указании пути к файловому источнику данных. Переменная или выражение задаются в фигурных скобках. Допустимо использовать несколько выражений в любом месте пути к файлу данных, например:

 

File Data Source

 

https://localhost/data/{VariableJsonFileName}.json

https://localhost/data/json?id={VariableId}

https://localhost/{VariableCategory}/{VariableId}

 

 

 

Таким образом, один источник данных может быть преобразован к REST синтаксису, это избавит от необходимости создавать несколько схожих источников данных для получения однотипных данных. А в совокупности с серверной Python логикой и событиями генератора отчетов, сделать источник данных еще более гибким.

 

 

Использование OData

Также можно использовать данные для создания отчетов, полученные из хранилищ OData. В этом случае необходимо выполнить авторизацию, используя имя пользователя, пароль пользователя или токен. Параметры авторизации указываются в строке подключения к хранилищу OData с помощью символа ";" разделитель.

 

report.html

 

<script>

function beginProcessData(args) {

let report = args.report;

 

// Authorization using a user account

let 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

let 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";

}

</script>