宏由两部分组成:
声明部分还可以包含其它语言结构和语句,例如 EXEC 语句、IF 块、INCLUDE 语句和 MESSAGE 块。关于语言结构的更多信息,请参阅Net.Data 参考中关于语言结构的章节。
权限技巧:确保此 Web 服务器具有对 EXEC 和 INCLUDE 语句引用的文件的访问权。 请参阅对 Net.Data 访问的对象授予访问权限, 以获取更多信息。
在本小节中,用一个 Net.Data 宏说明了宏语言的元素。此例子宏表达了一种格式,该格式提示 要向 REXX 程序传送的信息。宏将此信息传送至名为 ompsamp.mbr 的外部 REXX 程序,该程序回送用户输入的数据。然后在第二个 HTML 页面上显示结果。
首先看整个宏,然后详细看每块:
%{ ********************** DEFINE 块 ************************%}
%DEFINE{
page_title="Net.Data Macro Template"
%}
%{ ********************** FUNCTION 定义块 ************************%}
%FUNCTION(DTW_REXX) rexx1 (IN input) returns(result)
{
%EXEC{ompsamp.mbr %}
%}
%FUNCTION(DTW_REXX) today () RETURNS(result)
{
result = date()
%}
%{ ********************** HTML 块:输入 ************************%}
%HTML(INPUT) {
<html>
<head>
<title>$(page_title)</title>
</head><body>
<h1>Input Form</h1>
Today is @today()
<FORM METHOD="post" ACTION="OUTPUT">
输入一些数据传送给一个 REXX 程序:
<INPUT NAME="input_data" TYPE="text" SIZE="30">
<p>
<INPUT TYPE="submit" VALUE="Enter">
</form>
< hr>
<p>[<a href="/">Home page</a>]
</body></html>
%}
%{ ********************** HTML 块:输出 ************************%}
%HTML(OUTPUT) {
<html>
<head>
<title>$(page_title)</title>
</head><body>
<h1>Output Page</h1>
<p>@rexx1(input_data)
<p><hr>
<p>[<a href="/">Home page</a> |
<a href="input">Previous page</a>]
</body></html>
%}
示例宏包含四个主要块:DEFINE、FUNCTION 和两个 HTML 块。在一个 Net.Data 宏中可以有多 个 DEFINE、FUNCTION 和 HTML 块。
两个 HTML 块包含了诸如 HTML 等文本呈示语句,这使 Web 宏更容易书写。如果您熟悉 HTML,就知 道构建一个宏只涉及添加要在服务器上动态处理的宏语句和要发送到数据库的 SQL 语句。
虽然宏看起来类似于 HTML 文档,但是 Web 服务器是通过 Net.Data 使用 CGI 来访问它的。要调用宏,Net.Data 需要两个参数:要处理的宏的名称和该宏中要显示的 HTML 块。
调用了宏之后,Net.Data 从头开始处理它。以下各章节着眼于当 Net.Data 处理文件时所发生的事情。