IBM Books

管理与程序设计指南,OS/400 版

报表块

使用 REPORT 块语言结构来格式化并显示来自 FUNCTION 块的数据输出。这个输出通常是表格数据, 尽管可以指定文本、宏变量引用和函数调用的任何有效组合。通常可以任选地在 REPORT 块上指定表名。如果没有指定表格名称,Net.Data 将使用 FUNCTION 参数列表中第一个输出表格的表格数据。

REPORT 块具有三部分,每部分都是可选的:

例子:

%REPORT{
<H2>Query Results</H2>
<P>Select a name for details.
<TABLE BORDER=1>
<TR>
    <TD>Name</TD>
    <TD>Location</TD></TR>
%ROW{
<TR>
<TD>
    <a href="/cgi-bin/db2www/name.d2w/details?name=$(V1)&location;=$(V2)">$(V1)</a>
    </TD>
<TD>$(V2)</TD>
  </TR>
  %}
</TABLE>
%}

REPORT 块的准则

在创建 REPORT 块时,请使用以下准则:

例:定制报表

下例显示如何使用特殊变量和 HTML 标记来定制报表格式。它显示来自表格 CustomerTbl 的姓名、电话号码和传真号码:

%DEFINE SET_TOTAL_ROWS="YES"
...
%FUNCTION(DTW_SQL) custlist() {
     SELECT Name, Phone, Fax FROM CustomerTbl
%REPORT{
<I>Phone Query Results:</I>
<BR>
=====================
<BR>
%ROW{
   Name: <B>$(V1)</B>
<BR>
Phone: $(V2)
<BR>
Fax: $(V3)
<BR>
------------------------------
<BR>
    %}
    Total records retrieved: $(TOTAL_ROWS)
  %}
%}

Web 浏览器中的结果报表如下所示:

Phone Query Results:
====================
Name: Doen, David
Phone: 422-245-1293
Fax: 422-245-7383
------------------------------
Name: Ramirez, Paolo
Phone: 955-768-3489
Fax: 955-768-3974
------------------------------
Name: Wu, Jianli
Phone: 525-472-1234
Fax: 525-472-1234
------------------------------
Total records retrieved: 3

Net.Data生成报表是通过:

  1. 在报表的开头打印一次 Phone Query Results:。此文本和分隔线 是 REPORT 块的页眉部分。

  2. 对于检索到的每一行,分别用 Name、Phone 和 Fax 的值替换变量 V1V2V3

  3. 在报表结尾打印一次字符串 Total records retrieved: 以及 TOTAL_ROWS 的值。(此文本是 REPORT 块的注脚部分。)

多个 REPORT 块

在一个 FUNCTION 或 MACRO FUNCTION 块中可以指定多个 REPORT 块,从而用一次函数调用生成多个报表。

通常,您将一起使用具有 DTW_SQL 语言环境的多个 REPORT 块和调用存储过程的函数, 该存储过程返回多个结果集(请参阅存储过程)。当然,多个 REPORT 块可以与任何语言环境一起使用来生成多个报表。

要使用多个 REPORT 块,可以在 FUNCTION 参数列表中放置 一个 Net.Data 表格变量。如果存储过程返回的结果集比指定的 REPORT 块的个数多, 并且 Net.Data 内部函数 DTW_DEFAULT_REPORT = "MULTIPLE",则将为每个 不与报表块关联的表格生成缺省报表。如果没有指定报表块,并且 DTW_DEFAULT_REPORT = "YES", 则仅生成一个缺省报表。请注意对于 SQL 语言环境来说,DTW_DEFAULT_REPORT 值为 "YES" 等价于值 "MULTIPLE"。

例子

以下例子演示了使用多个报表块的方式。

要使用缺省的报表格式来显示多个报表:

例 1: DTW_SQL 语言环境

%DEFINE DTW_DEFAULT_REPORT = "MULTIPLE"
%FUNCTION (dtw_sql) myStoredProc (OUT table1, table2) {
     CALL myproc   %}

在此例中,存储过程 myproc 返回两个结果集, 分别放在 table1table2 中。 因为没有指定 REPORT 块, 因此对于这两个表显示缺省报表,首先显示 table1,然后显示 table2

例 2: MACRO_FUNCTION 块。在此例中, 两个表格被传送到 MACRO_FUNCTION 块中。在指定 DTW_DEFAULT_REPORT="MULTIPLE" 的情况下,Net.Data 将对 这两个表格生成报表。

%DEFINE DTW_DEFAULT_REPORT = "MULTIPLE"
%MACRO_FUNCTION multReport (INOUT tablename1, tablename2) { 
%}

在此例中,两个表格被传送到 MACRO_FUNCTION multReport。 再一次,Net.Data 根据 两个表格出现在 MACRO FUNCTION 块参数列表中的顺序来显示它们的缺省报表,先是 table1, 然后是 table2

例 3: DTW_REXX 语言环境

%DEFINE DTW_DEFAULT_REPORT = "YES"
%FUNCTION (dtw_rexx) multReport (INOUT table1, table2) {
     SAY 'Generating multiple default reports...<BR>'   
%}

在此例中,两个表格被传送到 REXX 函数 multReport。 由于 指定了 DTW_DEFAULT_REPORT="YES",Net.Data 仅对第一个表格显示缺省报表。

要通过对显示处理指定 REPORT 块来显示多个报表:

例 1: 已命名的 REPORT 块

%FUNCTION(dtw_sql) myStoredProc  (OUT table1, table2) {
   CALL myproc (table1, table2)
 
  %REPORT(table2) { 
     ...    
    %ROW {  ....   %}   
     ...
   %}
   
   %REPORT(table1) {     
     ...
  %row {  ....   %} 
     ...
   %}
%}

在此例中,对于在 FUNCTION 块参数列表中传递的两个表格都指定了 REPORT 块。 这些表格是以它们 在 REPORT 块中指定的顺序显示的,先是 table2,然后是 table1。通过 在 REPORT 块中指定表格名,您可以控制报表显示的顺序。

例 2: 未命名的 REPORT 块

%FUNCTION(dtw_sql) myStoredProc  (OUT table1, table2) {
    CALL myproc   
   
       %REPORT {
     ...    
    %ROW {  ....   %}  
     ...
   %} 
       %REPORT {    
     ...    
    %ROW {  ....   %}     
     ...  
   %}  
%}

在此例中,对于在 FUNCTION 块参数列表中传递的两个表格都指定了 REPORT 块。因为 REPORT 块 中没有指定表格名称,因此将根据这两个表格从存储过程返回的顺序显示它们的报表。

要使用缺省报表和 REPORT 块的组合来显示多个报表:

例子: 缺省报表和 REPORT 块的组合

%DEFINE DTW_DEFAULT_REPORT = "MULTIPLE"
%FUNCTION(dtw_system) editTables (INOUT table1, table2, table3) {  
  %EXEC{ /qsys.lib/mylib.lib/mypgm.pgm %}
  %REPORT(table2) {    
    ...      
    %ROW {  ....   %}    
    ...   
  %}    
%}

在此例中,只有指定了一个 REPORT 块,并且因为它指定了表格名 table2, 因此使用这个表格来显示报表。因为指定的 REPORT 块比从存储过程返回的结果集个数少, 因此对剩余的结果集显示缺省的报表:先是 table1 的缺省报表; 然后是 table3 的缺省报表。

多个 REPORT 块的准则和限制

在 FUNCTION 或 MACRO_FUNCTION块中指定多个 REPORT 块时,请使用以下准则和限制。

准则:

限制:


[ 页的顶部 | 上一页 | 下一页 | 目录 | 索引 ]