宏由两部分组成:
说明部分还可以包含其他语言结构和语句,例如 EXEC 语句、IF 块、INCLUDE 语句和 MESSAGE 块。关于语言结构的更多信息,参见 Net.Data 参考中关于语言结构的章节。
权限提示:确保执行 Net.Data 所使用的用户 ID 有权读取和执行 EXEC 语句所引用的文件,且有权读取 INCLUDE 语句所引用的文件。参见对 Net.Data 访问的文件授予访问权限, 以获取更多信息。
在本小节中,用一个 Net.Data 宏说明了宏语言的元素。此示例宏表达了一种格式,该格式提示 要向 REXX 程序传送的信息。宏将此信息传送至名为 ompsamp.cmd 的外部 REXX 程序,该程序回送用户输入的数据。然后在第二个 HTML 页面上显示结果。
首先看整个宏,然后详细看每块:
%{ ********************** DEFINE block ************************%} %DEFINE { page_title="Net.Data Macro Template" %} %{ ********************** FUNCTION Definition block ************************%} %FUNCTION(DTW_REXX) rexx1 (IN input) returns(result) { %EXEC{ompsamp.cmd %} %} %FUNCTION(DTW_REXX) today () RETURNS(result) { result = date() %} %{ ********************** HTML Block: Input ************************%} %HTML (INPUT) { <html> <head> <title>$(page_title)</title> </head><body> <h1>Input Form</h1> Today is @today() <form method="post" action="output"> Type some data to pass to a REXX program: < input name="input_data" type="text" size="30" /> <p> <input type="submit" value="enter" /> </p> </form> < hr> <p>[<a href="/">Home page</a>] </body></html> %} %{ ********************** HTML Block: Output ************************%} %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、 Web 服务器 API 或 Java 小服务程序 来访问它的。要调用宏,Net.Data 需要两个参数:要处理的宏的名称和该宏中要显示的 HTML 块。
调用了宏之后,Net.Data 从头开始处理它。以下各章节着眼于当 Net.Data 处理文件时所发生的事情。