IBM Books

参考


一般函数

一般函数帮助您使用 Net.Data 来开发 Web 页,这些函数不适合在其它类别中。下列函数是一般 目的的函数:

DTW_ADDQUOTE


AIX HP-UX Linux OS/2 OS/390 OS/400 SCO SUN Win NT
X X X X X X X X X

目的

将一个输入字符串中的单引号替换成双引号。

格式

@DTW_ADDQUOTE(stringIn, stringOut)

@DTW_rADDQUOTE(stringIn)

@DTW_mADDQUOTE(stringMult, stringMult2, ..., stringMultn)

参数

表 27. DTW_ADDQUOTE 参数
数据类型 参数 用法 说明
字符串 stringIn IN 一个变量或文字串。DTW_mADDQUOTE 可以有多个 输入字符串。
字符串 stringOut OUT 包含 stringIn 的修改格式的变量。
字符串 stringMult INOUT

  • 输入:一个包含字符串的变量。

  • 输出:一个包含输入字符串的变量,其中每个单引号(')字符都被替换成两个单引号。

返回码

表 28. DTW_ADDQUOTE 返回码
返回码 说明
-1001 服务器不能处理 Net.Data 请求来分配内存。
1003 在函数调用时传递的参数数目或者超过了允许的最大数目,或者小于该函数必需的最小数目。
1005 传递给函数调用的参数应该是一个字符串变量,但实际上是另一个类型的变量。
1006 传递给函数调用的参数必须是一个输出参数,但实际上传递了一个文字串。

用法注意事项

考虑对所有从 Web 浏览器获得输入的 SQL INPUT 语句使用此函数。例如,如果输入 O'Brien 作为姓名, 则如下例所示,其中的单引号会导致一个错误:

INSERT INTO USER1.CUSTABLE (LNAME, FNAME)
VALUES ('O'Brien', 'Patrick')

使用 DTW_ADDQUOTE 函数更改 SQL 语句并防止错误:

INSERT INTO USER1.CUSTABLE (LNAME, FNAME)
VALUES ('O''Brien', 'Patrick')

例 1:在 OUT 参数上添加一个额外的单引号

@DTW_ADDQUOTE(string1,string2)

例 2:在函数调用的返回值上添加一个额外的单引号

@DTW_rADDQUOTE("The title of the article is 'Once upon a time'")

例 3:在函数的每个 INOUT 参数上添加额外的单引号

@DTW_mADDQUOTE(string1,string2)

例 4:在插入 DB2 表格的数据中插入额外的单引号

%FUNCTION(DTW_SQL) insertName(){
INSERT INTO USER1.CUSTABLE (LNAME,FNAME)
VALUES ('@DTW_rADDQUOTE(lastname)', '@DTW_rADDQUOTE(firstname)')
%}

DTW_CACHE_PAGE


AIX HP-UX Linux OS/2 OS/390 OS/400 SCO SUN Win NT
X







目的

高速缓存作为宏处理结果而生成的部分或整个 Web 页面。

格式

@DTW_CACHE_PAGE(cacheid, url, age, status)

参数

表 29. DTW_CACHE_PAGE 参数
参数 用法 说明
cache_id IN 标志放置此页的高速缓存的字符串变量。
cached_page_ID IN 包含一个标识符的字符串变量,该标识符用于找出后继 DTW_CACHE_PAGE 高速缓存请求中的高速缓存页。此字符串可以是一个 URL。
age IN 包含时间长度(以秒计)的字符串变量。这个参数确定页面是否 过期。如果此页比 age 早,则它不发送给浏览器。

如果 age 指定为 -1,并且此页面存在于高速缓存中,则 Net.Data 不管它的年龄如何,直 接把它从高速缓存中发送给 Web 浏览器。Net.Data 不替换高速缓存中的页。

status OUT 指出高速缓存页的状态的字符串变量。可能的值是小写形 式的:

  • ok:输出页将在宏执行终止时作高速缓存。

  • new:此页不在高速缓存中。

  • renew:此页在高速缓存中,但是已过期。

  • no_cache:指定的高速缓存标识符不存在。它必须定义在高速缓存配置文件 中。您的宏可以继续执行而不作页面高速缓存。

  • inactive:指定的高速缓存已经标记为非活动的。您的宏可以继续执行而不作页面高速缓存。

  • busy:您的宏已经在此次执行前发出 DTW_CACHE_PAGE 内部函数。此宏可以继续执行。

  • error:在试图和高速缓存进行通信时发生错误。

返回码

表 30. DTW_CACHE_PAGE 返回码
返回码 说明
-1001 服务器不能处理 Net.Data 请求来分配内存。
1001 输入参数中包含一个空值。
1002 输入参数中包含一个由空终结字符组成的字符串值。
1003 在函数调用时传递的参数数目或者超过了允许的最大数目,或者小于该函数必需的最小数目。
1005 传递给函数调用的参数应该是一个字符串变量,但实际上是另一个类型的变量。
1006 传递给函数调用的参数必须是一个输出参数,但实际上传递了一个文字串。
1007 参数中包含了一个无效值。

用法注意事项

  1. 在调用 DTW_CACHE_PAGE() 时,它将试图从高速缓存开始检索指定的页面, 并将它发送至 Web 浏览器,就象它是从宏中生成的输出页面一样。如果 找到这个页面并且它还没有过期,则 Net.Data 停止处理宏,退出该宏并把高速缓存中的页面送 到 Web 浏览器。

    如果请求的页不在高速缓存中,或者现有的高速缓存中的页比 age 的值要早,则 Net.Data 生成一个新的输出页。当宏成功完成后,Net.Data 把新的页发送给浏览器并放在高速缓存中。

  2. 对于大部分高速缓存应用程序,在宏的顶端指定 DTW_CACHE_PAGE() 来高速缓存宏执行 时所生成的所有 Web 页面.在宏更新之后,这种技术简化了对宏的维护。例如,当函数在宏的中间时, 则如果一个 HTML 报表段添加到宏中前面的部分,则它可能不被注意到。Net.Data 不对新的报表 输出作高速缓存。另外,因为在 Net.Data 确定此页面要作高速缓存时停止所有进一步的处理,所以这种 方法提高了性能。

    对于高级的高速缓存应用程序,当您需要在处理期间决定在某个特定点作 高速缓存时,可以把此函数放在宏中的某个特定位置,而不是在宏文件的开始。例如,您可能需要根据从查询或函数调用返回的行数来 作高速缓存决定。

例 1:把 DTW_CACHE_PAGE() 函数放在宏的开始,以捕捉所有 HTML 输出

%IF (customer_status == "Classic")
@DTW_CACHE_PAGE("mymacro.mac", "http://www.mypage.org", "-1", status)
%ENDIF 
 % DEFINE { ...%}
 
...
 
%HTML(OUTPUT) {
 <title>This is the page title
 </head>
 <body>
 <center>
 This is the Main Heading
 <p>It is $(time). Have a nice day!
 </body>
</html>
  
%} 

例 2:因为作高速缓存的决定依赖于 HTML 输出的期望尺寸, 所以把函数放在 HTML 块中

%DEFINE { ...%}
 
...
 
%FUNCTION(DTW_SQL) count_rows(){
  select count(*) from customer
%REPORT{
%ROW{
  @DTW_ASSIGN(ALL_ROWS, V1)
%}
%}
%}
 
%FUNCTION(DTW_SQL) all_customers(){
  select * from customer
%}
 
%HTML(OUTPUT) {
<html>
 <head>
 <title>This is the customer list
 </head>
 <body>
 
@count_rows()
 
 %IF ($(ALL_ROWS) > "100")
@DTW_CACHE_PAGE("mymacro.mac", "http://www.mypage.org", "-1", status)
%ENDIF
 
@all_customers() 
 
 </body>
</html>
%}

在此例中,此页根据 HTML 输出的期望尺寸作高速缓存或检索。只有当数据库表格包含多于 100 行时,才认为 HTML 输出页是值得作高速缓存的。Net.Data 总是在执行这个宏之后,把 OUTPUT 块中的 文本(This is the customer list)发送给浏览器;此文本永不作高速缓存。跟在函数调 用后的行 (@count_rows()) 在满足 IF 块的条件时作高速缓存或检索。两部分共同形 成一个完整的 Net.Data 输出页。

例 3:动态地检索高速缓存标识符和放在高速缓存的页面标识符

%HTML(OUTPUT) {
 %IF (customer == "Joe Smith")
 
@DTW_CACHE_PAGE(@DTW_rGETENV("DTW_MACRO_FILENAME"), @DTW_rGETENV("URL"),"-1", status)
 
%ENDIF
 
...
 
<html>
 <head>
 <title>This is the page title</title>
 </head>
 <body>
 <center>
 <h3>This is the Main Heading</h3>
 <p>It is @DTW_rDATE(). Have a nice day!
 </body>
</html>
 
%}

DTW_DATE


AIX HP-UX Linux OS/2 OS/390 OS/400 SCO SUN Win NT
X X X X X X X X X

目的

以指定的格式返回当前的系统日期。

格式

@DTW_DATE(format, stringOut)

@DTW_DATE(stringOut)

@DTW_rDATE(format)

@DTW_rDATE()

参数

表 31. DTW_DATE 参数
数据类型 参数 用法 说明
字符串 format IN 一个用于指定数据格式的变量或文字串。有效的格式 包括:

D - 一年中的日 (001-366)

E - 欧洲日期格式 (dd/mm/yy)

N - 常规日期格式 (dd mon yyyy)

O - 顺序日期格式 (yy/mm/dd)

S - 标准日期格式 (yyyymmdd)

U - 美国日期格式 (mm/dd/yy)

缺省值为 N。

字符串 stringOut OUT 一个包含有指定格式的日期的变量。

返回码

表 32. DTW_DATE 返回码
返回码 说明
-1001 服务器不能处理 Net.Data 请求来分配内存。
1001 输入参数中包含一个空值。
1003 在函数调用时传递的参数数目或者超过了允许的最大数目,或者小于该函数必需的最小数目。
1005 传递给函数调用的参数应该是一个字符串变量,但实际上是另一个类型的变量。
1006 传递给函数调用的参数必须是一个输出参数,但实际上传递了一个文字串。
1007 参数中包含了一个无效值。

例 1:常规日期格式

@DTW_DATE(results)

例 2:欧洲日期格式

@DTW_DATE("E", results)

例 3:美国日期格式

%HTML (report){
<P>This report created on @DTW_rDATE("U").

DTW_EXIT


AIX HP-UX Linux OS/2 OS/390 OS/400 SCO SUN Win NT
X X X X X X X X X

目的

指定立即离开宏。Net.Data 将调用 DTW_EXIT() 前所生成的所有 Web 页面都发送给 Web 浏览器。

格式

@DTW_EXIT()

返回码

表 33. DTW_EXIT 返回码
返回码 说明
1003 在函数调用时传递的参数数目或者超过了允许的最大数目,或者小于该函数必需的最小数目。

用法注意事项

  1. 用 DTW_EXIT() 来立即停止对宏的处理。使用这一技术可以节省 Net.Data 用于处理整个文件的时间。

  2. 在添加 DTW_EXIT() 函数之前,请确保整个宏在句法上是正确的。使用 DTW_EXIT() 可以使 Net.Data 在遇到对该函数的调用时停止对宏的处理, 这样可以避免处理 DTW_EXIT() 函数之后所出现的错误。

例 1:退出宏

%HTML(cache_example) {
 
<html>
 <head>
 <title>This is the page title</title>
 </head>
 <body>
 <center>
 <h3>This is the Main Heading</h3>
 <!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!>
 <! Joe Smith sees a very short page                   !>
 <!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!>
 %IF (customer == "Joe Smith")
 
@DTW_EXIT()
 
%ENDIF
 
...
 
 </body>
</html>
 %}

DTW_GETCOOKIE


AIX HP-UX Linux OS/2 OS/390 OS/400 SCO SUN Win NT
X X X X X X X X X

目的

返回指定 cookie 的值。

格式

@DTW_GETCOOKIE(IN cookie_name, OUT cookie_value)

@DTW_rGETCOOKIE(IN cookie_name)

参数

表 34. DTW_GETCOOKIE 参数
数据类型 参数 用法 说明
字符串 cookie_name IN 指定 cookie 名称的变量或文字串。
字符串 cookie_value OUT 包含函数检索的 cookie 的值(例如用户状态信息)的变量。

OS/400 和 OS/390 用户:如果 cookie 值具有 URL 样式的编码(例如,"%20"),则将在返回该 cookie 值 之前对其进行解码。

工作站用户:如果 cookie 值具有 URL 样式的编码(例如,"%20"), 则在返回该 cookie 值之前不会对其进行解码。

返回码

表 35. DTW_GETCOOKIE 返回码
返回码 说明
-1001 服务器不能处理 Net.Data 请求来分配内存。
1001 输入参数中包含一个空值。
1002 输入参数中包含一个由空终结字符组成的字符串值。
1003 在函数调用时传递的参数数目或者超过了允许的最大数目,或者小于该函数必需的最小数目。
1005 传递给函数调用的参数应该是一个字符串变量,但实际上是另一个类型的变量。
1006 传递给函数调用的参数必须是一个输出参数,但实际上传递了一个文字串。
8000 找不到 cookie。

用法注意事项

在两个独立的 HTTP 请求中定义并检索 cookie。因为只有在 cookie 被送给客户之后它才可见,所以宏试图获取在相同 HTTP 请求中已定义过的 cookie,您就可 能收到意料之外的结果。

例 1:检索包含用户标识符和口令信息的 cookie

@DTW_GETCOOKIE("mycookie_name_for_userID", userID)
@DTW_GETCOOKIE("mycookie_name_for_password", password)

例 2:确定在收集用户信息之前某个用户的 cookie 是否已存在

%MESSAGE {
    8000 : "" : continue
%}
 
%HTML(welcome) {
<html>
 <body>
  <h1>Net.Data Club</h1>
  @DTW_GETCOOKIE("NDC_name", name)
  %IF ($(RETURN_CODE) == "8000") %{ The cookie is not found. %}
  <form method="post" action="remember">
  <p>Welcome to the club. Please enter your name.<br>
  <input name="name">
  <input type="submit" value="submit"><br>
</form>
%ELSE
  <p>Hi, $(name). Welcome back.
%ENDIF
 </body>
</html>
  %}

HTML 欢迎段检查 ookie NDC_name 是否存在。如果 cookie 存在,则浏览器 显示个人的问候。如果此 cookie 不存在,则表单将提示要求输入用户的名字并把它投递到 HTML 记忆段,这将把用户的名字 设置到 cookie NDC_name 里,如下所示:

%HTML(remember) {
<html>
 <body>
  <H1>Net.Data Club</H1>
  @DTW_SETCOOKIE("NDC_name", name, "expires=Wednesday, 01-Dec-2010 00:00:00;path=/")
  <p>Thank you.
  <p><a href="welcome">Come back</a>
 </body>
</html>
  %}

DTW_GETENV


AIX HP-UX Linux OS/2 OS/390 OS/400 SCO SUN Win NT
X X X X X X X X X

目的

返回指定的环境变量的值。

格式

@DTW_GETENV(envVarName, envVarValue)

@DTW_rGETENV(envVarName)

参数

表 36. DTW_GETENV 参数
数据类型 参数 用法 说明
字符串 envVarName IN 一个变量或文字串。
字符串 envVarValue OUT 正在 envVarName 中指定的环境变量 的值。如果 找不到这个值则返回空串。

返回码

表 37. DTW_GETENV 返回码
返回码 说明
-1001 服务器不能处理 Net.Data 请求来分配内存。
1003 在函数调用时传递的参数数目或者超过了允许的最大数目,或者小于该函数必需的最小数目。
1005 传递给函数调用的参数应该是一个字符串变量,但实际上是另一个类型的变量。
1006 传递给函数调用的参数必须是一个输出参数,但实际上传递了一个文字串。

用法注意事项

您还可以使用 ENVVAR 语句来引用环境变量的值。有关的更多信息, 请参阅ENVVAR 语句

例 1:返回 PATH 语句 OUT 参数上的值

@DTW_GETENV(myEnvVarName, myEnvVarValue)

例 2:返回 PATH 语句的值

@DTW_rGETENV(myPath)

例 3: 返回用于服务器协议的值

The server is @DTW_rGETENV("SERVER_PROTOCOL").

DTW_GETINIDATA


AIX HP-UX Linux OS/2 OS/390 OS/400 SCO SUN Win NT
X X X X X X X X X

目的

返回指定的配置变量的值。

格式

@DTW_GETINIDATA(iniVarName, iniVarValue)

@DTW_rGETINIDATA(iniVarName)

参数

表 38. DTW_GETINIDATA 参数
数据类型 参数 用法 说明
字符串 iniVarName IN 一个变量或文字串。
字符串 iniVarValue OUT iniVarName 中指定的配置变量的值。

返回码

表 39. DTW_GETINIDATA 返回码
返回码 说明
-1001 服务器不能处理 Net.Data 请求来分配内存。
1003 在函数调用时传递的参数数目或者超过了允许的最大数目,或者小于该函数必需的最小数目。
1005 传递给函数调用的参数应该是一个字符串变量,但实际上是另一个类型的变量。
1006 传递给函数调用的参数必须是一个输出参数,但实际上传递了一个文字串。

用法注意事项

  1. 如果对配置变量指定的不是配置文件,则 Net.Data 将返回一个空字符串。

  2. 对于 OS/390、OS/2、Windows NT 和 UNIX 用户:无法使用此调用检索 配置路径变量 (MACRO_PATH、EXEC_PATH 和 INCLUDE_PATH) 以及 ENVIRONMENT 语句。

  3. 对于 OS/400 用户: 无法使用此调用检索 ENVIRONMENT 语句。

例 1:返回 Net.Data 路径变量值

@DTW_GETINIDATA(myEnvVarName, myEnvVarValue)

DTW_HTMLENCODE


AIX HP-UX Linux OS/2 OS/390 OS/400 SCO SUN Win NT
X X X X X X X X X

目的

使用 HTML 字符转义代码对选定的字符进行编码。

格式

@DTW_HTMLENCODE(stringIn, stringOut)

@DTW_rHTMLENCODE(stringIn)

参数

表 40. DTW_HTMLENCODE 参数
数据类型 参数 用法 说明
字符串 stringIn IN 一个变量或文字串。
字符串 stringOut OUT 一个包含已修改的输入字符串的变量,其中 输入字符串中的某些字符已经被 HTML 字符转义代码所替换。

返回码

表 41. DTW_HTMLENCODE 返回码
返回码 说明
-1001 服务器不能处理 Net.Data 请求来分配内存。
1003 在函数调用时传递的参数数目或者超过了允许的最大数目,或者小于该函数必需的最小数目。
1005 传递给函数调用的参数应该是一个字符串变量,但实际上是另一个类型的变量。
1006 传递给函数调用的参数必须是一个输出参数,但实际上传递了一个文字串。

用法注意事项

  1. 使用此函数对不想让 Web 浏览器解释为 HTML 的字符数据进行编码。例如,通过使用适当的 转义代码,您可以在 Web 页面中显示小于 (<) 和大于 (>) 等字符,而通常这些字符将被浏览器解释 为 HTML 标记的组成部分。

  2. 表 42显示由 DTW_HTMLENCODE 函数编码的字符。

    表 42. HTML 的字符转义代码
    字符 名称 代码
    SPACE 空格 &#32;
    " 双引号 &#34;
    # 数值符号 &#35;
    % 百分号 &#37;
    & &符号 &#38;
    [ 左方括号 &#40;
    ] 右方括号 &#41;
    + 加号 &#43;
    \ 斜杠 &#47;
    : 冒号 &#58;
    ; 分号 &#59;
    < 小于 &#60;
    = 等于 &#61:
    > 大于 &#62:
    ? 问号 &#63:
    @ @符号 &#64;
    / 反斜杠 &#92;
    ^ ^符号 &#94;
    { 左花括号 &#123;
    | 竖线 &#124;
    } 右花括号 &#125;
    ~ ~符号 &#126;

例 1:编码的空格字符

@DTW_HTMLENCODE(string1,string2)

例 2:编码空格,小于符号和等号

@DTW_rHTMLENCODE("X <= 10")

DTW_QHTMLENCODE


AIX HP-UX Linux OS/2 OS/390 OS/400 SCO SUN Win NT
X X X X X X X X X

目的

执行和 @DTW_HTMLENCODE 相同的功能,但把单引号字符 (') 编码成 &#39;。表 42中显示了 DTW_QHTMLENCODE 使用的 HTML 字符转义代码。

格式

@DTW_QHTMLENCODE(stringIn, stringOut)

@DTW_rQHTMLENCODE(stringIn)

参数

表 43. DTW_QHTMLENCODE 参数
数据类型 参数 用法 说明
字符串 stringIn IN 一个变量或文字串。
字符串 stringOut OUT 一个包含 stringIn 已修改格式的变量,其中 的某些字符已经被 HTML 字符转义代码所替换。

返回码

表 44. DTW_QHTMLENCODE 返回码
返回码 说明
-1001 服务器不能处理 Net.Data 请求来分配内存。
1003 在函数调用时传递的参数数目或者超过了允许的最大数目,或者小于该函数必需的最小数目。
1005 传递给函数调用的参数应该是一个字符串变量,但实际上是另一个类型的变量。
1006 传递给函数调用的参数必须是一个输出参数,但实际上传递了一个文字串。

例 1:编码一个单引号和一个空格

@DTW_QHTMLENCODE(string1,string2)

例 2:编码单引号、空格和一个与符号

@DTW_rQHTMLENCODE("John's & Jane's")

DTW_SENDMAIL


AIX HP-UX Linux OS/2 OS/390 OS/400 SCO SUN Win NT
X X X X X X X X X

目的

动态地构建并传输电子邮件(e-mail)消息。

格式

@DTW_SENDMAIL(IN Sender, IN Recipient, IN Message, IN Subject, IN CarbonCopy, IN BlindCarbonCopy, IN ReplyTo, IN Organization)

@DTW_SENDMAIL(IN Sender, IN Recipient, IN Message, IN Subject, IN CarbonCopy, IN BlindCarbonCopy, IN ReplyTo)

@DTW_SENDMAIL(IN Sender, IN Recipient, IN Message, IN Subject, IN CarbonCopy, IN BlindCarbonCopy)

@DTW_SENDMAIL(IN Sender, IN Recipient, IN Message, IN Subject, IN CarbonCopy)

@DTW_SENDMAIL(IN Sender, IN Recipient, IN Message, IN Subject)

@DTW_SENDMAIL(IN Sender, IN Recipient, IN Message)

参数

表 45. DTW_SENDMAIL 参数
数据类型 参数 用法 说明
字符串 sender IN 指定作者地址的变量或文字串。此参数是必需的。有效的格式是:

  • Name <user@domain>

  • <user@domain>

  • user@domain
字符串 recipient IN 指定发送此消息的目标电子邮件地址的变量或文字串。这个值 包含多个收件人,之间用逗号(,)隔开。此参数是必需的。有效的 recipient 格式是:

  • Name <user@domain>

  • <user@domain>

  • user@domain
字符串 message IN 包含电子邮件消息文本的变量或文字串。此参数是必需的。
字符串 subject IN 包含主题行文本的变量或文字串。这是一个可选参数。必须指定一个空串 ("") 来指定附加的参数。
字符串 CarbonCopy IN 包含电子邮件地址或者附加收件人的名称和电子邮件地址 的变量或文字串。这个值包含多个附加的收件人,之间用逗号(,)隔开。参阅 Recipient 参数的有效收 件人格式。这是一个可选参数。必须指定一个空串 ("") 来指定附加的参数。
字符串 BlindCarbonCopy IN 包含电子邮件地址,或者附加收件人的名称和电子邮件地址,但 是收件人不出现在电子邮件标题中的变量或文字串。这个值包含多个附加的收件人,之间用逗号(,)隔开。参阅 Recipient 参数的有效收 件人格式。这是一个可选参数。必须指定一个空串 ("") 来指定附加的参数。
字符串 ReplyTo IN 包含答复这条发送消息的电子邮件地址的变量或者文字串。这是一个可选参数。必须指定一个空串 ("") 来指定附加的参数。有效的 ReplyTo 格式是:

  • Name <user@domain>

  • <user@domain>

  • user@domain
字符串 Organization IN 包含 sender 机构名称的变量或者文字串。这是一个可选参数。

返回码

表 46. DTW_SENDMAIL 返回码
返回码 说明
-1001 服务器不能处理 Net.Data 请求来分配内存。
1001 输入参数中包含一个空值。
1002 输入参数中包含一个由空终结字符组成的字符串值。
1003 在函数调用时传递的参数数目或者超过了允许的最大数目,或者小于该函数必需的最小数目。
1005 传递给函数调用的参数应该是一个字符串变量,但实际上是另一个类型的变量。
7000 Net.Data 无法连接到指定的 SMTP 服务器。
7001 在 Net.Data 试图转播电子邮件消息到指定的 SMTP 服务器时发生 SMTP 错误。
7002 指定的 SMTP 服务器不支持扩展的简单邮件传送协议 (ESMTP)。

用法注意事项

  1. 您可以使用可选的配置变量 DTW_SMTP_SERVER 来指定用于传送电子邮件消息的 SMTP 服务器。这个参数的值可以是一个主机名、 一个 IP 地址、或者一个节点和名称。如果没有定义这个变量,则 Net.Data 把本地主机用作 SMTP 服务器。请参阅Net.Data 管理与程序 设计指南针对您的操作系统中的配置一章,进一步了解此变量。

  2. OS/400、OS/2、Windows NT 和 UNIX 用户:标准简单邮件传送协议 (SMTP) 服务器 只接受 7 位数据,例如美国 ASCII 字符。如果您的消息有 8 位字符,则建议指定一个扩展的简单邮件传送协议(ESMTP)服务器;ESMTP 服务器 接受 8 位字符。Net.Data 不把 8 位数据编码成 7 位数据。如果没有对 ESMTP 服务器的访问权,则从电子邮件消息中除去所有 8 位的字符。

    Net.Data for OS/390 的用户不需要为了 SMTP 服务器而修改电子邮件消息。

  3. 字符集支持:

  4. 下面的列表描述了 Net.Data 不发送电子邮件消息的情况:

例 1:构建并发送一个简单电子邮件消息的函数调用

@DTW_SENDMAIL("<ibmuser1@ibm.com>", "<ibmuser2@ibm.com>", "There is a meeting at 9:30.", 
"Status meeting")

DTW_SENDMAIL 函数发送一条具有下列信息的电子邮件消息:

Date: Mon, 3 Apr 1998 09:54:33 PST
To: <ibmuser2@ibm.com>
From: <ibmuser1@ibm.com>
Subject: Status meeting
 
There is a meeting at 9:30.
 
Date 的信息通过使用系统日期和时间函数来构造,并且以 SMTP 特定数据格式格 式化。

例 2:构建并发送一条电子邮件消息的函数调用,该消息具有多个收件人 、复写拷贝和盲目复写拷贝收件人以及公司名称

@DTW_SENDMAIL("IBM User 1 <ibmuser1@ibm.com>", "IBM User 2 <ibmuser2@ibm.com>, 
IBM User 3 <ibmuser3@ibm.com>, IBM User 4 <ibmuser4@ibm.com>", "There is a meeting at 9:30.", 
"Status meeting", "IBM User 5 <ibmuser5@ibm.com>", "IBM User 6 <ibmuser6@ibm.com", 
"meeting@ibm.com", "IBM")

DTW_SENDMAIL 函数发送一条具有下列信息的电子邮件消息:

Date: Mon, 3 Apr 1998 09:54:33 PST
To: IBM User 2 <ibmuser2@ibm.com>, IBM User 3 <ibmuser3@ibm.com>, IBM User 4 <ibmuser4@ibm.com>
CC: IBM User 5 <ibmuser5@ibm.com>
BCC: IBM User 6 <ibmuser6@ibm.com>
From: IBM User 1 <ibmuser1@ibm.com>
ReplyTo: meeting@ibm.com
Organzation: IBM
Subject: Status meeting
 
There is a meeting at 9:30.

例 3:通过 Web 格式的界面构建和发送电子邮件的宏

  %HTML(start) {
<html>
 <body>
  <h1>Net.Data E-Mail Example</h1>
  <form method="post" action="sendemail">
  <p>To:<br><input name="recipient"><p>
  Subject:<br><input name="subject"><p>
  Message:<br><textarea name=message rows=20 cols=40>
  </textarea><p>
  <input type="submit" value="Send E-mail"><br>
</form>
 </body>
</html>
  %}
 
  %HTML(sendemail) {
<html>
 <body>
  <h1>Net.Data E-Mail Example</h1>
  @DTW_SENDMAIL("Net.Data E-mail Service <netdata@us.ibm.com>", recipient, message, subject)
  <p>E-mail has been sent out.
 </body>
</html>
  %}

这个宏通过一个 Web 格式界面发送电子邮件。HTML 开始段显示一张表,在其中可以输入 收件人的电子邮件地址、主题和消息。当用户单击发送电子邮件按钮时,此 条消息发送给 HTML(vsendemail) 段中指定的收件人。这一段调用 DTW_SENDMAIL 并使用从 Web 表中 获取的参数,确定电子邮件消息的内容,以及发送者和收件人。一旦发出电子邮件消息,显示一条确 认通知。

例 4:使用 SQL 查询确定收件人列表的一个宏

%Function(DTW_SQL) mailing_list(IN message) {
  SELECT EMAIL_ADDRESS FROM CUSTOMERS WHERE ZIPCODE='CA'
       %REPORT {
      Sending out product information to all customers who live in California...<P>
  %ROW {
        @DTW_SENDMAIL("John Doe Corp. <John.Doe@doe.com>", V1, message, "New Product Release")
        E-mail sent out to customer $(V1).<BR>
      %}
    %}
  %}

这个宏根据客户数据中 SQL 查询的结果,向特定的客户组发送一个自动化的电子邮件消息。 此 SQL 查询还检索这些客户的电子邮件地址。电子邮件内容由 message 的值确定,可以是静态的,也可以是动态的(例如,可以使用另一 个 SQL 查询动态地指定产品的版本号或不同的提供价格)。

DTW_SETCOOKIE


AIX HP-UX Linux OS/2 OS/390 OS/400 SCO SUN Win NT
X X X X X X X X X

目的

生成在客户系统中设置 cookie 的 JavaScript 代码。

格式

@DTW_SETCOOKIE(IN cookie_name, IN cookie_value, IN advanced_options)

@DTW_SETCOOKIE(IN cookie_name, IN cookie_value)

参数

表 48. DTW_SETCOOKIE 参数
数据类型 参数 用法 说明
字符串 cookie_name IN 指定 cookie 名称的变量或文字串。
字符串 cookie_value IN 指定 cookie 值的变量或文字串。

避免在 cookie_value 中 使用分号、逗号和空格。如果它们是必需的,则使用 Net.Data 函数 DTW_rURLESCSEQ,在把包含特殊字符的字符串送给 DTW_SETCOOKIE 之前先处理它。例如,

@DTW_SETCOOKIE("my_cookie_name", 
  @DTW_rURLESCSEQ("my cookie value"))
字符串 advanced_options IN 包含用于定义 cookie 的可选属性,属性间用分号分隔的字符串。这些属性可以是:

expires = date
指定一个日期字符串,它定义 cookie 的有效寿命。在此日期期满后,将不再存储或检索这个 cookie。语法:
weekday, DD-month-YYYY HH:MM:SS GMT

其中:

weekday
指定星期中各天的全名。

DD
指定月份的数值日期。

month
指定月份的三字符缩写。

YYYY
指定四个字符的数字年份。

HH:MM:SS
用小时、分钟和秒指定时间戳记。

domain = domain_name
指定 cookie 的域属性,供域属性匹配使用。

path = path
指定针对此 cookie 有效的域中 URL 的子集。

secure
指定只在安全通道中才把此 cookie 传输到 HTTP 服务器。

如果未指定 secure 选项, 则此 cookie 可能在不保证安全的通道中发送。安全选项 不要求浏览器对 cookie 进行加密,也不保证包含 DTW_SETCOOKIE 语句的页面在 SSL 中传输。

欲获取有关高级选项的额外信息,请参阅位于 http://home.netscape.com 的 Netscape cookie 说明

返回码

表 49. DTW_SETCOOKIE 返回码
返回码 说明
-1001 服务器不能处理 Net.Data 请求来分配内存。
1001 输入参数中包含一个空值。
1002 输入参数中包含一个由空终结字符组成的字符串值。
1003 在函数调用时传递的参数数目或者超过了允许的最大数目,或者小于该函数必需的最小数目。
1005 传递给函数调用的参数应该是一个字符串变量,但实际上是另一个类型的变量。

用法注意事项

  1. 如果客户 Web 浏览器不支持 Java Script,则浏览器不设置 cookie。

  2. 因为 DTW_SETCOOKIE 生成 Java Script 代码,不要在 <SCRIPT> 或 <NOSCRIPT> HTML 元素内调用 DTW_SETCOOKIE。

  3. 要检索一个 cookie,使用 DTW_SETCOOKIE() 函数。参阅DTW_GETCOOKIE 学习如何定义 cookie。

  4. 在两个独立的 HTTP 请求中定义并检索 cookie。因为只有在 cookie 被送给客户之后它才可见,所以宏试图获取在相同 HTTP 请求中已定义过的 cookie,您就可 能收到意料之外的结果。

例 1:定义具有“安全”增强选项的、包含用户标识符和口令信息的 cookie

@DTW_SETCOOKIE("mycookie_name_for_userID", "User1")
@DTW_SETCOOKIE("mycookie_name_for_password", "sd3dT", "secure")

例 2:定义包含过期日期增强选项的 cookie

@DTW_SETCOOKIE("mycookie_name_for_userID", "User1",
   "expires=Wednesday 01-Dec-2010 00:00:00")
@DTW_SETCOOKIE("mycookie_name_for_password", "sd3dT", 
   "expires=Wednesday, 01-Dec-2010 00:00:00;secure")

函数调用应在一行上;在本例中分作多行是出于格式的需要。

例 3:确定在收集用户信息之前某个用户的 cookie 是否已存在

%HTML(welcome) {
<html>
 <body>
  <h1>Net.Data Club</h1>
  @DTW_GETCOOKIE("NDC_name", name)
  %IF ($(RETURN_CODE) == "8000") %{ The cookie is not found. %}
  <form method="post" action="remember">
  <p>Welcome to the club. Please enter your name.<br>
  <input name="name">
  <input type="submit" value="submit"><br>
</form>
%ELSE
  <p>Hi, $(name). Welcome back.
%ENDIF
 </body>
</html>
  %}

HTML(welcome) 段检查 cookie NDC_name是否存在。如果 cookie 存在,则浏览器 显示个人的问候。如果此 cookie 不存在,则浏览器提示要求用户的名字,把它投递到 HTML(remember) 记忆段。这一 段把用户的名字记录到 cookie NDC_name 中,如下所示:

%HTML(remember) {
<html>
 <body>
  <H1>Net.Data Club>
  @DTW_SETCOOKIE("NDC_name", name, "expires=Wednesday, 01-Dec-2010 00:00:00;path=/")
  <p>Thank you.
  <p><a href="welcome">Come back</a>
 </body>
</html>
  %}

DTW_SETENV


AIX HP-UX Linux OS/2 OS/390 OS/400 SCO SUN Win NT
X X X X X X X X X

目的

用指定的值指定一个环境变量并返回先前的值。

格式

@DTW_SETENV(envVarName, envVarValue, prevValue)

@DTW_rSETENV(envVarName, envVarValue)

参数

表 50. DTW_SETENV 参数
数据类型 参数 用法 说明
字符串 envVarName IN 一个表示环境变量的变量或文字串。
字符串 envVarValue IN 具有要赋给此环境变量的值的变量或者文字串。
字符串 prevValue OUT 一个包含有环境变量先前值的变量。

返回码

表 51. DTW_SETENV 返回码
返回码 说明
-1001 服务器不能处理 Net.Data 请求来分配内存。
1001 输入参数中包含一个空值。
1003 在函数调用时传递的参数数目或者超过了允许的最大数目,或者小于该函数必需的最小数目。
1005 传递给函数调用的参数应该是一个字符串变量,但实际上是另一个类型的变量。
1006 传递给函数调用的参数必须是一个输出参数,但实际上传递了一个文字串。

用法注意事项

如果没有找到该环境变量的先前值,则将返回一个空字符串。

例 1:返回先前路径的值

@DTW_SETENV("PATH", "myPath", prevValue)

例 2:返回先前路径的值,并指定 PATH 值的值

@DTW_rSETENV("PATH", "myPath")

DTW_TIME


AIX HP-UX Linux OS/2 OS/390 OS/400 SCO SUN Win NT
X X X X X X X X X

目的

以指定的格式返回当前的系统时间。

格式

@DTW_TIME(stringIn, stringOut)

@DTW_TIME(stringOut)

@DTW_rTIME(stringIn)

@DTW_rTIME()

参数

表 52. DTW_TIME 参数
数据类型 参数 用法 说明
字符串 stringIn IN 一个用于指定时间格式的变量或文字串。有效的格式是:

C - 民用时间 (使用12小时时钟的 hh:mmAM/PM)

L - 本地时间 (hh:mm:ss)

N - 常规时间 (使用24小时时钟的 hh:mm:ss)

X - 扩展的时间 (hh:mm:ss.ccc,使用 24 小时时钟,其中 ccc 是毫秒数)

H - 自子夜以来的小时数

M - 自子夜以来的分钟数

S - 自子夜以来的秒数

字符串 stringOut OUT 一个包含有指定格式的时间的变量。

返回码

表 53. DTW_TIME 返回码
返回码 说明
-1001 服务器不能处理 Net.Data 请求来分配内存。
1003 在函数调用时传递的参数数目或者超过了允许的最大数目,或者小于该函数必需的最小数目。
1005 传递给函数调用的参数应该是一个字符串变量,但实际上是另一个类型的变量。
1006 传递给函数调用的参数必须是一个输出参数,但实际上传递了一个文字串。
1007 参数中包含了一个无效值。

例 1:24 小时时钟格式

@DTW_TIME(results)

例 2:民用时间格式

@DTW_TIME("C", results)

例 3:用函数调用返回自子夜以来的分钟数

@DTW_rTIME("M")

例 4:用函数调用返回缺省时间和日期格式

%REPORT{
<P>This report was created at @DTW_rTIME(), @DTW_rDATE().
%}

DTW_URLESCSEQ


AIX HP-UX Linux OS/2 OS/390 OS/400 SCO SUN Win NT
X X X X X X X X X

目的

用转义值(也称 URL 转换代码)替换 URL 中不允许的字符。

格式

@DTW_URLESCSEQ(stringIn, stringOut)

@DTW_rURLESCSEQ(stringIn)

参数

表 54. DTW_URLESCSEQ 参数
数据类型 参数 用法 说明
字符串 stringIn IN 一个变量或文字串。
字符串 stringOut OUT 一个包含输入字符串的变量,其中输入字符串中 不允许在 URL 中出现的字符用其十六进制的转义值替换。

返回码

表 55. DTW_URLESCSEQ 返回码
返回码 说明
-1001 服务器不能处理 Net.Data 请求来分配内存。
1003 在函数调用时传递的参数数目或者超过了允许的最大数目,或者小于该函数必需的最小数目。
1005 传递给函数调用的参数应该是一个字符串变量,但实际上是另一个类型的变量。
1006 传递给函数调用的参数必须是一个输出参数,但实际上传递了一个文字串。

用法注意事项

使用此函数把表 56中列出的字符传递给另一个宏或 HTML 块。

表 56. 用于 URL 的字符转义值
字符 名称 代码
SPACE 空格 %20
" 双引号 %22
# 数值符号 %23
% 百分号 %25
& &符号 %26
+ 加号 %2B
\ 反斜杠 %2F
: 冒号 %3A
; 分号 %3B
< 小于 %3C
= 等于 %3D
> 大于 %3E
? 问号 %3F
@ @符号 %40
[ 左方括号 %5B
/ 斜杠 %5C
] 右方括号 %5D
^ ^符号 %5E
{ 左花括号 %7B
| 竖线 %7C
} 右花括号 %7D
~ ~符号 %7E

例 1:用转义值替换 string1 中的空格和“与”符号, 并把结果分配给 string2

@DTW_URLESCSEQ(string1,string2)

例 2:用转义代码替换空格和“与”字符。

@DTW_rURLESCSEQ("Guys & Dolls")

例 3:在 ROW 块中使用 DTW_rURLESCSEQ,并用转义代码替换空格和“@”符号。

%ROW{
<P><a href="fullRpt.mac/input?name=@DTW_rURLESCSEQ(V1)&email=@DTW_rULRESCSEQ(V2)">
$(V1)</a>
%}

当应用程序用户单击姓名“Patrick O'Brien”时,为该姓名指定的值和电子邮件地址将进入 URL 的查询 字符串中,它将使 Net.Data 执行 fullrpt.mac 宏的输入部分。


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