IBM Books

Net.Data 参考指南


语言结构

本章描述了在 Net.Data 宏中使用的语言结构。 Net.Data 宏的总体描述可以在"Net.Data 宏语法"中找到。这些语言结构 由 Net.Data 宏中的关键字和语句或模块组成,指定了不同的变量类型、并执行其它 特殊任务(如包含文件)。在本章中描述了以下语言结构关键字。

这些语言结构可以是一条语句或一个模块。

变量的定义可以处在一行中,使用双引号("");或在多行中,使用花括号({})。

每个语言结构的说明中都包括以下信息:

目的
定义为什么要在 Net.Data 宏中使用此关键字。

语法
提供关键字语句或模块逻辑结构的图例。

参数
定义语法图例中的所有成份,并提供与其它关键字语法和例子的连接。

上下文
说明可以在 Net.Data 宏结构中的哪些地方使用此关键字。

限制
定义它可以包含的语言成份,并指定任何用法上的限制。

例子
提供关于在 Net.Data 宏中如何使用关键字语句或模块的一些简单例子和说明。

公用结构

在语言结构说明中频繁地使用了以下语法成份。

变量名

目的

一个或多个名称,每个附加的名称用一个句点(.)相连。一个名称是一个字母或数字 字符串,以字母字符或下划线开头,可以包含字母、数字或下划线字符的任意组合。

语法

   +-.--------+
   v          |
>>-----名称----------------------------------------------------><
 

变量引用

目的

变量引用将返回一个先前定义的变量的值,用 $ 和 () 来指定。例如: 如果 VAR = 'abc',那么 $(VAR) 将返回值 'abc'。变量引用是在运行时求值的。若 某个变量是为 EXEC 语句或模块定义的,则 Net.Data 将在读取此变量引用时运行指定的 操作。

被引用的变量必须在引用之前已经在 Net.Data 宏中定义过。如果此变量没有定义, 则返回一个空字符串。

语法

>>---$--(--变量名--)-------------------------------------------><
 

注解模块

目的

注解模块用于为 Net.Data 宏的函数编写文档信息。

语法

>>-%{--文本--%}------------------------------------------------><
 

参数

文本
一行或多行中的任何文本。Net.Data 将忽略所有注解的内容。

上下文

注解必须位于任何其它的 Net.Data 宏模块以外。

限制

允许任何文本或字符。

例子

例子 1:

%{
This is a comment block. It can contain any number of lines
and contain any characters. Its contents are ignored by Net.Data.
%}

DEFINE 模块或语句

目的

DEFINE 模块或语句用于定义变量名。变量名必须以一个字母或下划线(_)开头,可以包含 任何字母数字字符或下划线。 除了 N_columnName 和 V_columnName 以外, 所有的变量名都是区别大小写的。(请参阅"隐式表格变量",以获取有关这两个例外 情况的更多信息。)

语法

>>-%define-----| 定义条目 |------------------------------------><
             +-{------------------------%}--+
                  |  +------------+  |
                  |  v            |  |
                  +------------------+
                      |-定义条目-|
                      +-包含语句-+
 
定义条目
 
                     +-------------+
                     v             |
|----变量名--=----"-------------------"------------------------|
   |            |      |-字符串---|       ||
   |            |      |-变量引用-|       ||
   |            |      +-函数调用-+       ||
   |            |    +-------------+      ||
   |            |    v             |      ||
   |            |-{-------------------%}--||
   |            |      |-字符串---|       ||
   |            |      |-变量引用-|       ||
   |            |      |-函数调用-|       ||
   |            |      +-(新行)---+       ||
   |            |-exec 语句---------------||
   |            |-表格语句----------------||
   |            |-envvar 语句-------------||
   |            +-| 条件变量 |------------+|
   +-列表语句------------------------------+
 
条件变量
 
                    +-------------+
                    v             |
|--变量名--?-----"-------------------"-------------------------->
               |      |-字符串---|       |
               |      |-变量引用-|       |
               |      +-函数调用-+       |
               |    +-------------+      |
               |    v             |      |
               +-{-------------------%}--+
                      |-字符串---|
                      |-变量引用-|
                      +-函数调用-+
 
>--------------------------------------------------------------|
   |         +-------------+       |
   |         v             |       |
   +-:----"-------------------"----+
        |      |-字符串---|       |
        |      |-变量引用-|       |
        |      +-函数调用-+       |
        |    +-------------+      |
        |    v             |      |
        +-{-------------------%}--+
               |-字符串---|
               |-变量引用-|
               +-函数调用-+
 

参数

%define

一个用于定义变量的关键字。

定义条目:

变量名

一个或多个名称,每个附加的名称用一个句点(.)相连。 请参阅变量名中的语法信息。

字符串

字母、数字和标点符号(除制表符、换行符或空格外)的任意序列。

变量引用

返回一个先前定义的变量的值,用 $ 和 () 来指定。 例 如: 如果 VAR = 'abc', 那么 $(VAR) 将返回值 'abc'。请 参阅变量引用中的语法信息。

函数调用

用指定的参数调用一个或多个先前定义的 FUNCTION 块。 请 参阅函数调用 (@)中的语法和例子。

exec 语句

EXEC 语句。一个外部程序的名称,在引用一个变量或调用一个函数时执行这个 程序。请参阅EXEC 模块或语句中的语法和例子。

表格语句

TABLE 语句。定义了一组相关数据,其中包含一组相同的记录(或行)、一组 用于描述每行中各字段的列名。请参阅TABLE 语句中的语法和例子。

envvar 语句

ENVVAR 语句。 引用环境变量。请参阅ENVVAR 语句中的语法和例子。

条件变量

根据另一个变量或字符串的值来设置一个变量的值。

列表语句

LIST 语句。 定义了一组变量,它们用于构建一个定界的值列表。请 参阅LIST 语句中的语法和例子。

包含语句

INCLUDE 语句。 读取并将文件包含到 Net.Data 宏中。请 参阅INCLUDE 语句中的语法和例子。

上下文

必须在一个宏 IF 模块中,或在 Net.Data 宏声明部分的所有其它模块之外。

限制

可以包含以下成份:

例子

例子 1: 变量定义的例子。

%DEFINE var1 = "orders"
%DEFINE var2 = "$(var1).html"

在运行期间,变量 引用 $(var2) 的结果为 orders.html

例子 2: 在字符串中用两个连续的引号表示一个 引号。单独的两个引号表示一个空串。

%DEFINE hi = "say ""hello"""
%DEFINE empty = ""

在显示时,变量 hi 的值 为 say "hello"。变量 empty 为空。

例子 3: DEFINE 模块允许您使用一条 DEFINE 语句 来定义多个变量。

%DEFINE{  DATABASE = "testdb"
          home = "http://www.software.ibm.com"
          SHOWSQL = "YES"
          PI = "3.14150"
%}

例子 4: 这个定义模块的例子允许您跨行定义 一个变量。

%DEFINE text = {This variable definition
            spans two lines
%}

ENVVAR 语句

目的

ENVVAR 语句用于在 DEFINE 模块中引用环境变量。 使用这种方法来引用环境变量比使用 DTW_GETENV 更为高效。有关的更多信息, 请参阅DTW_GETENV

语法

>>-%envvar-----------------------------------------------------><
 

上下文

%DEFINE 模块或语句

参数

%envvar

这个关键字用于在 DEFINE 模块中指定环境变量,它从宏中的其它地方获取一个 环境变量的值。

限制

不能包含其它成份。

例子

例子 1: 在此例子中,%ENVVAR 返回 环境变量 SERVER_SOFTWARE (Web 服务器的名称) 的值。

%DEFINE SERVER_SOFTWARE = %ENVVAR
 
%HTML (REPORT){
The server is $(SERVER_SOFTWARE).
%}

EXEC 模块或语句

目的

EXEC 语句或模块指定了一个外部程序,在引用一个变量或调用一个函数时执行 这个程序。

EXEC 语句或模块可以在两种上下文中使用,根据使用的不同场合,可以有不同的 语法。可以在 DEFINE 模块中使用 EXEC 语句,也可以在 FUNCTION 模块中使用 EXEC 模块。

语法

EXEC 语句,在 DEFINE 模块中使用:

                +-------------+
                v             |
>>-%exec-----"-------------------"-----------------------------><
                  |-字符串---|
                  |-变量引用-|
                  +-函数调用-+
 

EXEC 模块,在 FUNCTION 模块中使用:

                +-------------+
                v             |
>>-%exec-----{------字符串--------}----------------------------><
                  |-变量引用-|
                  +-函数调用-+
 

参数

%exec

此关键字指定了在引用一个变量或调用一个函数时要执行的外部程序的 名称。当 Net.Data 遇到在 EXEC 语句中定义的变量引用时,它就处理 EXEC 语句为此 变量而声明的操作。

名称

一个字母或数字字符串,以字母字符或下划线开头,可以包含字母、数字或下划线 字符的任意组合。

字符串

字母、数字和标点符号(除制表符、换行符或空格外)的任意序列。

变量引用

返回一个先前定义的变量的值,用 $ 和 () 来指定。 例 如: 如果 VAR = 'abc', 那么 $(VAR) 将返回值 'abc'。请 参阅变量引用中的语法信息。

函数调用

用指定的参数调用一个或多个先前定义的 FUNCTION 块。 请 参阅函数调用 (@)中的语法和例子。

上下文

可以在以下上下文中找到:

限制

可以包含以下成份:

例子

例子 1: 此例子在每次引用变量 mycal 时 执行 MYEXEC.EXE。

%DEFINE mycall = %EXEC "MYEXEC.EXE $(empno)"
 
%HTML (report){
<P>Here is the report you requested:
<HR>$(mycall)
%}

例子 2: 此例子在 my_rexx_pgm 函数被调用时, 执行 mypgm.cmd。

%FUNCTION(DTW_REXX) my_rexx_pgm(INOUT a, b, IN c, INOUT d){
   %EXEC{ mypgm.cmd this is a test %}
%}

FUNCTION 模块

目的

FUNCTION 模块定义了一个可以 Net.Data 宏中调用的子程序。 FUNCTION 模块中 的可执行语句可以是直接由语言环境解释的语言语句,或可以是对一个外部程序的 调用。

如果在一函数定义中使用 EXEC 语句或模块,则它必须只能是 FUNCTION 模块中的 可执行语句。在把此可执行语句传递给语言环境之前,要将 EXEC 语句中的程序文件名 追加到由初始化文件中的 EXEC_PATH 配置语句所确定的路径名中。结果字符串被传递 到语言环境去执行。

语言环境用于处理 EXEC 语句的方法依赖于特定的语言环境。只有 REXX、 System 和 Perl 语言环境可以支持 EXEC 语句。

语法

>>-%function--(--语言环境--)--函数名--| 参数定义 |-------------->
 
   +-;---------------------------------+
>----| 返回说明 |--{--| 函数体 |---%}--------------------------><
 
参数定义
 
|--(----------------------------)------------------------------|
      |  +-,--------------+  |
      |  v                |  |
      +-------------名称-----+
          |-IN----|
          |-OUT---|
          +-INOUT-+
 
返回说明
 
|--------------------------------------------------------------|
   +-RETURNS--(--名称--)--+
 
函数体
 
|--------------------------------------------------------------|
   | +----------+ | |-报表模块----------------|
   | v          | | |           +-消息模块--+ |
   |--语言语句----| +-消息模块----------------+
   +-exec 模块----+             +-报表模块--+
 

参数

%function

指定可以从 Net.Data 宏中进行调用的子程序的关键字。函数模块中的可执行语句 可以包含直接由语言环境解释的语言语句,或可以是对一个外部程序的调用。

语言环境

函数定义底层所依赖的语言环境。请参阅 Net.Data 语言环境指南, 以获取更多信息。

函数名

要定义的函数名称。一个字母或数字字符串,以字母字符或下划线开头, 可以包含字母、数字或下划线字符的任意组合。

名称

一个字母或数字字符串,以字母字符或下划线开头, 可以包含字母、数字或下划线字符的任意组合。

参数定义:

IN

关键字。请参阅“Net.Data 程序设计指南”,以获取更多信息。

OUT

关键字。请参阅“Net.Data 程序设计指南”,以获取更多信息。

INOUT

关键字。请参阅“Net.Data 程序设计指南”,以获取更多信息。

返回说明:

RETURNS

关键字。请参阅“Net.Data 程序设计指南”,以获取更多信息。

函数体:

语言语句

来自在函数定义中指定的语言环境、在语法上有效的语句,例如: REXX、 SQL 或 Perl。请参阅语言参考手册,以获取您所使用的语言的语法和用法。

exec 模块

EXEC 语句。一个外部程序的名称,在引用一个变量或调用一个函数时执行这个 程序。请参阅EXEC 模块或语句中的语法和例子。

报表模块

REPORT 模块。用于格式化函数调用的输出结果的一系列命令。您还可以在报表中 使用标题和脚注。请参阅REPORT 模块中的语法和例子。

消息模块

MESSAGE 模块。 当从一个函数调用返回时使用的一组返回码、相关消息 和 Net.Data 采用的操作。请参阅Missing value中的语法和例子。

上下文

必须在 Net.Data 宏声明部分的模块和语句之外。

限制

可以包含以下成份:

例子

以下例子是一般例子,没有覆盖所有的语言环境。 请参阅 Net.Data 语言环境指南,获取有关在特定语言环境 中使用 FUNCTION 模块的更多信息。

例子 1: 一个 REXX substring 函数。

%DEFINE lstring = "longstring"
%FUNCTION(DTW_REXX) substring(IN x, y, z) RETURNS(s) {
  s = substr("$(x)", $(y), $(z));
%}
%DEFINE a = {@substring(lstring, "1", "4")%} %{ assigns "long" to a %}

当对 a 求值时,发现 @substring 函数调用, 然后执行 substring FUNCTION 模块。在 FUNCTION 模块的可执行语句中进行变量替换, 然后将文本字符串

s = substr("longstring", 1, 4)

传送 至 REXX 解释器执行。 因为指定了 RETURNS 子句,所以在 对 a 进行求值时,将 @substring 函数调用的值替换为 "long", 此即 s 的值。

例子 2: 调用一个外部 REXX 程序。

EXEC 语句通知 REXX 语言环境,进而告诉 REXX 解释程序,让它执行 外部的 REXX 程序 mypgm.cmd。因为 REXX 语言环境可以直接与 REXX 程序 共享 Net.Data 变量,所以在执行 mypgm.cmd 之前,将 REXX 变量 abc 的值 赋成 Net.Data 变量 wxy 的值。Mypgm.cmd 可以直接 在 REXX 语句中使用变量 abc。当程序结束时, 从 REXX 程序检索 REXX 变量 abd,并将它们的值 赋给 Net.Data 变量 wxz。因为 在 my_rexx_pgm %FUNCTION 模块的定义中没有使用 RETURNS 子句, 所以 @my_rexx_pgm 函数调用的值是空字符串 "" (如果返回码为 0),或者是 REXX 程序 的返回码(如果返回码不是零)。

例子 3: 一个 SQL 查询和报表。

%FUNCTION(DTW_SQL) query_1(IN x, IN y) {
   SELECT customer.num, order.num, part.num, status
   FROM customer, order, shippingpart
   WHERE customer.num = '$(x)'
      AND customer.ordernumber = order.num
      AND order.num = '$(y)'
      AND order.partnumber = part.num
   %REPORT{
     <P>Here is the status of your order:
     <P>$(NLIST)
     <UL>
     %ROW{
       <LI>$(V1)  $(V2)  $(V3)  $(V4)
     %}
     </UL>
        %}
%}
%DEFINE customer_name="IBM"
%DEFINE customer_order="12345"
%HTML(REPORT) {
  @query_1(customer_name, customer_order)
%}

@query_1 函数调用在 SELECT 语句中用 "IBM" 来替换 $(x), 用 "12345" 来替换 $(y)。因为 SQL 函数 query_1 的定义中没有指明输出表格变量, 因此将使用缺省的表格(请参阅 TABLE 变量模块中的细节)。在 REPORT 模块中 引用的 NLIST 和 Vi 变量是由缺省的表格定义所定义的。 由 REPORT 模块产生的报表放置在输出的 HTML 中,其中还调用了 query_1 函数。

例子 4: 一个执行 Perl 脚本的系统调用。

System 语言环境解释 FUNCTION 模块中的可执行语句的方法是:通过 C 语言 中的 system() 函数调用将它们传递给操作系统。这种方法不允许将 Net.Data 变量 直接传递到可执行语句,也不允许可执行程序直接检索这些变量,就象在 REXX 语言 环境中一样,因此,System 语言环境按以下方式传递和检索变量:

当遇到 @today 函数调用时,Net.Data 替换可执行语句中的变量。对于此例, 可执行语句中没有 Net.Data 变量,因此没有执行变量替换。 可执行语句和参数被传递给 System 语言环境,它将创建一个命名管道,并将环境 变量 DTWPIPE 设置为管道的名称。

然后通过 C 语言的 system() 函数调用来调用外部程序。 外部程序以只读方式打开管道,并象对一个标准流式文件一样写入管道。当 以 CGI 方式使用 Net.Data 时,HTML 输出被写入到 STDOUT 流。在本例子中, 系统日期程序的输出被赋给结果变量,即由 FUNCTION 模块的 RETURNS 子句 所标识的变量。结果变量的这个值将替换 HTML 模块中的 @today() 函数调用。

例子 5: Perl 语言环境。

%FUNCTION(DTW_PERL) today() RETURNS(result) {
  $date = `date`;
  chop $date;
  open(DTW, "> $ENV{DTWPIPE}") || die "Could not open: $!";
  print DTW "result = \"$date\"\n";
%}
%HTML(INPUT) {
  @today()
%}

请把此例子与例子 4 相比较,检查如何使用 EXEC 语句。在 例子 4 中,System 语言环境不知道如何解释 Perl 程序,但知道如何调用外部 程序。EXEC 语句通知它把一个名为 perl 的程序作为一个外部程序来调用。实际 的 Perl 语言语句是由外部 Perl 程序解释的。例子 5 中没有 EXEC 语句, 因为 Perl 语言环境可以直接解释 Perl 语言语句。

函数调用 (@)

目的

一个可以利用指定的参数来调用先前定义的 FUNCTION 模块的函数调用。在指定一个 函数调用之前,此函数必须已经在 Net.Data 宏中定义。

语法

>>-@function_name--(----------------------------)--------------><
                       | +-,-----------------+ |
                       | v                   | |
                       +----变量名-------------+
                          |-"--字符串--"--|
                          +-变量引用------+
 

参数

@function_name

任何现有函数的名称。一个字母或数字字符串,以字母字符或下划线开头, 可以包含字母、数字或下划线字符的任意组合。

变量名

一个或多个名称,每个附加的名称用一个句点(.)相连。 请参阅变量名中的语法信息。

字符串

字母、数字和标点符号(除制表符、换行符或空格外)的任意序列。

变量引用

返回一个先前定义的变量的值,用 $ 和 () 来指定。 例 如: 如果 VAR = 'abc', 那么 $(VAR) 将返回值 'abc'。请 参阅变量引用中的语法信息。 OS/400 中不支持在函数调用 中使用变量引用。

上下文

可以在以下上下文中找到:

限制

例子

例子 1: 调用 SQL 函数 formQuery。

%FUNCTION(DTW_SQL) formQuery(){
SELECT $(queryVal) from $(tableName)
%}
 
%HTML (input){
<P>Which columns of $(tableName) do you want to see?
<FORM METHOD="POST" ACTION="report">
<INPUT NAME="queryVal" TYPE="CHECKBOX" VALUE="NAME">Name
<INPUT NAME="queryVal" TYPE="CHECKBOX" VALUE="MAIL">E-mail
<INPUT NAME="queryVal" TYPE="CHECKBOX" VALUE="FAX">FAX
<INPUT TYPE="SUBMIT" VALUE="Submit request">
%}
 
%HTML (report){
<P>Here are the columns you selected:
<HR>@formQuery()
%}

例子 2: 调用一个带输入和输出参数的 REXX 函数。

%FUNCTION(DTW_REXX) my_rexx_pgm(INOUT a, b, IN c, OUT d) {
 %EXEC{ mypgm.cmd this is a test %}
%}
%HTML(INPUT) {
 <P> Original variable values: $(w) $(x) $(z)
 <P> @my_rexx_pgm(w, x, y, z)
 <P> Modified variable values: $(w) $(x) $(z)
%}

HTML 模块

目的

HTML 模块中可以包含欲被客户 Web 浏览器或任何可以解释 HTML 的工具 来处理的 HTML 标记或文本。HTML 模块中也可以包含大多数的 Net.Data 宏语言 语句,这些语句是在运行时被求值和执行的。Net.Data 查找并执行 Net.Data 宏语句, 并假设所有其它文本都是 HTML,然后将其发送给客户。

语法

                           +---------------------+
                           v                     |
>>-%html---(--名称--)---{---------------------------%}---------><
                             |-exec_sql 语句----|
                             |-变量引用---------|
                             |-HTML if 模块-----|
                             |-函数调用---------|
                             |-HTML 语句--------|
                             |-包含语句---------|
                             +-include_url 语句-+
 

参数

%html

此关键字用于指定包含了要在客户浏览器中显示的 HTML 标记和文本的模块。

名称

一个字母或数字字符串,以字母字符或下划线开头, 可以包含字母、数字或下划线字符的任意组合。

exec_sql 语句

为保证兼容性而支持的 DB2WWW Release 1 语言成分。请参阅附录 A. "DB2 WWW Connection" 或 DB2 World Wide Web Release 1 文档。

变量引用

返回一个先前定义的变量的值,用 $ 和 () 来指定。 例 如: 如果 VAR = 'abc', 那么 $(VAR) 将返回值 'abc'。请 参阅变量引用中的语法信息。

HTML if 模块

HTML IF 模块用于 Net.Data 宏中的 HTML 部分。可以执行有条件的字符串 处理。在作比较时,把数值作为字符串处理。 请参阅HTML IF 语句中的语法和例子。

函数调用

用指定的参数调用一个或多个先前定义的 FUNCTION 块。 请 参阅函数调用 (@)中的语法和例子。

HTML 语句

包含任何要在客户浏览器中显示的字母或数字字符、以及 HTML 标记。

包含语句

INCLUDE 语句。 读取并将文件包含到 Net.Data 宏中。请 参阅INCLUDE 语句中的语法和例子。

include_url 语句

INCLUDE_URL 语句。读取并将其它文件包含到指定此语句的 Net.Data Web 宏中。 指定的文件可以存在于本地或者远程服务器上。 请 参阅INCLUDE_URL 语句中的语法和例子。

上下文

必须是一个 Net.Data 模块或语句,不能包含在任何 Net.Data 模块或语句中。

可以包含以下成份:

例子

例子 1:

%HTML(example1){
%INCLUDE(header.html)
<P>You can put <EM>any</EM> HTML in an HTML block.
An SQL function call is made like this:
@xmp1()
%INCLUDE(footer.html)
%}

HTML IF 语句

目的

HTML IF 语句用于执行有条件的字符串处理,并在 NetData 宏的 HTML 部分中 使用。您可以在 HTML 模块、REPORT 模块和 ROW 模块中使用 HTML IF 语句。在作 比较时,把数值作为字符串处理。

语法

                       +------------------+
                       v                  |
>>-%if--| 条件列表 |-------------------------------------------->
                         |-exec_sql 语句-|
                         |-变量引用------|
                         |-函数调用------|
                         |-字符串--------|
                         +-HTML 语句-----+
 
>--| else_if 说明 |--%endif------------------------------------><
 
条件列表
 
|--(----(--条件列表--)------------)----------------------------|
      |-条件列表--&&--条件列表--|
      |-条件列表--||--条件列表--|
      |-!--条件列表-------------|
      |-| 条件 |----------------|
      +-| 条件项 |--------------+
 
条件
 
|--条件项----<----条件项---------------------------------------|
           |->--|
           |-<=-|
           |->=-|
           |-!=-|
           +-==-+
 
条件项
 
|----变量引用--------------------------------------------------|
   |-"--字符串--"--|
   +-变量名--------+
 
else_if 说明
 
|----------------------------------------------------------------|
   |    +--------------------------------------------------+   |
   |    |                             +------------------+ |   |
   |    v                             v                  | |   |
   +-----%elif--(--condition_list--)---------------------------+
      |                                 |-exec_sql 语句-|    |
      |                                 |-变量引用------|    |
      |                                 |-函数调用------|    |
      |                                 |-字符串--------|    |
      |                                 +-HTML 语句-----+    |
      |        +------------------+                          |
      |        v                  |                          |
      +-%else------------------------------------------------+
                 |-exec_sql 语句-|
                 |-变量引用------|
                 |-函数调用------|
                 |-字符串--------|
                 +-HTML 语句-----+
 

参数

%if

用于指定有条件的字符串处理的关键字。在作 比较时,把数值作为字符串处理。

条件列表:

条件列表

比较值和变量值之间的大小。列表中可以包含条件和条件项。可以使用 布尔运算符把条件列表连接起来。一个条件列表可以嵌套在另一个条件列表中。

条件

两个条件项之间使用比较运算符的一个比较表达式。Net.Data 中只能比较 字符串;一个变量或一个表示数值的字符串是作为一个字符串,而不是作为 一个数值来求值。

条件项

一个变量名、字符串或变量引用。

exec_sql 语句

为保证兼容性而支持的 DB2WWW Release 1 语言成分。请参阅附录 A. "DB2 WWW Connection" 或 DB2 World Wide Web Release 1 文档。

变量引用

返回一个先前定义的变量的值,用 $ 和 () 来指定。 例 如: 如果 VAR = 'abc', 那么 $(VAR) 将返回值 'abc'。请 参阅变量引用中的语法信息。

函数调用

用指定的参数调用一个或多个先前定义的 %FFUNCTION 块。 请 参阅函数调用 (@)中的语法和例子。

字符串

字母、数字和标点符号(除制表符、换行符或空格外)的任意序列。

HTML 语句

包含任何要在客户浏览器中显示的字母或数字字符、以及 HTML 标记。

%elif

一个用于作为可选处理路径的开始的关键字,其中可以包含条件列表和 大多数 Net.Data 宏语句。

%endif

一个用于结束 %IF 模块的关键字。

%else

用于在所有其它的条件列表都不满足时执行相关语句的一个关键字。

上下文

可以在以下上下文中找到:

限制

可以包含以下成份:

例子

例子 1:

%IF ($RETURN_CODE) == $(failure_rc))
   <P> The function call failed with failure code $(RETURN_CODE).
%ELIF ($(RETURN_CODE) == $(warning_rc))
   <P> The function call succeeded with warning code $(RETURN_CODE).
%ELIF ($(RETURN_CODE) == $(success_rc))
   <P>The function call was successful.   
%ELSE
   P>The function call returned with unknown return code $(RETURN_CODE).
%ENDIF

例子 2:

%IF (name == "world!")
<H2>Hello world!</H2>
%ENDIF

INCLUDE 语句

目的

INCLUDE 语句将读取并把其它文件包含到指定此语句的 Net.Data 宏中。

Net.Data 将搜索在初始化文件的 INCLUDE_PATH 语句中所指定的目录,以查找 此包含文件。

您可以按照与大部分高级语言所使用的相同方式来使用包含文件。 它们可以用于插入公用标题和脚注、定义公用的变量集合,或将 FUNCTION 模块定义 的公用子程序'库'包含到 Net.Data 宏中。

语法

>>-%include---"--字符串--"-------------------------------------><
 

参数

%include

用于将一个文件读取并包括到 Net.Data 宏中的一个关键字。

字符串

字母、数字字符和标点符号(除换行符以外)的任意序列。

上下文

可以在以下上下文中找到:

限制

可以包含以下成份:

例子

例子 1:

%HTML(start){
%INCLUDE "header.hti"
...
%}

例子 2:

       %REPORT {
  %INCLUDE "report_header.txt"
  %ROW {
    %INCLUDE "row_include.txt"
  %}
  %INCLUDE "report_footer.txt"
%}

INCLUDE_URL 语句

目的

INCLUDE_URL 语句将读取并把其它文件包含到指定此语句的 Net.Data 宏中。 指定的 文件可以存在于本地或者远程服务器上。

例子 3 显示了如何从当前宏中调用一个宏,而不需要让应用程序用户选择 “提交(Submit)”按钮。

语法

>>-%include_url---"--字符串--"---------------------------------><
 

参数

%include_url

用于从本地或远程服务器将一个文件读取并包括到 Net.Data 宏中的一个关键字。

字符串

字母、数字字符和标点符号(除换行符以外)的任意序列。

上下文

可以在以下上下文中找到:

限制

可以包含以下成份:

在 OS/390 或 OS/400 平台上不支持 INCLUDE_URL。

例子

例子 1: 这个例子中包含本地服务器上的 一个文件。

%include_url "celdemo.htm"

例子le 2: 这个例子中包含另一个服务器 上的一个 gif 文件。

 %include_url "http://www.ibm.com/images/netdata.gif"

例子 3: 可以包含指向其它 Net.Data 宏 的 URL。在此例子中,要调用宏文件 custqadd.mac,并 把 custno 作为变量传递。

%REPORT{
<P>Current hot pick as of @DTW_rTIME():
%include_url "http://www.ibm.com/cgi-bin/db2www/hotpic.mac/report?custno=$(custno)"

LIST 语句

目的

可以使用 LIST 变量来构建一个带定界符的值列表。当您构建具有多个项目(例如 某些 WHERE 或 HAVING 子句中的项目)的 SQL 查询时,LIST 变量十分有用。

语法

             +-------------+
             v             |
>>-%list--"-------------------"---变量名-----------------------><
               |-字符串---|
               |-变量引用-|
               +-函数调用-+
 

上下文

可以在以下上下文中找到:

参数

%list

此关键字指定了要用于构建一个带定界符的值列表的变量。

字符串

字母、数字和标点符号(除制表符、换行符或空格外)的任意序列。

变量引用

返回一个先前定义的变量的值,用 $ 和 () 来指定。 例 如: 如果 VAR = 'abc', 那么 $(VAR) 将返回值 'abc'。请 参阅变量引用中的语法信息。

函数调用

用指定的参数调用一个或多个先前定义的 FUNCTION 块。 请 参阅函数调用 (@)中的语法和例子。

变量名

一个变量的名称。一个字母或数字字符串,以字母字符或下划线开头, 可以包含字母、数字或下划线字符的任意组合。 请参阅变量名中的语法信息。

限制

可以包含以下成份:

例子

例子 1:

 %DEFINE{
DATABASE="custcity"
%LIST " OR " conditions
cond1="Sao Paulo"
cond2="Seattle"
cond3="Shanghai"
whereClause=Conditions ? "WHERE $(conditions)" : ""
%}

宏 IF 模块

目的

宏 IF 模块用于执行有条件的字符串处理,并在 NetData 宏的声明部分中 使用。在作比较时,把数值作为字符串处理。

语法

                       +------------------+
                       v                  |
>>-%if--| 条件列表 |-------------------------------------------->
                         |-exec_sql 语句-|
                         |-定义语句------|
                         |-函数语句------|
                         |-函数调用------|
                         |-HTML 模块-----|
                         +-消息模块------+
 
>--| else_if 说明 |--%endif------------------------------------><
 
条件列表
 
|--(----(--条件列表--)------------)----------------------------|
      |-条件列表--&&--条件列表--|
      |-条件列表--||--条件列表--|
      |-!--条件列表-------------|
      |-| 条件 |----------------|
      +-| 条件项 |--------------+
 
条件
 
|--条件项----<----条件项---------------------------------------|
           |->--|
           |-<=-|
           |->=-|
           |-!=-|
           +-==-+
 
条件项
 
|----变量引用--------------------------------------------------|
   |-"--字符串--"--|
   +-变量名--------+
 
else_if 说明
 
|--------------------------------------------------------------|
   |    +--------------------------------------------+   |
   |    |                       +------------------+ |   |
   |    v                       v                  | |   |
   +-----%elif--(--条件列表--)---------------------------+
      |                           |-exec_sql 语句-|    |
      |                           |-定义语句------|    |
      |                           |-函数语句------|    |
      |                           |-函数调用------|    |
      |                           |-HTML 模块-----|    |
      |                           +-消息模块------+    |
      |        +------------------+                    |
      |        v                  |                    |
      +-%else------------------------------------------+
                 |-exec_sql 语句-|
                 |-定义语句------|
                 |-函数语句------|
                 |-函数调用------|
                 |-HTML 模块-----|
                 +-消息模块------+
 

参数

%if

用于指定有条件的字符串处理的关键字。在作比较时,把数值作为字符串处理。

条件列表:

条件列表

比较值和变量值之间的大小。列表中可以包含条件和条件项。可以使用 布尔运算符把条件列表连接起来。一个条件列表可以嵌套在另一个条件列表中。

条件

两个条件项之间使用比较运算符的一个比较表达式。Net.Data 中只能比较 字符串;一个变量或一个表示数值的字符串是作为一个字符串,而不是作为 一个数值来求值。

条件项

一个变量名、字符串或变量引用。

exec_sql 语句

为保证兼容性而支持的 DB2WWW Release 1 语言成分。请参阅附录 A. "DB2 WWW Connection" 或 DB2 World Wide Web Release 1 文档。

定义语句

DEFINE 模块或语句。用于定义变量和设置配置变量。变量名必须以一个字母或 下划线(_)开头,可以包含任何字母数字字符或下划线。 请 参阅DEFINE 模块或语句中的语法和例子。

函数模块

指定可以从 Net.Data 宏中进行调用的子程序的关键字。 函数模块中的可执行语句 可以包含直接由语言环境解释的语言语句,或可以是对一个外部程序的调用。 请 参阅FUNCTION 模块中的语法和例子。

函数调用

用指定的参数调用一个或多个先前定义的 FUNCTION 块。 请 参阅函数调用 (@)中的语法和例子。

HTML 模块

包含任何要在客户浏览器中显示的字母或数字字符、以及 HTML 标记。

消息模块

MESSAGE 模块。 当从一个函数调用返回时使用的一组返回码、相关消息 和 Net.Data 采用的操作。 请参阅Missing value中的语法和例子。

%elif

一个用于作为可选处理路径的开始的关键字,其中可以包含条件列表和 大多数 Net.Data 宏语句。

%endif

一个用于结束 IF 模块的关键字。

%else

用于在所有其它的条件列表都不满足时执行相关语句的一个关键字。

上下文

可以在以下上下文中找到:

限制

可以包含以下成份:

例子

例子 1:

%IF ($(DTW_HTML_TABLE))
%define OUT_FORMAT = "HTML"
%ELSE
%define OUT_FORMAT = "CHARACTER"
%endif
MESSAGE 模块

Missing value

目的

MESSAGE 模块指定了要显示的消息,并根据来自函数的返回码建议要执行的操作。

MESSAGE 模块中定义了一组返回码、以及相应的消息和建议的操作。当完成一个 函数调用时,Net.Data 把其返回码和 MESSAGE 模块中定义的返回码进行比较。如果 函数的返回码与 MESSAGE 模块中的某个返回码相匹配,则 Net.Data 显示相应的 消息并检查建议的操作,以确定是继续处理还是退出 Net.Data 宏。

MESSAGE 模块在作用域上可以是全局的、或局部于一个 FUNCTION 模块。 如果 MESSAGE 模块是在最外层定义的,则认为它的作用域是全局的。当定义多个 全局 MESSAGE 模块时,只有最后一个模块是活动的模块。如果 MESSAGE 模块是 在 FUNCTION 模块中定义的,则此模块的作用域局限于定义它的 FUNCTION 模块。请 参阅 Net.Data 程序设计指南 中的“消息模块”,以获取 有关返回码的处理规则。

语法

>>-%message--{-------------------------------------------------->
 
   +-------------------------------------------------------------+
   v                                                             |
>------------------------------------------------------------------>
     +-| 返回码说明 |--:--| 消息文本说明 |---------------------+
                                            +-| 操作说明 |--+
 
>-%}-----------------------------------------------------------><
 
返回码说明
 
|----DEFAULT---------------------------------------------------|
   |- +DEFAULT---|
   |- -DEFAULT---|
   +-------数值--+
     |---|
     +-+-+
 
消息文本说明
 
         +-------------+
         v             |
|-----"-------------------"------------------------------------|
    |      |-字符串---|       |
    |      |-变量引用-|       |
    |      +-函数调用-+       |
    |    +-------------+      |
    |    v             |      |
    +-{-------------------%}--+
           |-字符串---|
           |-变量引用-|
           +-函数调用-+
 
操作说明
 
|--:----EXIT---------------------------------------------------|
      +-CONTINUE-+
 

参数

%message

使用此关键字的模块定义了一组返回码、相应的消息以及在函数调用返回时 Net.Data 所 要采用的操作。

返回码说明:

一个正整数或负整数。如果 Net.Data RETURN_CODE 变量的值与 返回码说明值相匹配,则使用消息语句中的剩余信息来处理这个函数调用。 您 也可以为返回码指定消息,而不需要在 $MESSAGE 模块中特别输入。

DEFAULT

一个用于指定缺省消息代码的关键字。如果 RETURN_CODE 不等于 0,并且没有 指定精确匹配,则使用此消息语句中的消息来处理函数调用。

+DEFAULT

一个用于指定缺省的负消息代码的关键字。 如果 RETURN_CODE 小于 0,并且没有 指定精确匹配,则使用此消息语句中的消息来处理函数调用。

-DEFAULT

一个用于指定缺省的正消息代码的关键字。 如果 RETURN_CODE 大于 0,并且没有 指定精确匹配,也没有指定 +DEFAULT (用于 RETURN_CODE 大于 0 情况) 或 -DEFAULT (用于 RETURN_CODE 小于 0 的情况) 的值,则使用此消息语 句中的消息来处理函数调用。

数值

用于指定在处理期间出现的错误和警告的消息代码。从 0 到 9 的一串数字。

消息文本说明

当 RETURN_CODE 与此消息的消息语句中的返回码值相匹配时,要发送 到 Web 浏览器去的一个字符串。

字符串

字母、数字和标点符号(除制表符、换行符或空格外)的任意序列。

变量引用

返回一个先前定义的变量的值,用 $ 和 () 来指定。 例如: 如果 VAR = 'abc',那么 $(VAR) 将返回值 'abc'。 请 参阅变量引用中的语法信息。

函数调用

用指定的参数调用一个或多个先前定义的 FUNCTION 块。 请 参阅函数调用 (@)中的语法和例子。

操作说明:

当 RETURN_CODE 与此消息的消息语句中的返回码值相匹配时 Net.Data 要 执行的操作。

EXIT

这个关键字指定了:当发生与指定的消息返回码相应的错误与警告时,立即 退出这个宏。

CONTINUE

这个关键字指定了:当发生与指定的消息返回码相应的错误与警告时,继续 进行处理。

上下文

可以在以下上下文中找到:

限制

可以包含以下成份:

例子

例子 1:

%MESSAGE{
-601: {<H3>The table has already been created, please go back and enter your name.</H3>
<P><a href="input">Return</a>
%}
default: "<H3>Can't continue because of error $(RETURN_CODE)</H3>"
%}

例子 2:

%{ 全局消息块 %}
%MESSAGE {
   -100     : "Return code -100 message"   : exit
    100     : "Return code 100 message"    : continue
   +default : { 
This is a long message that spans more
than one line. You can use HTML tags, including
anchors and forms, in this message. %}   : continue
%}
 
%{ local message block inside a FUNCTION block %}
%FUNCTION(DTW_REXX) my_function() {
  %EXEC { my_command.cmd %}
%MESSAGE {
     -100     : "Return code -100 message"   : exit
      100     : "Return code 100 message"    : continue
     -default : { 
This is a long message that spans more
than one line. You can use HTML tags, including
anchors and forms, in this message. %}   : exit
  %}

REPORT 模块

目的

REPORT 模块用于格式化来自函数调用的输出。它可以把一个表格名作为参数。如果 指定表格名,则使用指定的表格中的数据来生成报表。否则,使用可以在函数参数表 中发现的第一个输出表格来生成报表;如果在参数列表中找不到任何表格,则使用 缺省的表格数据。

语法

>>-%report------------------------------------------------------>
             +-(--名称--)--+
 
      +---------------------+               +---------------------+
      v                     |               v                     |
>--{-----------------------------------------------------------------%}--><
        |-字符串-----------|   +-row 模块-+   |-字符串-----------|
        |-HTML if 模块-----|                  |-HTML if 模块-----|
        |-变量引用---------|                  |-变量引用---------|
        |-函数调用---------|                  |-函数调用---------|
        |-HTML 语句--------|                  |-HTML 语句--------|
        |-包含语句---------|                  |-包含语句---------|
        +-include_url 语句-+                  +-include_url 语句-+
 

参数

%report

这个关键字指定了用于格式化函数调用的输出结果的一系列命令。 您还可以在报表中 使用标题和脚注。

名称

一个字母或数字字符串,以字母字符或下划线开头, 可以包含字母、数字或下划线字符的任意组合。

字符串

字母、数字和标点符号(除制表符、换行符或空格外)的任意序列。

变量引用

返回一个先前定义的变量的值,用 $ 和 () 来指定。 例 如: 如果 VAR = 'abc', 那么 $(VAR) 将返回值 'abc'。请 参阅变量引用中的语法信息。

函数调用

用指定的参数调用一个或多个先前定义的 FUNCTION 块。 请 参阅函数调用 (@)中的语法和例子。 除了在 OS/400 平台上以外,REPORT 模块中不能包含 SQL 函数调用。

HTML if 模块

HTML IF 模块用于 Net.Data 宏中的 HTML 部分。可以执行有条件的字符串 处理。在作比较时,把数值作为字符串处理。 请参阅HTML IF 语句中的语法和例子。

HTML 语句

包含任何要在客户浏览器中显示的字母或数字字符、以及 HTML 标记。

包含语句

INCLUDE 语句。 读取并将文件包含到 Net.Data 宏中。 请 参阅INCLUDE 语句中的语法和例子。

include_url 语句

INCLUDE_URL 语句。读取并将其它文件包含到指定此语句的 Net.Data 宏中。指定 的文件可以存在在本地或者远程服务器上。 请 参阅INCLUDE_URL 语句中的语法和例子。

row 模块

ROW 模块。为从函数调用返回的每行数据,显示经过 HTML 格式化后的数据。请 参阅ROW 模块中的语法和例子。

上下文

可以在以下上下文中找到:

限制

可以包含以下成份:

例子

例子 1: 一个 2 列的 HTML 表格,显示名称和 位置的一个列表。若在表格中选择一个名称,则调用 Net.Data 宏 name.mac详细的 HTML 模块,并把这两个值作 为 URL 的一部分发送给它。对于此例子,可以在 name.mac 中 使用这些值来查找有关名称的其它细节。

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

ROW 模块

目的

ROW 模块用于处理从函数调用中返回的每行表格信息。Net.Data 为表格中的每一行 处理一次 ROW 模块中的语句。

语法

             +---------------------+
             v                     |
>>-%row--{---------------------------%}------------------------><
               |-字符串-----------|
               |-HTML if 模块-----|
               |-变量引用---------|
               |-函数调用---------|
               |-HTML 语句--------|
               |-包含语句---------|
               +-include_url 语句-+
 

参数

%row

此关键字指定了要显示的、经过 HTML 格式化的数据,对从函数调用返回的每行数据, 都要处理一遍。

字符串

字母、数字和标点符号(除制表符、换行符或空格外)的任意序列。

变量引用

返回一个先前定义的变量的值,用 $ 和 () 来指定。 例 如: 如果 VAR = 'abc', 那么 $(VAR) 将返回值 'abc'。请 参阅变量引用中的语法信息。

函数调用

用指定的参数调用一个或多个先前定义的 FUNCTION 块。 请 参阅函数调用 (@)中的语法和例子。 除了在 OS/400 平台上以外,ROW 模块中不能包含 SQL 函数调用。

HTML if 模块

HTML IF 模块用于 Net.Data 宏中的 HTML 部分。可以执行有条件的字符串 处理。在作比较时,把数值作为字符串处理。 请参阅HTML IF 语句中的语法和例子。

HTML 语句

包含任何要在客户浏览器中显示的字母或数字字符、以及 HTML 标记。

包含语句

INCLUDE 语句。 读取并将文件包含到 Net.Data 宏中。 请 参阅INCLUDE 语句中的语法和例子。

include_url 语句

INCLUDE_URL 语句。读取并将其它文件包含到指定此语句的 Net.Data 宏中。 指定的 文件可以存在于本地或者远程服务器上。 请 参阅INCLUDE_URL 语句中的语法和例子。

上下文

可以在以下上下文中找到:

限制

可以包含以下成份:

例子

请参阅REPORT 模块中有关 ROW 模块的例子。

TABLE 语句

目的

TABLE 语句用于定义一组相关的数据。它包含一个相同记录或列的数组,和一个在每 一行描述字段的列名的数组。 表格语句只能出现在 DEFINE 语句或模块中。

语法

>>-%table--| 上限 |--------------------------------------------><
 
上限
 
|--------------------------------------------------------------|
   +-(----数值---)--+
        +-ALL--+
 

参数

%table

此关键字定义了一组相关数据,其中包含一组相同的记录(或行)、一组 用于描述每行中各字段的列名。

上限

表格中可以包含的行数。

数值

从 0 到 9 的一串数字。

ALL

此关键字允许在表格中包含任意多表格行。

上下文

可以在以下上下文中找到:

限制

可以包含以下成份:

例子

%DEFINE myTable=%TABLE(30)


[ 页的顶部 | 上一页 | 下一页 | 内容表 | 索引 ]