Подключение SQL данных
Информация |
В следствие того, что для панелей индикаторов (дашбордов) и отчетов используется одинаковый унифицированный формат шаблона MRT, методы для загрузки шаблона и работы с данными, то в тексте документации будет использоваться слово «отчет».
|
Примеры |
Ознакомьтесь с примерами по использованию адаптеров данных.
|
Поскольку чистый JavaScript не имеет встроенных методов для работы с удаленными базами данных, эта функциональность реализуется с помощью серверного кода. Поэтому продукт Stimulsoft Reports.JS содержит серверные адаптеры данных, реализованные с использованием технологий Node.js, PHP, .NET, .NET Core, Python, Java.. Адаптер базы данных - это программный уровень между СУБД и клиентским скриптом. Адаптер подключается к СУБД и извлекает необходимые данные, конвертируя их в JSON. Сценарий, запущенный на сервере (с использованием адаптера), обеспечивает обмен данными между клиентским приложением JavaScript и серверной частью. Чтобы использовать этот механизм на стороне клиента, достаточно указать URL-адрес хоста адаптера, который обрабатывает запросы к необходимому адаптеру.
Ссылки на примеры с готовыми адаптерами данных, реализованные для различных платформ: Node.js, PHP, .NET, .NET Core, Python, Java.
Использовать адаптер достаточно просто. Вы должны запусть адаптер и указать адрес адаптера:
index.html |
... StiOptions.WebServer.url = "http://localhost:9615"; ... |
При запросе данных из SQL источников данных, JS report engine отправляет POST запрос на URL, указанный в опции:
index.html |
... StiOptions.WebServer.url = "https://localhost/handler.php"; ... |
В теле запроса передается JSON объект с параметрами, которые используют указанную ниже структуру:
command: возможны два варианта - "TestConnection" и "ExecuteQuery";
connectionString: строка подключения к базе;
queryString: строка запроса;
database: тип базы данных;
timeout: время ожидания запроса, указанное в источнике данных;
parameters: масив параметров в виде JSON объекта {name, value};
escapeQueryParameters: флаг экранирования параметров перед выполнением запроса.
В ответ JS report engine одидает JSON объект с данными в виде следующей структуры:
success: флаг успешного выполнения команды;
notice: если флаг выполенния команты имеет значение false, то данный параметр будет содержать описание ошибки;
rows: масив строк, каждый элемент - это масив из значений, индексом является номер колонки;
columns: масив имен колонок, индексом является номер колонки;
types: масив типов колонок, индексом является номер колонки. Может принимать значения "string", "number", "int", "boolean", "array", "datetime".
Пример запроса и ответа:
index.html |
... request = { command: "ExecuteQuery", connectionString: "Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;", queryString: "select * from table1", database: "MS SQL" }
response = { success: true,
rows: [ ["value1", 1, false], ["value2", 1, true] ["value3", 2, false] ], columns: [ "Column1_name", "Column2_name", "Column3_name" ], types:[ "string", "int", "boolean" ] } ... |
Custom Data Base
Также предусмотрена возможность зарегистрировать собственный адаптер данных. Для этого необходимо вызвать функцию:
index.html |
... Stimulsoft.Report.Dictionary.StiCustomDatabase.registerCustomDatabase(options); ... |
Опции представляют собой набор свойств и функцию process(), которая будет вызываться при запросе данных:
serviceName: имя адаптера которое отобразится в дизанере при создании нового подключения
designerCategory: наименование категории, в которую будет добавлен адаптер в меню Новый источник данных. По умолчанию, адаптер отображается в категории Избранное (Favorites), но можно изменить ее, установив опцию в одно из следующих значений: "Files", "SQL", "NoSQL", "Azure", "Google", "OnlineServices", "REST".
sampleConnectionString: пример строки подключения который вставиться в форме настройки нового подключения
process: функция которая вызовется для подготовки и передачи данных в Stimulsoft.Report.Engine
На вход функции process() передаются два аргумента: command и callback.
Аргумент command представляет собой JSON объект, в который JS report engine передаст следующие параметры:
command: действие, которое вызывается в данный момент. Возможные значения: "TestConnection": проверка соединения с базой данных из формы создания нового подключения "RetrieveSchema": извлечение схемы данных, нужно для оптимизации запроса и не передачи только необходимого набора данных. Вызывается после создания подключения "RetrieveData": запрос данных
connectionString: строка подключения к базе
queryString: строка SQL запроса
database: тип базы данных
timeout: время ожидания запроса, указанное в источнике данных
Аргумент callback является функцией, которую нужно вызвать для передачи подготовленных данных в JS report engine. В качестве аргументаcallback функции необходимо передать JSON объект, имеющий указанные ниже параметры:
success: флаг успешного выполнения команды
notice: если флаг выполенния команты имеет значение false, то данный параметр должен содержать описание ошибки
rows: масив строк, каждый элемент - это масив из значений, индексом является номер колонки
columns: масив имен колонок, индексом является номер колонки
types: объект где имя поля это имя колонки а значение тип колонки {Column_Name : "string"}. Тип может принимать значения "string", "number", "int", "boolean", "array", "datetime". Если будет передан масив columns, то в types можно передать масив типов, индексом должен являться номер колонки. Не работает для "RetrieveSchema"
Если command = "RetrieveSchema", то помимо типов, в types необходимо передать имена таблиц.
Пример запроса и ответа при получении схемы:
index.html |
... request = { command: "RetrieveSchema" }
response = { success: true,
types:{ Table1: { Column1: "string", Column2: "number" }, Table2: { Column1: "string" } } } ... |
Пример запроса и ответа при получении данных:
index.html |
... request = { command: "RetrieveData", queryString: "Table1" } response = { success: true,
rows: [ ["value1", 1], ["value2", 1] ["value3", 2] ], columns:[ "Column1", "Column2" ], types:[ "string", "number" ] } ... |
Время ожидания запроса
Кроме того, для источников данных SQL, используемых в отчете, вы можете указать Время ожидания запроса (Query Timeout) в секундах. Значение этого свойства сохраняется в шаблоне отчета для каждого SQL-соединения отдельно.
Ниже приведен пример кода, который можно использовать для изменения строки подключения для MS SQL, настройки запроса, установки времени ожидания запроса для уже созданного подключения и источников данных в отчете.
index.html |
... var report = new Stimulsoft.Report.StiReport(); report.loadFile("Report.mrt"); report.dictionary.databases.getByName("Connection").connectionString = "Data Source=server;Integrated Security=True;Initial Catalog=DataBase"; report.dictionary.dataSources.getByName("DataSourceName").sqlCommand = "select * from Table where Column = 100"; report.dictionary.dataSources.getByName("DataSourceName").commandTimeout = 1000; ... |
Примеры |
Адрес адаптера данных должен быть установлен до кода создания компонента или объекта отчета, поскольку значение этой опции должно быть известно механизму отчетов до его инициализации.
В настоящее время поддерживаются следующие источники данных SQL - MySQL, MS SQL, PostgreSQL, Firebird и Oracle. Адаптеры данных имеют открытый исходный код и могут быть изменены по вашему желанию.
|
OData источники данных
Вы также можете использовать данные для создания отчетов и информационных панелей, полученные из хранилищ OData. В этом случае вы можете выполнить авторизацию, используя имя пользователя, пароль пользователя или токен. Параметры авторизации указываются в строке подключения к хранилищу OData с помощью символа ";" разделитель.
viewer.html |
... //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"; ... |
Также, вы можете указывать пользовательские HTTP headers для источников данных. Это можно выполнить в обработчике события onBeginProcessData. Полный пример представлен на нашем сайте:
index.html |
... // In `onBeginProcessData` event handler add custom HTTP headers report.onBeginProcessData = function (args) { if ( args.database === "JSON" && args.command === "GetData" && args.pathData && args.pathData.include("/reports/ProtectedDemo.json") ) { // Add custom header to pass through backend server protection args.headers.push({key: "X-Auth-Token", value: "*YOUR TOKEN*"}); } }; ... |