管理与程序设计指南

报告块

使用 REPORT 块语言结构来格式化并显示来自 FUNCTION 块的数据输出。这个输出通常是表格数据, 尽管可以指定文本、宏变量引用和函数调用的任何有效组合。通常可以任选地在 REPORT 块上指定表名。除了 SQL 和 ODBC 语言环境以外,如果没有指定表格名称,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)&loc;=$(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 块,可以在对每个结果集的存储过程 CALL 中放置一个 结果集名称。如果存储过程返回的结果集比指定的 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  () {
     CALL myproc (table1, table2)  %}

在此例中,存储过程 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  () {
   CALL myproc (table1, table2)
 
  %REPORT(table2) { 
     ...    
    %ROW {  ....   %}   
     ...
   %}
   
   %REPORT(table1) {     
     ...
  %row {  ....   %} 
     ...
   %}
%}

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

例 2: 未命名的 REPORT 块

%FUNCTION(dtw_sql) myStoredProc  () {
    CALL myproc   
   
       %REPORT {
     ...    
    %ROW {  ....   %}  
     ...
   %} 
       %REPORT {    
     ...    
    %ROW {  ....   %}     
     ...  
   %}  
%}

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

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

示例: 缺省报告和 REPORT 块的组合

%DEFINE DTW_DEFAULT_REPORT = "MULTIPLE"
%FUNCTION(dtw_system) editTables (INOUT table1, table2, table3) {  
  %REPORT(table2) {    
    ...      
    %ROW {  ....   %}    
    ...   
  %}    
%}

在此例中,仅指定了一个 REPORT 块。因为该块指定 table2,而 table2 是 CALL 语句上所列出的第二个结果集, 因此第二个结果集将被用于显示报告。因为指定的 REPORT 块比存储过程返回的结果集个数少, 因此对剩余的表格显示缺省报告:先是第一个结果集 table1 的缺省报告, 然后是第三个结果集 table3 的缺省报告。指定了一个输出表格 table1, 它可以被用于今后在宏中进行处理。

多个 REPORT 块的准则和限制

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

准则:

限制:


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