QS函数

1. 取数设置

要想顺利使用QS函数,必须先在服务器端定义好取数设置。取数设置支持JDBC取数和BI取数。取数设置可用于插件取数公式QS和变长表初始化数据。

1.1. JDBC取数设置

取数名称:用于指定插件中QS函数取数公式的第一个参数,建议取简短易记的英文字母作为名字.

数据源名称:用于指定取数的数据库连接对象,可以在"服务器管理"的"数据源管理"中设置.

SQL语句:用于指定取数的SQL语句,SQL语句必须是一个select语句或者存储过程.

     SQL语句可以包含如下自定义宏参数

    宏名称 类型 含义

    <id> 字符串 报表户代码

    <lid> 字符串 登录用户代码

    <bbq> 字符串 登录用户填报任务的报表期

    <option> 字符串 代表由QS函数传递过来的扩展参数

    <rs> 游标,存储过程的返回类型。 采用存储过程时使用到此宏参数,用来表示存储过程将返回结果集,例如:

sql,,)}或者--其它数据库写法{call=proc2(,)}]]>

字符串 用于扩展,由QS函数传递

关键字列:用于指定返回语句中唯一性关键字的字段名,可以有多个.

示例:

sql and userid_=--存储过程举例:{call proc1(,,)},--或者{call proc1(,,)}--或者{call =proc2(,)}]]>

1.2. BI取数设置

取数名称:用于指定插件中QS函数取数公式的第一个参数,建议取简短易记的英文字母作为名字.

数据源名称:用于指定取数的BI数据源名称,可以在"服务器管理"的"数据源管理"中设置.

BI报表:用于取数用的BI报表。

取数区域、行列定义:要从BI报表取数的表元范围。其中列名相当于jdbc取数中查询结果的字段名,将作为QS函数中用的指标名来使用。

参数列表:查询BI报表用的参数

2. 取数函数说明

QS("取数名称","报表期","报表户","指标名","扩展参数选项")

 QS函数返回一个字符串型,它只接收五个字符串型的参数:

取数名称:第一个参数表示要取哪个取数设置的数据,此参数必须指定。

报表期:第二个参数是取哪个期的数据,此函数可以为空表示取当前期,为@1表示前一期,为200212-表示取2002年12月的数据。

报表户:第三个参数是取那户的数据,为空表示取当前户的数据,为001表示是取报表户代码为001的单位的数据。

指标名:第四个参数是表示取哪个指标。

扩展参数选项:第五个参数是自定义选项以备扩充,对于通过SQL定义的取数设置,你可以在你的SQL中用<option>标签来接收此参数值,运行时,SQL语句中的<option>字串会自动替换为QS函数传过来的值。你也可能通过此参数传递一个特殊格式的值,相应的,在服务器端,需要针对这个特殊格式开发相应的接口对此参数进行解析。

此函数主要用在插件上在线填报时从数据源中取数。

3. 应用举例

3.1. 简单SQL取数

 某取数设置名为"GETDATA1",

其语句为:

SQL

相应QS公式写法为:

QS("GETDATE1","","","name","")

 

3.2. 从多行多列SQL结果中取数

某取数设置名为"GETDATA2",

其SQL为,

SQL

关键字列为    PID

SQL查询结果如下:

PID

Price

Qty

ProductName

A101

100.2

14

CD-ROM

A102

200.5

26

TV-CARD

C110

300.4

17

LCD

则公式用法如下示例:

QS("GETDATA2","","","A101@Price","")  返回"100.2"QS("GETDATA2","","","A102@ProductName","")  返回" TV-CARD "QS("GETDATA2","","","C110@ProductName ","")  返回" LCD "QS("GETDATA2","","","A101@Qty","")  返回"14"

3.3. SQL取数中使用宏参数

某取数设置名为"GETDATA3",我们要取某表中当前报表户、当前报表期、且A2的值等于上期A2值的当前期H4的数据

其SQL为:

SQL AND userid_= AND A2=

其中<option>的值要想办法变成上期A2的值。则我们的QS函数可以这么写(在QS的第5个参数中传入上期的A2值):

QS("GETDATA3","","","H4",@-1A2)

3.4. 从存储过程中取数

 例如,在Oracle中定义如下储存过程:

SQL

存储过程书写请注意:必须要有一个返回值,对于oracle就是OUT参数,此OUT参数必须是结果集!

取数设置中,取数名称为"GETDATA4",

其SQL语句定义为:

SQL)}]]>

其中<rs>参数位置对应存储过程OUT参数位置(for Oracle),必须有。(上述sql写法,不同数据库格式不一样,<rs>位置也不一样,请参考前文说明)

相应的取数函数写法:

QS("GETDATE4","","","HYDM","")

3.5. 从BI取数

 假设有如下BI取数设置,

QS函数

在QS函数中,取返回结果集中的D列的值,

QS("QS2","","","D","")

 

4. 取数函数扩展

前面列举了扩展参数<option>的简单应用。对于需要满足特殊查询取数的情况,也可以通过QS函数传递扩展参数来实现,参数格式可以自行约定,相应的,服务器端要实现一个ReportDataSetFactory接口来解析并处理此扩展参数。

 ReportDataSetFactory接口定义如下:

 /** * 此接口是一个参数取数接口的类工厂接口,共第三方开发者实现。 */public interface ReportDataSetFactory extends ObjectFactory {   public static final String PARAM_TASK = "taskObj";   /**   * 根据所指定的参数,返回一个实现接口ReportDataSet的类。   * @param cls 参数cls表示返回的实现的类的类别   * @param 参数bbq表示要取哪期的数,如200201--表示2002年1月   * @param 参数bbhid表示要取哪个单位的数据   * @param 参数option用于扩充,由QS函数扩展参数提供,其格式任意,由ReportDataSetFactory实现类负责解析。   * @param 参数zbs表示将要取的那些指标的名称,对于变长表的取数,此参数为null   * @return 返回ReportDataSet对象实例 */  public ReportDataSet createReportDataSet(Login login, String cls, String bbq, String bbhid, String btype,String option, String[] zbs);   /**   * 取得服务器上所支持的所有取数设置的名字   * @return   */  public String[] getClsNames();}

要使用此扩展实现,还要在server.property里增加如下参数,例如:

ReportDataSetFactory=com.sanlink.oem.nfh.ReportDataSetFactoryNfhImpl

 如果你有多个实现类,则用逗号分隔。

附件列表

7

文档内容仅供参考
如果您需要解决具体问题,还可以登录亿信社区
在提问求助板块提问,30分钟内帮您解决问题

如果您认为本词条还有待完善,请编辑

上一篇表元属性及其应用

下一篇代码组应用-如何让数据采集更精准更高效

请先登录