Информация

 

В следствие того, что для панелей индикаторов (дашбордов) и отчетов используется одинаковый унифицированный формат шаблона MRT, методы для загрузки шаблона и работы с данными, то в тексте документации будет использоваться слово «отчет».

 

 

 

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

 

Default.aspx

...

<cc1:StiWebViewer ID="StiWebViewer1" runat="server">

</cc1:StiWebViewer>

...

 

Default.aspx.cs

...

protected void Page_Load(object sender, EventArgs e)

{

DataSet ds = new DataSet();

ds.ReadXml(Server.MapPath("Reports/Demo.xml"));

 

StiReport report = new StiReport();

report.Load(Server.MapPath("Reports/TwoSimpleLists.mrt"));

report.Dictionary.Databases.Clear();

report.RegData("Demo", ds);

 

StiWebViewer1.Report = report;

}

...

 

 

Для подключения данных отчета можно воспользоваться специальным событием OnGetReportData, которое будет вызвано перед построением отчета.

 

Default.aspx

...

<cc1:StiWebViewer ID="StiWebViewer1" runat="server"

OnGetReportData="StiWebViewer1_GetReportData">

</cc1:StiWebViewer>

...

 

Default.aspx.cs

...

protected void StiWebViewer1_GetReportData(object sender, StiReportDataEventArgs e)

{  

DataSet dataSet = new DataSet();

dataSet.ReadXml(Server.MapPath("Reports/Demo.xml"));

e.Report.RegData(dataSet);

}

...

 

 

SQL источники данных

 

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

 

Default.aspx

...

<cc1:StiWebViewer ID="StiWebViewer1" runat="server"

OnGetReportData="StiWebViewer1_GetReportData">

</cc1:StiWebViewer>

...

 

Default.aspx.cs

...

protected void StiWebViewer1_GetReportData(object sender, StiReportDataEventArgs e)

{  

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

 

e.Report.RegData("Products", dataSet);

}

...

 

 

Также, для SQL источников данных используемых в отчете, можно указать Время ожидания запроса (Query Timeout) в секундах. Значение данного свойства сохраняется в самом шаблоне отчёта для каждого SQL подключения отдельно.

 

Ниже приведен пример кода, который предоставляет возможность изменить строку соединения для MS SQL, скорректировать запрос, установить время ожидания запроса для уже созданного соединения и источников данных в отчете.

 

Default.aspx.cs

...

protected void Page_Load(object sender, EventArgs e)

{

 

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;

 

StiWebViewer1.Report = report;

}

...

 

Информация

 

Для SQL источников данных других типов подключение создается аналогично, при этом подключается адаптер, соответствующий типу источника данных. Например, для MS SQL источника необходимо подключать SqlDataAdapter, для OLE DB необходим OleDbDataAdapter. Также, при этом следует указать строку соединения, соответствующую типу подключения.

 

 

 

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

 

Default.aspx.cs

...

protected void Page_Load(object sender, EventArgs e)

{

 

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

 

StiWebViewer1.Report = 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 источникам данных можно хранить в шаблоне отчета. Если требуется указать файлы данных из кода, можно воспользоваться приведенным ниже примером.

 

Default.aspx

...

<cc1:StiWebViewer ID="StiWebViewer1" runat="server"

OnGetReportData="StiWebViewer1_GetReportData">

</cc1:StiWebViewer>

...

 

Default.aspx.cs (XML file)

...

protected void StiWebViewer1_GetReportData(object sender, StiReportDataEventArgs e)

{  

DataSet data = new DataSet();

data.ReadXml(Server.MapPath("Data/Demo.xml"));

 

e.Report.RegData(data);

}

...

 

Default.aspx.cs (JSON file)

...

protected void StiWebViewer1_GetReportData(object sender, StiReportDataEventArgs e)

{  

DataSet data = StiJsonToDataSetConverterV2.GetDataSetFromFile(Server.MapPath("Data/Demo.json")); 

 

e.Report.RegData(data);

}

...

 

Информация

 

Во вьювере присутствует возможность получения данных из Excel файла. Для этого можно воспользоваться указанным ниже методом.

 

DataSet dataSet = StiExcelConnector.Get().GetDataSet(new StiExcelOptions(array, this.FirstRowIsHeader));