使用 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 块时,请使用以下准则:
SHIPDATE | RECDATE | SHIPNO | ------------------------------------- 25/05/1997 | 30/05/1997 | 1495194B | ------------------------------------- 25/05/1997 | 28/05/1997 | 2942821G | -------------------------------------
%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生成报告是通过:
在一个 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 返回两个结果集, 分别放在 table1 和 table2 中。因为没有指定 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, 它可以被用于今后在宏中进行处理。
在 FUNCTION 或 MACRO_FUNCTION块中指定多个 REPORT 块时,请使用以下准则和限制。
准则:
限制: