可以在调用 HTML 块的 URL 请求中使用一个称为事务句柄的标识符 来定义哪些 HTML 块是您的事务的一部分。定义和使用事务句柄有三步:
要定义事务句柄:
%DEFINE handle=""
语法: @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 应在一行上且不含空格, 这里为了显示上的需要而分作两行。 |
<A HREF="http://server/Net.Data_invocation_path/transaction_handle/ filename/block/[?name=val&...]">any text</A>
<FORM METHOD=method ACTION="http://server/Net.Data_invocation_path/transaction_handle/ filename/block/[?name=val&...]">any text</FORM>
http://server/Net.Data_invocation_path/transaction_handle/ filename/block/[?name=val&...]
参数:
通常,您将对这些 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>
%}