Данные для построения отчета могут быть подключены различными способами. Самый простой – хранить настройки подключения в самом шаблоне отчета. Так же данные можно подключить из кода, это можно сделать при загрузке отчета в действии GetReport.
HomeController.cs
|
...
public IActionResult GetReport()
{
DataSet ds = new DataSet();
ds.ReadXml(StiNetCoreHelper.MapPath(this, "Data/Demo.xml"));
StiReport report = new StiReport();
report.Load(StiNetCoreHelper.MapPath(this, "Reports/TwoSimpleLists.mrt"));
report.Dictionary.Databases.Clear();
report.RegData("Demo", ds);
return StiNetCoreViewer.GetReportResult(this, report);
}
...
|
Данные для отчета можно подключать не только при загрузке отчета. Например, можно подключить новые данные в момент интерактивных действий во вьювере (применение параметров отчета, сортировка, детализация, сворачивание). Для этого необходимо задать действие Interaction для компонента HTML5 Viewer, а в обработчике действия подключить данные для текущего отчета. Таким же способом можно подключить данные в других действиях вьювера.
Index.cshtml
|
...
@Html.StiNetCoreViewer(new StiNetCoreViewerOptions() {
Actions =
{
GetReport = "GetReport",
ViewerEvent = "ViewerEvent",
Interaction = "ViewerInteraction"
}
})
...
|
HomeController.cs
|
...
public IActionResult ViewerInteraction()
{
DataSet data = new DataSet();
data.ReadXml(StiNetCoreHelper.MapPath(this, "Data/Demo.xml"));
StiReport report = StiNetCoreViewer.GetReportObject(this);
report.RegData("Demo", data);
return StiNetCoreViewer.InteractionResult(this, report);
}
...
|
При необходимости подключить новые данные только для определенного интерактивного действия вьювера, например, только при применении параметров отчета, можно воспользоваться параметрами вьювера. Параметры вьювера представлены в виде объекта класса StiRequestParams, они передаются при любом запросе на сторону сервера, и содержат все необходимые сведения и состояния клиентской части вьювера. Для определения типа действия вьювера достаточно проверить свойство Action у параметров вьювера.
HomeController.cs
|
...
public IActionResult ViewerInteraction()
{
StiRequestParams requestParams = StiNetCoreViewer.GetRequestParams(this);
if (requestParams.Action == StiAction.Variables)
{
DataSet data = new DataSet();
data.ReadXml(StiNetCoreHelper.MapPath(this, "Data/Demo.xml"));
StiReport report = StiNetCoreViewer.GetReportObject(this);
report.RegData("Demo", data);
return StiNetCoreViewer.InteractionResult(this, report);
}
return StiNetCoreViewer.InteractionResult(this);
}
...
|
SQL источники данных
Параметры подключения к SQL источнику данных, как и к любому другому, можно хранить в самом шаблоне отчета. Если требуется задать параметры подключения из кода перед построением отчета (например, по причине безопасности или в зависимости от авторизованного пользователя), можно воспользоваться приведенным ниже примером.
HomeController.cs
|
...
public IActionResult GetReport()
{
OracleConnection connection = new OracleConnection("Data Source=Oracle8i;Integrated Security=yes");
connection.Open();
OracleDataAdapter adapter = new OracleDataAdapter();
adapter.SelectCommand = new OracleCommand("SELECT * FROM Products", connection);
DataSet dataSet = new DataSet("productsDataSet");
adapter.Fill(dataSet, "Products");
StiReport report = new StiReport();
report.Load(StiNetCoreHelper.MapPath(this, "Reports/SqlSampleReport.mrt"));
report.RegData("Products", dataSet);
return StiNetCoreViewer.GetReportResult(this, report);
}
...
|
Также, для SQL источников данных используемых в отчете, можно указать Время ожидания запроса (Query Timeout) в секундах. Значение данного свойства сохраняется в самом шаблоне отчёта для каждого SQL подключения отдельно.
Ниже приведен пример кода, который предоставляет возможность изменить строку соединения для MS SQL, скорректировать запрос, установить время ожидания запроса для уже созданного соединения и источников данных в отчете.
HomeController.cs
|
...
public IActionResult GetReport()
{
StiReport report = new StiReport();
report.Load(Server.MapPath("Report.mrt"));
((StiSqlDatabase)report.Dictionary.Databases["Connection"]).ConnectionString = @"Data Source=server;Integrated Security=True;Initial Catalog=DataBase";
((StiSqlSource)report.Dictionary.DataSources["DataSourceName"]).SqlCommand = "select * from Table where Column = 100";
((StiSqlSource)report.Dictionary.DataSources["DataSourceName"]).CommandTimeout = 1000;
return StiNetCoreViewer.GetReportResult(this, report);
}
...
|
Вы также можете использовать данные для разработки отчетов и дашбордов полученные из OData хранилищ данных. В этом случае, авторизация может быть выполнена с использованием имени, пароля пользователя или с использованием токена. Параметры авторизации указываются в строке соединения к OData хранилищу с использованием разделителя ";".
HomeController.cs
|
...
public IActionResult GetReport()
{
StiReport report = new StiReport();
//Authorization using a user account
var oDataDatabase = new 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 StiODataDatabase("OData", "OData", @"https://services.odata.org/V4/Northwind/Northwind.svc;Token=Enter your token", false, null);
report.Dictionary.Databases.Add(oDataDatabase);
oDataDatabase.Synchronize(report);
//Query with data filter
((StiSqlSource)report.Dictionary.DataSources["Products"]).SqlCommand = "Products?$filter=ProductID eq 2";
return StiNetCoreViewer.GetReportResult(this, report);
}
...
|
В таблице ниже представлены шаблоны строк подключения для различных типов источников данных.
Источник данных
|
Шаблон строки соединения
|
MS SQL
|
Integrated Security=False; Data Source=myServerAddress;Initial Catalog=myDataBase; User ID=myUsername; Password=myPassword;
|
MySQL
|
Server=myServerAddress; Database=myDataBase;UserId=myUsername; Pwd=myPassword;
|
ODBC
|
Driver={SQL Server}; Server=myServerAddress;Database=myDataBase; Uid=myUsername; Pwd=myPassword;
|
OLE DB
|
Provider=SQLOLEDB.1; Integrated Security=SSPI;Persist Security Info=False; Initial Catalog=myDataBase;Data Source=myServerAddress
|
Oracle
|
Data Source=TORCL;User Id=myUsername;Password=myPassword;
|
MS Access
|
Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Password=pass;Data Source=C:\\myAccessFile.accdb;
|
PostgreSQL
|
Server=myServerAddress; Port=5432; Database=myDataBase;User Id=myUsername; Password=myPassword;
|
Firebird
|
User=SYSDBA; Password=masterkey; Database=SampleDatabase.fdb;DataSource=myServerAddress; Port=3050; Dialect=3; Charset=NONE;Role=; Connection lifetime=15; Pooling=true; MinPoolSize=0;MaxPoolSize=50; Packet Size=8192; ServerType=0;
|
SQL CE
|
Data Source=c:\MyData.sdf; Persist Security Info=False;
|
SQLite
|
Data Source=c:\mydb.db; Version=3;
|
DB2
|
Server=myAddress:myPortNumber;Database=myDataBase;UID=myUsername;PWD=myPassword;Max Pool Size=100;Min Pool Size=10;
|
Infomix
|
Database=myDataBase;Host=192.168.10.10;Server=db_engine_tcp;Service=1492;Protocol=onsoctcp;UID=myUsername;Password=myPassword;
|
Sybase
|
Data Source=myASEserver;Port=5000;Database=myDataBase;Uid=myUsername;Pwd=myPassword;
|
Teradata
|
Data Source=myServerAddress;User ID=myUsername;Password=myPassword;
|
VistaDB
|
Data Source=D:\folder\myVistaDatabaseFile.vdb4;Open Mode=ExclusiveReadWrite;
|
Universal(dotConnect)
|
Provider=Oracle;direct=true;data source=192.168.0.1;port=1521;sid=sid;user=user;password=pass
|
MongoDB
|
mongodb://<user>:<password>@localhost/test
|
OData
|
http://services.odata.org/v3/odata/OData.svc/
|
|
|
Данные из XML, JSON, Excel файлов
Подключение к XML и JSON источникам данных можно хранить в шаблоне отчета. Если требуется указать файлы данных из кода, можно воспользоваться приведенным ниже примером.
HomeController.cs
|
...
public IActionResult GetReport()
{
DataSet data = new DataSet();
data.ReadXml(StiNetCoreHelper.MapPath(this, "Data/Demo.xml"));
StiReport report = new StiReport();
report.Load(StiNetCoreHelper.MapPath(this, "Reports/SimpleList.mrt"));
report.RegData(data);
return StiNetCoreViewer.GetReportResult(this, report);
}
...
|
HomeController.cs
|
...
public IActionResult GetReport()
{
DataSet data = StiJsonToDataSetConverterV2.GetDataSetFromFile(StiNetCoreHelper.MapPath(this, "Data/Demo.json"));
StiReport report = new StiReport();
report.Load(StiNetCoreHelper.MapPath(this, "Reports/SimpleList.mrt"));
report.RegData(data);
return StiNetCoreViewer.GetReportResult(this, report);
}
...
|
|