IBM Books

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

在事务中指定 Macro HTML 块

可以在调用 HTML 块的 URL 请求中使用一个称为事务句柄的标识符 来定义哪些 HTML 块是您的事务的一部分。定义和使用事务句柄有三步:

  1. 在宏中定义事务句柄。

  2. 调用 DTW_ACCEPT 内部函数将句柄名传递给 Net.Data 和 Web 服务器。

  3. 在 URL 请求中指定句柄来调用下一个 HTML 块。

要定义事务句柄:

  1. 在 DEFINE 部分为事务句柄定义一个变量。例如:
    %DEFINE handle=""
    

  2. 通过在 DEFINE 部分中指定 DTW_RTVHANDLE() 内部函数来选择生成唯一的事务句柄。

    语法: @DTW_RTVHANDLE(handle_name)

    例子:

    @DTW_STATIC()
     
    %DEFINE handle = ""
    @DTW_RTVHANDLE(handle)
     
    

事务句柄可以是任何有效的字符串。当然,DTW_RTVHANDLE() 函数通过生成唯一的事务句柄 提供了一种安全性的测量,从而防止其他人调用要在您的事务中运行的宏。

要对 Net.Data 指定一个事务句柄:

用 DTW_ACCEPT() 内部函数对 Net.Data 指定事务句柄的值。因为这个句柄是包含在发送给服务器 的 HTTP 首部信息中的一部分,因此必须在宏生成任何输出之前调用 DTW_ACCEPT() 函数。 通常,它是 HTML 块中的第一个元素。

语法: @DTW_ACCEPT(handle_name, ["timeout"])

其中 timeout 是一个可选 的参数,用于指定 Web 服务器在结束事务前等待来自浏览器的响应的时间(以秒计算)。

您可以在 HTML 块内部或任何 HTML 块外部调用 DTW_ACCEPT()。 如果在任何 HTML 块的外部调用该函数,则事务句柄和可选的超时值适用于宏内部的所有 HTML 块。

例 1: 对后继的 URL 请求指定一个事务句柄以便在这个事务中运行

@DTW_STATIC()
 
%DEFINE handle = ""
@DTW_RTVHANDLE(handle)
 
 
%HTML(Block1){
@DTW_ACCEPT(handle)
 ...
%}

重要事项:当您将 DTW_ACCEPT() 作为 HTML 块中的第一个元素调用时, 请确保在指定 %HTML 语句的行和 DTW_ACCEPT() 调用本身之间没有空白。Net.Data 把这个 空白看作要发送给浏览器的正文并发出错误,因为在将数据发送给浏览器之前没有找到 DTW_ACCEPT() 调用。

例 2: 在宏中指定一个适用于所有 HTML 块的事务句柄

@DTW_STATIC()
 
%DEFINE handle = ""
@DTW_RTVHANDLE(handle)
 
@DTW_ACCEPT(handle)
 
%HTML(Block1){
 ...
%}
 
%HTML(Block2){
 ...
%}

要在调用将在您的事务中运行的 HTML 块时指定句柄:

在生成一个事务句柄并调用 DTW_ACCEPT() 函数之后,只有那些具有事务句柄的 URL 才能够在您的事务中运行。 在 URL 中,事务句柄必须紧随在 CGI 程序名之后。
注意:在代码中输入语句时,URL 应在一行上且不含空格, 这里为了显示上的需要而分作两行。

参数:

server
指定了 Web 服务器的名称。如果是本地服务器,则可以忽略服务器名称而使用相关的 URL。

Net.Data_invocation_path
Net.Data 可执行 文件的路径和文件名。例如,/cgi-bin/db2www/

transaction_handle
指定哪些 URL 是由 Net.Data 宏初启的事务中的一部分。 此标识符是通过调用 DTW_RTVHANDLE 内部函数来得到的,并且必须跟在 Net.Data_invocation_path 之后。

filename
指定 Net.Data 宏文件的名称。 Net.Data 搜索并试图用 MACRO_PATH 初始化路径变量 中定义的路径语句来与这个文件名匹配。 请参阅MACRO_PATH以获取更多信息。

block
在引用的 Net.Data 宏中指定 HTML 块的名称。

method
指定与表一起使用的 HTML 方法。建议采用 METHOD=POST。

?name=val&...
指定一个或多个传递给 Net.Data 的可选参数。

通常,您将对这些 URL 提供 HTML 链,或者在宏中的表操作标记上指定 URL。

例 1: 具有链接到同一事务内其它宏调用的链的典型 HTML 块

@DTW_STATIC()
 ...
%define handle = ""
@DTW_RTVHANDLE(handle)
 
%html(report) {
@DTW_ACCEPT(handle)
 ...
<a href="/cgi-bin/db2www/$(handle)/qsys.lib/mylib.lib/
   macros.file/pcgi1.mbr/report2">continue</a><br>
<a href="/cgi-bin/db2www/$(handle)/qsys.lib/mylib.lib/
   macros.file/pcgi1.mbr/quit">quit</a><br>
%}
 

例 2: 具有链接到另一个宏的 FORM ACTION 链的典型 HTML 块

@DTW_STATIC()
 ...
%define handle = ""
@DTW_RTVHANDLE(handle)
 
%html(input) {
@DTW_ACCEPT(handle)
 ...
<form method=post action="/cgi-bin/db2www/$(handle)/qsys.lib/
mylib.lib/macros.file/pcgi1.mbr/report2">
<p>What type of hardware do you want to see?
<menu>
<li><input type="radio" name="hdware" value="MON" checked>Monitors
<li><input type="radio" name="hdware" value="PNT">Pointing devices
<li><input type="radio" name="hdware" value="PRT">Printers
<li><input type="radio" name="hdware" value="SCN">Scanners
</menu>
</form>
%}
 


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