如何使用c#代码在自定义SSRS渲染器中获得rdl报告参数值
本文关键字:rdl 报告 参数 代码 何使用 自定义 SSRS | 更新日期: 2023-09-27 18:07:20
我为SSRS制作了一个渲染扩展,它以pdf格式生成数字签名和密码保护的报告。目前,我假设用户id来自RDL报告参数,所以我制作了一个带有一个参数的示例RDL报告。我只是想在我的类库项目中使用c#代码获取报告的参数值。
bool IRenderingExtension.Render(Microsoft.ReportingServices.OnDemandReportRendering.Report report, NameValueCollection reportServerParameters, NameValueCollection deviceInfo, NameValueCollection clientCapabilities, ref System.Collections.Hashtable renderProperties, CreateAndRegisterStream createAndRegisterStream)
{
pdfheper = new PDFHelper();
//Get user id from parameter
try
{
pdfRenderer.Render(report, reportServerParameters, deviceInfo, clientCapabilities, ref renderProperties,
new CreateAndRegisterStream(IntermediateCreateAndRegisterStream)
);
String tempFile = Path.GetTempPath() + report.Name + ".pdf";
String tempSigned = Path.GetTempPath() + report.Name + "signed.pdf";
signer = new PDFSigner(Config.CertFilePath, Config.CertFilePass, tempFile, tempSigned);
//Stream where report capture
Stream outputStream = createAndRegisterStream(report.Name, "pdf", Encoding.UTF8, "application/pdf", true, StreamOper.CreateAndRegister);
intermediateStream.Position = 0;
pdfheper.SaveStreamToFile(tempFile, intermediateStream);
//Here get value from report parameter
int userid = 2;
RendererDAL dsl = new RendererDAL();
string userPassword = dsl.GetUserPassword(userid);
//Add Signature
if (signer.AddSignature(userPassword))
{
// convert pdf to stream
intermediateStream = pdfheper.FileToStream(tempSigned);
//After apply signature copy stream to output stream
byte[] buffer = new byte[32 * 1024];
while (true)
{
int read = intermediateStream.Read(buffer, 0, buffer.Length);
if (read <= 0) break;
outputStream.Write(buffer, 0, read);
}
intermediateStream.Close();
intermediateStream = null;
File.Delete(tempFile);
File.Delete(tempSigned);
}
}
catch (Exception ex)
{
MyLogManager.Log(ex.ToString());
}
return false;
}
在Render方法的参数列表中有一个reportServerParameters参数。这是
的一个实例System.Collections.Specialized.NameValueCollection
我想检索参数的代码可能是:
string parameterValue = reportServerParameters.Get(<Parameter Name>);
对于多值形参:
string[] parameterValues = reportServerParameters.GetValues(<Parameter Name>);
https://msdn.microsoft.com/en-us/library/system.collections.specialized.namevaluecollection.aspx