Как правило, параметры подключения к источникам данных хранятся в самом шаблоне отчета. Для работы с файловыми источниками данных, такими как XML, JSON, Excel, CSV не требуется никаких дополнительных действий, все алгоритмы находятся в скрипте генератора отчетов. При необходимости, можно использовать другие способы подключения данных при помощи JavaScript функций генератора отчетов. Для этого можно воспользоваться событием onBeforeRender объекта отчета StiReport. Данные могут быть загружены напрямую в специальный объект DataSet, который используется для их хранения. Он содержит функции для загрузки данных из файлов форматов XML/XSD и JSON. После загрузки файлов, необходимо вызвать функцию regData() у JavaScript объекта отчета для подключения данных, в аргументах функции указывается подготовленный объект DataSet.

 

Пример загрузки данных из файла:

 

app.py

 

from stimulsoft_reports.report import StiReport

 

report = StiReport()

report.onBeforeRender += 'beforeRender'

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

report.render()

 

 

report.html

 

<script>

  function beforeRender(args) {

      var dataSet = new Stimulsoft.System.Data.DataSet("SimpleDataSet");

 

       dataSet.readXmlSchemaFile("Demo.xsd");

       dataSet.readXmlFile("Demo.xml");

 

      //dataSet.readJsonFile("Demo.json");

 

      var report = args.report;

       report.regData(dataSet.dataSetName, "", dataSet);

       report.dictionary.synchronize();

   }

</script>

 

 

Информация

 

Загрузка схемы данных не является обязательной. Если вы хотите использовать схему данных, вам следует добавить ее перед загрузкой данных XML.

 

 

 

Кроме указанных функций readXmlFile() и readJsonFile(), предусмотрены функции readXml() и readJson(), принимающие на вход данные в виде строки либо объекта.

 

Информация

 

Функция report.dictionary.synchronize() необходима для синхронизации подключаемых данных со словарем данных шаблона отчета. То есть, при вызове этой функции, словарь отчета будет создан на основе структуры данных, загруженных в DataSet. Функция синхронизации не требуется, если словарь создан заранее, и его структура совпадает с подключаемыми данными.

 

 

 

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

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

 

app.py

 

from stimulsoft_reports.report import StiReport

 

report = StiReport()

report.onBeginProcessData += 'beginProcessData'

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

report.render()

 

 

report.html

 

<script>

  function beginProcessData(args) {

      let pathData = args.pathData;

   }

</script>

 

 

 

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

 

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

 

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

 

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>

 

 

 

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

 

Информация

 

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

 

 

 

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

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

 

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>