SQL Server Reporting Service(SSRS) 第五篇 自定义数据处理扩展DPE(Data Processing Extension)
最近在做SSRS项目时,遇到这么一个情形:该项目有多个数据库,每个数据库都在不同的服务器,但每个数据库所拥有的数据库对象(table/view/SPs/functions)都是一模一样的,后来结合网络上众多的资源找到了解决方案,即Data Processing Extensio(DPE)。所谓DPE,直白地说就是开发自己的DLL去扩展SSRS的数据源,具体的操作如下所示:
1. 新建类库项目,并引入以下两个DLL:
C:\Program Files\Microsoft SQL Server\MSSQLSERVER\Reporting Services\ReportServer\bin\Microsoft.ReportingServices.Interfaces.dll
C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.5\System.Data.DataSetExtensions.dll
2. 根据参数获取Connection String:新建DBConnection类文件,实现接口IDbConnectionExtension并且重写其中的方法:
A. SetConfiguration():主要是实现读取数据库连接的配置文件:
public void SetConfiguration(string configuration)
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(configuration);
string ConfigFilePath = AppDomain.CurrentDomain.SetupInformation.ApplicationBase + xmlDoc.ChildNodes[].Attributes["configSource"].InnerText;
ExeConfigurationFileMap file = new ExeConfigurationFileMap();
file.ExeConfigFilename = ConfigFilePath;
Configuration config = ConfigurationManager.OpenMappedExeConfiguration(file, ConfigurationUserLevel.None);
foreach (ConnectionStringSettings cf in config.ConnectionStrings.ConnectionStrings)
{
connectionStrings.Add(cf.Name, cf.ToString());
}
}
B. GetConnectionByParameter():主要根据User的选择来返回相应的Database connection;
public SqlConnection GetConnectionByParameter(IDataParameterCollection parameters)
{
var connString = connectionStrings["CentralDBConnString"]; foreach (DBParameter param in parameters)
{
if (param.ParameterName.Equals("ClinicCode"))
{
//Using the first value if the ClinicCode were selected for more than 1 option.
if (param.Values != null && param.Values.Length > 1)
{
param.Value = param.Values[0];
}
connString = GetConnectionStringsConfig(param.Value.ToString());
}
} return new SqlConnection(connString);
}
3. 执行SQL命令:新建DBCommand类文件,实现接口IDbCommand并且重写其中的方法:
A. ExecuteReader(): 执行SQL Command;
public IDataReader ExecuteReader(CommandBehavior behavior)
{
Debug.WriteLine("IDBCommand.ExecuteReader with CommandBehavior." + behavior); // get connection based on parameters
using (SqlConnection conn = m_connection.GetConnectionByParameter(this.Parameters))
{
conn.Open(); SqlCommand cmd = new SqlCommand(CommandText, conn);
cmd.CommandType = (System.Data.CommandType)this.CommandType;
foreach (DBParameter param in this.Parameters)
{
if (param.Value != null)
cmd.Parameters.Add(new SqlParameter(param.ParameterName, param.Value));
else
cmd.Parameters.Add(new SqlParameter(param.ParameterName, DBNull.Value));
} SqlDataAdapter sqlDA = new SqlDataAdapter(cmd);
System.Data.DataSet dsResult = new System.Data.DataSet();
sqlDA.Fill(dsResult);
m_dataTable = dsResult.Tables[]; conn.Close();
return new DBDataReader(this);
}
}
4. 小结:最后还需要实现的几个接口包括:IDataReader,IDataParameter, IDataMultiValueParameter,IDataParameterCollection,并要实现其中的某些方法。完成以上步骤后基本所有的工作已经完成,接下来就是部署DLL了。
5. 部署:部署有两个选择,一种是供SSRS在设计模式使用DPE,另一种是供SSRS在发布后在Reporting Server上使用DPE。两种方法的发布路径及配置文件均不同,但过程都极为相似。以下是两种方式的区别:
1. Open the project "ProjectName" and rebuild it ;
2. Copy the file "ProjectName.dll" and "ProjectName.pdb" inside folder "ProjectName\ProjectName\bin\Debug" to path "C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\PrivateAssemblies\";
3. Copy file "ProjectName.config" inside project root directory to path "C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\PrivateAssemblies\";
4. Open the file "RSReportDesigner.config" inside folder "C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\PrivateAssemblies\"(The exactly path base on the Visio Studio version you installed in your local);
4.1. Find the node <Data> inside node <Extensions>, add node "<Extension Name="XXXX DataSource Extension" Type="ProjectName.DBConnection, ProjectName" />" inside node <Data>;
4.2 Find the node <Desinger> inside node <Extensions>, add node "<Extension Name="XXXX DataSource Extension" Type="Microsoft.ReportingServices.QueryDesigners.GenericQueryDesigner,Microsoft.ReportingServices.QueryDesigners"/>" inside node <Desinger>; 5. Open the file "RSPreviewPolicy.config" inside folder "C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\PrivateAssemblies\"(The exactly path base on the Visio Studio version you installed in your local);
5.1 Find the node <Data> inside node <Extensions>, add node below content inside node <CodeGroup>;
<CodeGroup
class="UnionCodeGroup"
version="1"
PermissionSetName="FullTrust"
Name="XXXX DataSource Extension"
Description="Code group for my Custom DataSource for data processing extension">
<IMembershipCondition
class="UrlMembershipCondition"
version="1"
Url="C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\PrivateAssemblies\ProjectName.dll"
/>
</CodeGroup> 6. Open your DataSource of SSRS report ,select the Embedded connections and choice the DPE named "XXXX DataSource Extension" from the dropdownlist of Type;
7. Click OK button to use the DPE. PS.
1. Please close and open your Visio Studio again, if you can not find the DPE named "XXXX DataSource Extension" after you finished above steps; Using the DEP in Report Server(After deploy to Reporting Server):
***********************************************************************************************************
1. Open the project "ProjectName" and rebuild it ;
2. Copy the file "ProjectName.dll" and "ProjectName.pdb" inside folder "ProjectName\ProjectName\bin\Debug" to path "C:\Program Files\Microsoft SQL Server\MSRS12.MSSQLSERVER\Reporting Services\ReportServer\bin\";
3. Copy file "ProjectName.config" inside project root directory to path "C:\Program Files\Microsoft SQL Server\MSRS12.MSSQLSERVER\Reporting Services\ReportServer\bin\";
4. Open the file "rsreportserver.config" inside folder "C:\Program Files\Microsoft SQL Server\MSRS12.MSSQLSERVER\Reporting Services\ReportServer\"(The exactly path base on the Visio Studio version you installed in your local);
4.1. Find the node <Data> inside node <Extensions>, add below content inside node <Data>;
<Extension Name="DPEName" Type="ProjectName.DBConnection,ProjectName">
<Configuration>
<connectionStrings configSource="\bin\ProjectName.config" />
</Configuration>
</Extension>
4.2 Find the node <Desinger> inside node <Extensions>, add below inside node <Desinger>; 5. Open your DataSource of SSRS report in Reporting Server,then open the report through right click it and select "Manage";
6. Click "Data Source" from the menu located left side of the new page;
7. Select "A Custom Data Source" in the right side of the page,followed by selecting DPE named "XXXX DataSource Extension" as the Data source type;
8. Click Apply button to use the DPE. PS.
1. Please restart the Reporting Services if you still can not find the DataSource manage page after you finished above steps;
6. 总结:经过这次对DPE的使用,总体来说没有什么难度,但在使用的过程中最好能下载一个例子,然后在其基础上进行修改,这样会节约很多时间。此外还要注意的是使用的.Net Framework的版本,刚开始由于版本不正确,导致一直找不到自定义的DPE,最后经过自己重复测试才找到原因!以下是Google是找到的几个链接,在我使用的过程中帮了我很大的忙:
- Code Project article - https://www.codeproject.com/articles/272652/ssrs-multi-data-source-dpe-data-processing-extensi
- Custom Data Sources in SSRS - http://discoveringdotnet.alexeyev.org/2013/08/custom-data-sources-in-ssrs.html
- MSDN article - https://msdn.microsoft.com/en-us/library/ms154027.aspx
SQL Server Reporting Service(SSRS) 第五篇 自定义数据处理扩展DPE(Data Processing Extension)的更多相关文章
- SQL Server Reporting Services 自定义数据处理扩展DPE(Data Processing Extension)
最近在做SSRS项目时,遇到这么一个情形:该项目有多个数据库,每个数据库都在不同的服务器,但每个数据库所拥有的数据库对象(table/view/SPs/functions)都是一模一样的,后来结合网络 ...
- SQL Server Reporting Service(SSRS) 第三篇 SSRS Matrix用法
以前不是太清楚SSRS的功能,自从最近有了了解之后,发现它的功能的确很强大.对于Matrix,刚开始我竟不知道它到底有什么用,现将通过一个例子中去理解Matrix,以及和分组Group结合使用的便利性 ...
- SQL Server Reporting Service(SSRS) 第七篇 常见错误汇总
1. The current action cannot be completed. The user data source credentials do not meet the requirem ...
- SQL Server Reporting Service(SSRS) 第六篇 SSRS 部署总结
前段时间完成了第一批次SSRS报表的开发,本来以为大功已经告成,结果没有想到在整个发布与部署过程中还是遇到了很多的问题,现将这些问题一一列举出来,希望对以后能够有所启发! 1. 关于数据源与数据集的发 ...
- SQL Server Reporting Service(SSRS) 第四篇 SSRS 用法总结
1. 如何让表头在每页显示(译) A. 打开高级模式: 在分组栏中点击Column Goups右侧的箭头选择高级模式; B. 找到第一个Static组 在Row Groups区域中(注意不是Colu ...
- SQL Server Reporting Service(SSRS) 第四篇 SSRS 常见问题总结
1. 如何让表头在每页显示(译) A. 打开高级模式: 在分组栏中点击Column Goups右侧的箭头选择高级模式; B. 找到第一个Static组 在Row Groups区域中(注意不是Colu ...
- SQL Server Reporting Service(SSRS) 第二篇 SSRS数据分组Parent Group
SQL Server Reporting Service(SSRS) 第一篇 我的第一个SSRS例子默认使用Table进行简单的数据显示,有时为了进行更加直观的数据显示,我们需要按照某个字段对列表进行 ...
- SQL Server Reporting Service(SSRS) 第一篇 我的第一个SSRS例子
很早就知道SQL SERVER自带的报表工具SSRS,但一直没有用过,最近终于需要在工作中一展身手了,于是我特地按照自己的理解做了以下总结: 1. 安装软件结构 SSRS全称SQL Server Re ...
- 在每页(分页)报表中重复显示标题 - SQL Server Reporting Service (SSRS)
问题描述 TFS系统提供多种报表,有图表(Chart).Web面板(Dashboard).SharePoint面板.Excel报表,SQL Server Reporting Serivce(SSRS) ...
随机推荐
- java 使用simpleDateFormat格式化日期 时间.RP
首先了解一下格式化日志的所有表示. 时间日期标识符: yyyy:年 MM:月 dd:日 hh:1~12小时制(1-12) HH:24小时制(0-23) mm:分 ss:秒 S:毫秒 E:星期几 D:一 ...
- 《Head First Servlets & JSP》-9-使用JSTL
安装JSTL1.1的说明 JSTL1.1不是JSP2.0规范的一部分,能访问servlet和JSP API并不意味着能访问JSTL. 使用JSTL之前,需要将jstl.jar文件安装到Web应用的WE ...
- Sass和Compass设计师指南 Ben Frain 中文高清PDF扫描版
Sass和Compass设计师指南是<响应式Web设计:HTML5和CSS3实战>作者Ben Frain的又一力作.作者通过丰富.完整的案例,循序渐进地展示了Sass和Compass的使用 ...
- C#使用Newtonsoft.Json操作json
1.下载 Newtonsoft.Json 右键引用,选择 管理NuGet程序包,选择浏览,输入log4net,然后点击下载 2.json数据的组装与解析 public class Class { pu ...
- Spark大数据处理 之 动手写WordCount
Spark是主流的大数据处理框架,具体有啥能耐,相信不需要多说.我们开门见山,直接动手写大数据界的HelloWorld:WordCount. 先上完整代码,看看咋样能入门. import org.ap ...
- USACO 1.1.2 Greedy Gift Givers(gift1)
这道题大意就是几个人互送礼物,让你求每个人的盈利. 原题给的样例数据: 5(人的个数.) =========(下面是人名,输出按照这顺序)davelauraowenvickamr ========== ...
- flask 坑
no python application found, check your startup logs for errors 日志里面报类似于“Mon Mar 23 10:26:49 2015 – ...
- 对DeepLung数据预处理部分的详细展示
之前有解释预处理部分的函数,不过觉得还不够详细,同时文字解释还不够直观,所以现在想一步步运行下,打印输出 首先读取原始数据,包括相应的注释(即结节标签)[注意]注释文件中的标签是按x,y,z的顺序给的 ...
- VisualSVN的安装使用
1.什么是VisualSVN VisualSVN Server是集成了Subversion和Apache的一种版本管理工具,它简化了手工配置Subversion的繁琐步骤,安装的时候SVN Serve ...
- SoapUI Properties的使用
Link:http://testautomationnoob.blogspot.com/2012/10/soapui-properties-and-property-related.html soap ...