Lenka.Guo 发表于 2021-7-9 14:31:56

AR14及AR15 JSViewer 在前台进行报表传参后,在后端获取前台参数传值

JSViewer 是 ActiveReports 主要的报表展示工具,报表参数是报表接受外界输入的唯一值,因此我们经常需要使用从前台为报表传值后,获取值后实现数据查找,数据过滤,以及其他的权限控制等,本篇文章来分享下如何使用JSViewer在前端传值的,并在后台获取到当前值。

1. JSViewer 初始化

即当进入页面时,先创建JSViewer 对象。
viewer = GrapeCity.ActiveReports.JSViewer.create({
      element: '#viewerContainer'
      });


2. 当用户选择加载对应的报表时,调用JSViewer的OpenReport 接口为报表传递需要打开的报表ID 及对应的参数格式

viewer.openReport('AcmeStore.rdlx', [{name:'p1',values:['test']}]);

注意: openReport 包含两个参数,第一个是报表名,第二个是 对应的参数对象数组,即一个报表可能会有多个参数,因此本身是数组外部会用[]包围,每一个参数是一个json 对象会包含参数名和参数值,参数值也可能是多值存在数组中因此参数的格式为
[{name:'参数1',values:["value1"]},{name:'参数2',values:["value1"]}]

3. 前台的代码已经完成了,现在再看后台中如何获取:
一般情况下后台获取报表参数,可以通过SetLocateDataSource 方法,注意不是LocateDataSource handler,这两个会有区别,只有SetLocateDataSource 方法才有 args.ReportParameters对象。
app.UseReporting(settings =>
            {
                //settings.UseEmbeddedTemplates(EmbeddedReportsPrefix, Assembly.GetAssembly(GetType()));
               settings.UseCustomStore(getReportFn);
               settings.UseCompression = true;
               settings.SetLocateDataSource(args => {
                var temp = args.ReportParameters.Value;
                DataTable dt = new DataTable();
                dt.Columns.Add("a1");
                dt.Columns.Add("a2");
                dt.Rows.Add("a1", "a1");


                return dt; });
               
            });


页: [1]
查看完整版本: AR14及AR15 JSViewer 在前台进行报表传参后,在后端获取前台参数传值