10.查询条件


  在多数情况下,报表的查询往往是有条件的查询,具体对应到数据源,则需要数据源有动态更改查询参数的功能.
  数据源的动态查询参数,分为外部动态和内部动态二种,我们分别介绍之.

10.1.外部动态参数

  所谓外部,是指通过 js 动态让报表更改查询参数,最简单的方法是执行报表的 SetParas( ) 函数,例如:
 AF.func("SetParas", "ds1 \r\n year=2012; month=2");
 AF.func("calc", "");
  查询参数 year 和 month 将自动被附在URL中,假设原先的 URL 是:
    ../getData.aspx?ver=22
  新的URL将会是:
    ../getData.aspx?ver=22&year=2012&month=2
  如果 URL 中原先已经有 year、month 参数,那么这些参数会被替换成新的.
  SetParas 函数使用很简单,并且对临时数据源和中心数据源都适用。

  对于临时数据源,还有一种更常见的方法:把查询参数直接置于 SetSource 中,因为临时数据源反正是要调用 SetSource 函数的:
function OnReady(id) {
 AF.func("Build", "report/myReport.xml");
 //指定ds1数据源取数的URL地址
 AF.func("SetSource", "ds1 \r\n ../getData.aspx?ver=22&year=2012&month=2");
 //需要重新计算, 因为SetSource仅仅是相当于更改一个属性
 AF.func("Calc", ""); 
}

10.2.内部动态参数

  内部动态参数,是指报表的数据源本身就已经预先设定了某些固定的参数了.
  中心数据源的内部动态参数请看文档 "9.中心数据源" 中的 "9.3参数协议", 例如:
<?xml version="1.0" encoding="UTF-8"?">
<Project name="业务数据" tip="货运数据">
 <ds id="11" para1="月份" para2="组织号" dataURL="data.serv?month=@para1&org=@para2" descURL="data1.desc.xml">货运数据</ds>
 ...
  临时数据源的查询参数需要在数据源的这个界面中设定:

  采用内部参数的好处是,是当你在输入数据源公式时,上方的黄色tip提示条会告诉你,接下去该输入什么参数了:
  并且,你可以不设死参数,可以引用另外的单元格,例如:
=datarow('ds1', A3, B4)
  在计算时,数据源的参数将会自动取自 A3、B4 单元格.

  关于上述参数的实例,请参见在线演示:“33.穿透式查询”,这个例子有上述二种参数的完整使用情形.