E.2. 登录脚本 Tcl 命令和过程

随 SGD 提供的登录脚本使用多个 Tcl 命令和过程与应用服务器进行通信。

Tcl 命令是在 SGD 的执行协议引擎组件中定义的命令。这些命令可以用在您自己的登录脚本中,用于控制与应用服务器的连接以及 SGD "Application Authentication"(应用程序验证)和 "Progress"(进度)对话框的显示方式。

Tcl 过程只在登录脚本中定义。这些过程可用于提供对 SGD "Application Authentication"(应用程序验证)对话框的更多控制。

E.2.1. 控制 SGD "Application Authentication"(应用程序验证)对话框

以下 Tcl 命令和过程用于在启动应用程序时控制 SGD "Application Authentication"(应用程序验证)对话框的显示方式:

authrequest

authrequest
 [ -normal | -changed ]
   -showuser 0|1
   -showpasswd 0|1
   -title title
   -message message
   -customuserlabel 0|1
   -userlabel label
   -custompasswdlabel 0|1
   -passwdlabel label
   -showpasscache 0|1
   -showsmartcard 0|1
   -isuserdialog 0|1|2

此 Tcl 命令显示一个对话框,指明用户名或密码的问题。

通常不在登录脚本中直接调用 authrequest 命令,而是使用已定义的 Tcl 过程并提供所需的参数来调用此命令。

此命令有以下参数。

参数

描述

-normal

指明密码不正确。

-changed

指明密码已过期。

-showuser

指定显示用户名字段。

-showpasswd

指定显示密码字段。

-title

指定验证对话框所使用的标题。

-message

指定验证对话框中所显示的消息。

-customuserlabel

指定是否为用户名字段使用定制标签。

-userlabel

指定用户名字段要使用的定制标签。

-custompasswdlabel

指定是否为密码字段使用定制标签。

-passwdlabel

指定密码字段要使用的定制标签。

-showpasscache

指定是否显示 "Save This Password"(保存此密码)复选框。

-showsmartcard

指定是否显示智能卡选项。

-isuserdialog 0|1|2

指定是否使用定制的验证对话框。

指定以下选项之一:

  • 0-不检查用户名是否已更改

  • 1-检查用户名是否已更改并在需要时重新连接到应用服务器

  • 2-如果用户名已更改,使用默认的 SGD 行为

以下示例显示一个对话框,指明密码不正确。

authrequest -normal

authenticate

显示一个对话框,指明用户名或密码问题。

此 Tcl 过程使用以下选项调用 authrequest 命令。

authenticate [ -normal | -changed ]

以下示例显示一个对话框,指明密码不正确。

authenticate "-normal"

authenticate2

显示一个对话框,指明用户名或密码问题。您可以使用自己定义的对话框标题并显示自己定义的消息。还可以控制是否显示用户名和密码字段。

此 Tcl 过程使用以下参数调用 authrequest 命令。

authenticate2
 [ -normal | -changed ]
   -showuser 0|1
   -showpasswd 0|1
   -title title
   -message message

以下示例显示一个指明密码已过期的对话框,并显示用户名和密码字段。

authenticate2 "-changed" "1" "1" "" ""

customauthenticate

显示一个对话框,指明用户名或密码问题。您可以全面定制验证对话框。

在此过程中,执行协议引擎不检查用户在用户名字段中键入的文本。如果使用安全 Shell (Secure Shell, SSH) 作为应用程序的连接方法,并且用户更改了用户名,则执行协议引擎不会中断连接并以新用户名重新连接。这将导致应用程序无法启动。因此,如果使用了 SSH 并允许用户更改其用户名,请改为使用 userauthenticate 过程。

此 Tcl 过程使用以下参数调用 authrequest 命令。

customauthenticate
 [ -normal | -changed ]
   -showuser 0|1
   -showpasswd 0|1
   -title title
   -message message
   -customuserlabel 0|1
   -userlabel label
   -custompasswdlabel 0|1
   -passwdlabel label
   -showpasscache 0|1
   -showsmartcard 0|1

以下示例显示一个密码字段使用定制标签的对话框。

customauthenticate "-normal" "0" "1" "" "" "0" "" "1" "Enter your password:" "0" "0"

userauthenticate

显示一个对话框,指明用户名或密码问题。您可以全面定制验证对话框。

除了要检查用户是否已更改其用户名之外,此过程与 customauthenticate 相同。如果用户名已更改,执行协议引擎将会中断与应用服务器的连接并以更改后的用户身份重新连接。

此 Tcl 过程使用以下参数调用 authrequest 命令:

userauthenticate
 [ -normal | -changed ]
   -showuser 0|1
   -showpasswd 0|1
   -title title
   -message message
   -customuserlabel 0|1
   -userlabel label
   -custompasswdlabel 0|1
   -passwdlabel label
   -showpasscache 0|1
   -showsmartcard 0|1

以下示例在检查用户名是否更改之后,显示一个密码字段使用定制标签的对话框。

userauthenticate "-normal" "0" "1" "" "" "0" "" "1" "Enter your password:" "0" "0"

E.2.2. 控制 SGD "Progress"(进度)对话框

以下 Tcl 命令用于在启动应用程序时控制 SGD "Progress"(进度)对话框的显示方式:

loaderror

loaderror error

您可以使用此 Tcl 命令覆盖登录脚本所返回的错误消息。例如,可以使用此功能将标准登录脚本的错误消息替换为您自己定义的消息。如果应用程序无法启动,将在进度对话框和日志文件中显示错误。请参见第 E.5 节 “登录脚本错误消息”

clienttimer

clienttimer [ time ] [ message ] [ timers ]

此 Tcl 命令会在指定的 time(时间)内在进度对话框中显示 message(消息)。进度指示条上有 timers(计时器)部分,显示所有计时器。以下是一个示例。

clienttimer 10 "Launching the application" 4

canceltimer

canceltimer

此 Tcl 命令用于取消 clienttimer 命令。此命令没有参数。

progress

progress [ message ]

此 Tcl 命令在进度对话框中显示 message(消息)。以下是一个示例。

progress "Initializing..."

E.2.3. 控制与应用服务器的连接

以下 Tcl 命令用于控制与应用服务器的连接:

setbuffer

setbuffer [ -buffer num ] [ -output 0|1 ]

此 Tcl 命令定义要从应用服务器读取的字节数。

参数

描述

-buffer num

指定字节数。默认值为 1。

-output 0|1

打开 (1) 或关闭 (0) 输出。默认值为 1。

以下是一个示例。

setbuffer -buffer 1000

locallaunch

locallaunch [ -start ] [ -abort ] [ -user launchspec -root launchspec ]

当应用服务器同时也是 SGD 服务器时,可使用此 Tcl 命令启动应用程序。这称为优化启动

参数

描述

-start

启动优化启动。

-abort

停止优化启动并恢复为标准连接方法。

-user launchspec

定义当用户不是 UNIX 或 Linux 平台的 root 用户时,用于启动 SGD 服务器上的应用程序的连接方法。

可以为启动后分离的应用程序(后台应用程序)以及不分离的应用程序(前台应用程序)指定不同的行为。

launchspec 可以是以下选项之一:

  • 0-使用为应用程序对象定义的连接方法启动所有应用程序

  • 1-后台应用程序使用 /bin/su。前台应用程序使用应用程序对象的连接方法

  • 2-后台应用程序使用应用程序对象的连接方法。前台应用程序使用 /bin/su

  • 3-使用 /bin/su 启动所有应用程序

默认值为 1

-root launchspec

定义当用户是 UNIX 或 Linux 平台的 root 用户时,用于启动 SGD 服务器上的应用程序的连接方法。

可以为启动后分离的应用程序(后台应用程序)以及不分离的应用程序(前台应用程序)指定不同的行为。

launchspec 可以是以下选项之一:

  • 0-使用为应用程序对象定义的连接方法启动所有应用程序

  • 1-后台应用程序使用 /bin/su。前台应用程序使用应用程序对象的连接方法

  • 2-后台应用程序使用应用程序对象的连接方法。前台应用程序使用 /bin/su

  • 3-使用 /bin/su 启动所有应用程序

  • 4-使用为应用程序对象定义的连接方法启动所有应用程序

默认值为 3

以下是一个示例。

locallaunch -abort

tarantella

tarantella -nosocket -portnumber num -thirdtiershell shell

此 Tcl 命令用于配置与应用服务器的连接。在使用 sgdconnect 命令前,必须配置连接。

参数

描述

-nosocket

指定应用程序将要通过其他某种方法启动,并且必须由创建脚本的人实现,例如,通过使用 Expect 的 spawn 命令。这仅适用于不需要永久连接的应用程序,例如 X 应用程序。如果您有一个特殊的应用服务器,或者您需要与现有的应用程序启动机制进行集成,则此命令非常有用。

-portnumber num

覆盖用于与应用服务器建立连接的端口。如果使用此选项,必须在执行 sgdconnect 命令前执行 tarantella 命令,否则将忽略端口号。

-thirdtiershell shell

指定应用服务器上要使用的 shell,例如 /bin/sh

以下示例通过 TCP 端口 5999 连接到应用服务器。

tarantella -portnumber 5999

sgdconnect

sgdconnect

指示使用执行协议引擎连接到应用服务器。此命令没有参数。

大多数 SGD 登录脚本使用 sgdconnect 建立连接。如果您要自己处理与应用服务器的连接,必须确保脚本中未使用此命令。

wcpwts.exp 标准登录脚本是一个不使用此命令连接到应用服务器的登录脚本例子。