Подключение 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 объект с параметрами, которые используют указанную ниже структуру:

strel11 command: возможны два варианта - "TestConnection" и "ExecuteQuery";

strel11 connectionString: строка подключения к базе;

strel11 queryString: строка запроса;

strel11 database: тип базы данных;

strel11 timeout: время ожидания запроса, указанное в источнике данных;

strel11 parameters: масив параметров в виде JSON объекта {name, value};

strel11 escapeQueryParameters: флаг экранирования параметров перед выполнением запроса.

 

 

В ответ JS report engine одидает JSON объект с данными в виде следующей структуры:

strel11 success: флаг успешного выполнения команды;

strel11 notice: если флаг выполенния команты имеет значение false, то данный параметр будет содержать описание ошибки;

strel11 rows: масив строк, каждый элемент - это масив из значений, индексом является номер колонки;

strel11 columns: масив имен колонок, индексом является номер колонки;

strel11 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(), которая будет вызываться при запросе данных:

strel11 serviceName: имя адаптера которое отобразится в дизанере при создании нового подключения

strel11 designerCategory: наименование категории, в которую будет добавлен адаптер в меню Новый источник данных. По умолчанию, адаптер отображается в категории Избранное (Favorites), но можно изменить ее, установив опцию в одно из следующих значений: "Files", "SQL", "NoSQL", "Azure", "Google", "OnlineServices", "REST".

strel11 sampleConnectionString: пример строки подключения который вставиться в форме настройки нового подключения

strel11 process: функция которая вызовется для подготовки и передачи данных в Stimulsoft.Report.Engine

 

На вход функции process() передаются два аргумента: command и callback.

 

Аргумент command представляет собой JSON объект, в который JS report engine передаст следующие параметры:

strel11 command: действие, которое вызывается в данный момент. Возможные значения: "TestConnection": проверка соединения с базой данных из формы создания нового подключения "RetrieveSchema": извлечение схемы данных, нужно для оптимизации запроса и не передачи только необходимого набора данных. Вызывается после создания подключения "RetrieveData": запрос данных

strel11 connectionString: строка подключения к базе

strel11 queryString: строка SQL запроса

strel11 database: тип базы данных

strel11 timeout: время ожидания запроса, указанное в источнике данных

 

Аргумент callback является функцией, которую нужно вызвать для передачи подготовленных данных в JS report engine. В качестве аргументаcallback функции необходимо передать JSON объект, имеющий указанные ниже параметры:

strel11 success: флаг успешного выполнения команды

strel11 notice: если флаг выполенния команты имеет значение false, то данный параметр должен содержать описание ошибки

strel11 rows: масив строк, каждый элемент - это масив из значений, индексом является номер колонки

strel11 columns: масив имен колонок, индексом является номер колонки

strel11 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*"});

}

};

...