本章描述了在 Net.Data 宏中使用的语言结构。 Net.Data 宏的总体描述可以在"Net.Data 宏语法"中找到。这些语言结构 由 Net.Data 宏中的关键字和语句或模块组成,指定了不同的变量类型、并执行其它 特殊任务(如包含文件)。在本章中描述了以下语言结构关键字。
这些语言结构可以是一条语句或一个模块。
变量的定义可以处在一行中,使用双引号("");或在多行中,使用花括号({})。
每个语言结构的说明中都包括以下信息:
目的
一个或多个名称,每个附加的名称用一个句点(.)相连。一个名称是一个字母或数字 字符串,以字母字符或下划线开头,可以包含字母、数字或下划线字符的任意组合。
语法
+-.--------+ v | >>-----名称----------------------------------------------------><
目的
变量引用将返回一个先前定义的变量的值,用 $ 和 () 来指定。例如: 如果 VAR = 'abc',那么 $(VAR) 将返回值 'abc'。变量引用是在运行时求值的。若 某个变量是为 EXEC 语句或模块定义的,则 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 模块或语句用于定义变量名。变量名必须以一个字母或下划线(_)开头,可以包含 任何字母数字字符或下划线。 除了 N_columnName 和 V_columnName 以外, 所有的变量名都是区别大小写的。(请参阅"隐式表格变量",以获取有关这两个例外 情况的更多信息。)
语法
>>-%define-----| 定义条目 |------------------------------------><
+-{------------------------%}--+
| +------------+ |
| v | |
+------------------+
|-定义条目-|
+-包含语句-+
定义条目
+-------------+
v |
|----变量名--=----"-------------------"------------------------|
| | |-字符串---| ||
| | |-变量引用-| ||
| | +-函数调用-+ ||
| | +-------------+ ||
| | v | ||
| |-{-------------------%}--||
| | |-字符串---| ||
| | |-变量引用-| ||
| | |-函数调用-| ||
| | +-(新行)---+ ||
| |-exec 语句---------------||
| |-表格语句----------------||
| |-envvar 语句-------------||
| +-| 条件变量 |------------+|
+-列表语句------------------------------+
条件变量
+-------------+
v |
|--变量名--?-----"-------------------"-------------------------->
| |-字符串---| |
| |-变量引用-| |
| +-函数调用-+ |
| +-------------+ |
| v | |
+-{-------------------%}--+
|-字符串---|
|-变量引用-|
+-函数调用-+
>--------------------------------------------------------------|
| +-------------+ |
| v | |
+-:----"-------------------"----+
| |-字符串---| |
| |-变量引用-| |
| +-函数调用-+ |
| +-------------+ |
| v | |
+-{-------------------%}--+
|-字符串---|
|-变量引用-|
+-函数调用-+
参数
上下文
必须在一个宏 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 语句用于在 DEFINE 模块中引用环境变量。 使用这种方法来引用环境变量比使用 DTW_GETENV 更为高效。有关的更多信息, 请参阅DTW_GETENV。
语法
>>-%envvar-----------------------------------------------------><
上下文
%DEFINE 模块或语句
参数
限制
不能包含其它成份。
例子
例子 1: 在此例子中,%ENVVAR 返回 环境变量 SERVER_SOFTWARE (Web 服务器的名称) 的值。
%DEFINE SERVER_SOFTWARE = %ENVVAR
%HTML (REPORT){
The server is $(SERVER_SOFTWARE).
%}
目的
EXEC 语句或模块指定了一个外部程序,在引用一个变量或调用一个函数时执行 这个程序。
EXEC 语句或模块可以在两种上下文中使用,根据使用的不同场合,可以有不同的 语法。可以在 DEFINE 模块中使用 EXEC 语句,也可以在 FUNCTION 模块中使用 EXEC 模块。
语法
EXEC 语句,在 DEFINE 模块中使用:
+-------------+
v |
>>-%exec-----"-------------------"-----------------------------><
|-字符串---|
|-变量引用-|
+-函数调用-+
EXEC 模块,在 FUNCTION 模块中使用:
+-------------+
v |
>>-%exec-----{------字符串--------}----------------------------><
|-变量引用-|
+-函数调用-+
参数
上下文
可以在以下上下文中找到:
限制
可以包含以下成份:
例子
例子 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 模块定义了一个可以 Net.Data 宏中调用的子程序。 FUNCTION 模块中 的可执行语句可以是直接由语言环境解释的语言语句,或可以是对一个外部程序的 调用。
如果在一函数定义中使用 EXEC 语句或模块,则它必须只能是 FUNCTION 模块中的 可执行语句。在把此可执行语句传递给语言环境之前,要将 EXEC 语句中的程序文件名 追加到由初始化文件中的 EXEC_PATH 配置语句所确定的路径名中。结果字符串被传递 到语言环境去执行。
语言环境用于处理 EXEC 语句的方法依赖于特定的语言环境。只有 REXX、 System 和 Perl 语言环境可以支持 EXEC 语句。
语法
>>-%function--(--语言环境--)--函数名--| 参数定义 |-------------->
+-;---------------------------------+
>----| 返回说明 |--{--| 函数体 |---%}--------------------------><
参数定义
|--(----------------------------)------------------------------|
| +-,--------------+ |
| v | |
+-------------名称-----+
|-IN----|
|-OUT---|
+-INOUT-+
返回说明
|--------------------------------------------------------------|
+-RETURNS--(--名称--)--+
函数体
|--------------------------------------------------------------|
| +----------+ | |-报表模块----------------|
| v | | | +-消息模块--+ |
|--语言语句----| +-消息模块----------------+
+-exec 模块----+ +-报表模块--+
参数
上下文
必须在 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 程序。
%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)
%}
变量 w 和 x 对应于函数中的 INOUT 参数 a 和 b。它们的值和 y 的 值(对应于IN 参数 c),应该已经从输入的 HTML 或从 DEFINE 语句定义过。当 参数 a 和 b 返回值时,变量 a 和 b 被赋予新值。当 OUT 参数 d 返回一个值时, 定义变量 z。
/* Sample REXX Program for Example 2 */ /* Test arguments */ num_args = arg(); say 'There are' num_args 'arguments'; do i = 1 to num_args; say 'arg' i 'is "'arg(i)'"' end; /* Set variables passed from Net.Data */ d = a || b || c; /* concatenate a, b, and c forming d */ a = ''; /* reset a to null string */ b = ''; /* reset b to null string */ return;
There are 1 arguments arg 1 is "this is a test"
EXEC 语句通知 REXX 语言环境,进而告诉 REXX 解释程序,让它执行 外部的 REXX 程序 mypgm.cmd。因为 REXX 语言环境可以直接与 REXX 程序 共享 Net.Data 变量,所以在执行 mypgm.cmd 之前,将 REXX 变量 a、 b 和 c 的值 赋成 Net.Data 变量 w、 x 和 y 的值。Mypgm.cmd 可以直接 在 REXX 语句中使用变量 a、 b 和 c。当程序结束时, 从 REXX 程序检索 REXX 变量 a、 b 和 d,并将它们的值 赋给 Net.Data 变量 w、 x 和 z。因为 在 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 脚本的系统调用。
%FUNCTION(DTW_SYSTEM) today() RETURNS(result) {
%exec{ perl "today.prl" %}
%}
%HTML(INPUT) {
@today()
%}
$date = `date`;
chop $date;
open(DTW, "> $ENV{DTWPIPE}") || die "Could not open: $!";
print DTW "result = \"$date\"\n";
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 | |
+----变量名-------------+
|-"--字符串--"--|
+-变量引用------+
参数
上下文
可以在以下上下文中找到:
限制
例子
例子 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 模块中可以包含欲被客户 Web 浏览器或任何可以解释 HTML 的工具 来处理的 HTML 标记或文本。HTML 模块中也可以包含大多数的 Net.Data 宏语言 语句,这些语句是在运行时被求值和执行的。Net.Data 查找并执行 Net.Data 宏语句, 并假设所有其它文本都是 HTML,然后将其发送给客户。
语法
+---------------------+
v |
>>-%html---(--名称--)---{---------------------------%}---------><
|-exec_sql 语句----|
|-变量引用---------|
|-HTML if 模块-----|
|-函数调用---------|
|-HTML 语句--------|
|-包含语句---------|
+-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 语句用于执行有条件的字符串处理,并在 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 语句-----+
参数
上下文
可以在以下上下文中找到:
限制
可以包含以下成份:
例子
例子 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 语句将读取并把其它文件包含到指定此语句的 Net.Data 宏中。
Net.Data 将搜索在初始化文件的 INCLUDE_PATH 语句中所指定的目录,以查找 此包含文件。
您可以按照与大部分高级语言所使用的相同方式来使用包含文件。 它们可以用于插入公用标题和脚注、定义公用的变量集合,或将 FUNCTION 模块定义 的公用子程序'库'包含到 Net.Data 宏中。
语法
>>-%include---"--字符串--"-------------------------------------><
参数
上下文
可以在以下上下文中找到:
限制
可以包含以下成份:
例子
例子 1:
%HTML(start){
%INCLUDE "header.hti"
...
%}
例子 2:
%REPORT {
%INCLUDE "report_header.txt"
%ROW {
%INCLUDE "row_include.txt"
%}
%INCLUDE "report_footer.txt"
%}
目的
INCLUDE_URL 语句将读取并把其它文件包含到指定此语句的 Net.Data 宏中。 指定的 文件可以存在于本地或者远程服务器上。
例子 3 显示了如何从当前宏中调用一个宏,而不需要让应用程序用户选择 “提交(Submit)”按钮。
语法
>>-%include_url---"--字符串--"---------------------------------><
参数
上下文
可以在以下上下文中找到:
限制
可以包含以下成份:
在 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 变量来构建一个带定界符的值列表。当您构建具有多个项目(例如 某些 WHERE 或 HAVING 子句中的项目)的 SQL 查询时,LIST 变量十分有用。
语法
+-------------+
v |
>>-%list--"-------------------"---变量名-----------------------><
|-字符串---|
|-变量引用-|
+-函数调用-+
上下文
可以在以下上下文中找到:
参数
限制
可以包含以下成份:
例子
例子 1:
%DEFINE{
DATABASE="custcity"
%LIST " OR " conditions
cond1="Sao Paulo"
cond2="Seattle"
cond3="Shanghai"
whereClause=Conditions ? "WHERE $(conditions)" : ""
%}
目的
宏 IF 模块用于执行有条件的字符串处理,并在 NetData 宏的声明部分中 使用。在作比较时,把数值作为字符串处理。
语法
+------------------+
v |
>>-%if--| 条件列表 |-------------------------------------------->
|-exec_sql 语句-|
|-定义语句------|
|-函数语句------|
|-函数调用------|
|-HTML 模块-----|
+-消息模块------+
>--| else_if 说明 |--%endif------------------------------------><
条件列表
|--(----(--条件列表--)------------)----------------------------|
|-条件列表--&&--条件列表--|
|-条件列表--||--条件列表--|
|-!--条件列表-------------|
|-| 条件 |----------------|
+-| 条件项 |--------------+
条件
|--条件项----<----条件项---------------------------------------|
|->--|
|-<=-|
|->=-|
|-!=-|
+-==-+
条件项
|----变量引用--------------------------------------------------|
|-"--字符串--"--|
+-变量名--------+
else_if 说明
|--------------------------------------------------------------|
| +--------------------------------------------+ |
| | +------------------+ | |
| v v | | |
+-----%elif--(--条件列表--)---------------------------+
| |-exec_sql 语句-| |
| |-定义语句------| |
| |-函数语句------| |
| |-函数调用------| |
| |-HTML 模块-----| |
| +-消息模块------+ |
| +------------------+ |
| v | |
+-%else------------------------------------------+
|-exec_sql 语句-|
|-定义语句------|
|-函数语句------|
|-函数调用------|
|-HTML 模块-----|
+-消息模块------+
参数
上下文
可以在以下上下文中找到:
限制
可以包含以下成份:
例子
例子 1:
%IF ($(DTW_HTML_TABLE)) %define OUT_FORMAT = "HTML" %ELSE %define OUT_FORMAT = "CHARACTER" %endifMESSAGE 模块
目的
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-+
参数
上下文
可以在以下上下文中找到:
限制
可以包含以下成份:
例子
例子 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------------------------------------------------------>
+-(--名称--)--+
+---------------------+ +---------------------+
v | v |
>--{-----------------------------------------------------------------%}--><
|-字符串-----------| +-row 模块-+ |-字符串-----------|
|-HTML if 模块-----| |-HTML if 模块-----|
|-变量引用---------| |-变量引用---------|
|-函数调用---------| |-函数调用---------|
|-HTML 语句--------| |-HTML 语句--------|
|-包含语句---------| |-包含语句---------|
+-include_url 语句-+ +-include_url 语句-+
参数
上下文
可以在以下上下文中找到:
限制
可以包含以下成份:
例外情况:不能从 SQL 函数内部调用 SQL 函数。
例子
例子 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 模块用于处理从函数调用中返回的每行表格信息。Net.Data 为表格中的每一行 处理一次 ROW 模块中的语句。
语法
+---------------------+
v |
>>-%row--{---------------------------%}------------------------><
|-字符串-----------|
|-HTML if 模块-----|
|-变量引用---------|
|-函数调用---------|
|-HTML 语句--------|
|-包含语句---------|
+-include_url 语句-+
参数
上下文
可以在以下上下文中找到:
限制
可以包含以下成份:
例子
请参阅REPORT 模块中有关 ROW 模块的例子。
目的
TABLE 语句用于定义一组相关的数据。它包含一个相同记录或列的数组,和一个在每 一行描述字段的列名的数组。 表格语句只能出现在 DEFINE 语句或模块中。
语法
>>-%table--| 上限 |--------------------------------------------><
上限
|--------------------------------------------------------------|
+-(----数值---)--+
+-ALL--+
参数
上下文
可以在以下上下文中找到:
限制
可以包含以下成份:
例子
%DEFINE myTable=%TABLE(30)