Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (中文) » MobiLink - 服务器启动的同步 » 用于服务器启动的同步的 MobiLink 服务器设置 » 通告程序事件 » 异步事件

 

confirmation_handler 事件

配置此事件处理由监听器上载的传送确认信息。如果状态参数返回 0,则由 request_id 标识的推式请求被由 remote_device 参数标识的监听器成功接收。

可以使用 request_option 参数启动操作以响应传送确认。如果 request_option 为 0,则 confirmation_handler 事件启动缺省操作,执行 request_delete 事件删除原始推式请求。如果发送传送确认的设备与 request_id 标识的设备不匹配,则缺省操作是通过辅助网关发送原始推式请求。

注意

使用 dblsn -x 选项允许监听器上载传送确认信息。如果需要传送确认但不需要 IP 跟踪,可使用 dblsn -ni 选项。请参见用于 Windows 的监听器选项

注意

此事件要求使用系统过程。不能使用 Sybase Central 方法直接配置此事件。请参见用于服务器启动的同步的 MobiLink 服务器设置

可以使用 confirmation_handler 事件捕获以下参数:

脚本参数 类型 说明
request_option (out) Integer

控制处理程序返回后通告程序对请求执行的操作。可以返回以下值:

  • 0:根据状态参数的值执行缺省通告程序操作。如果状态指示响应设备为目标一,则通告程序删除请求;否则通告程序尝试在辅助网关上进行传送。
  • 1:不执行任何操作。
  • 2:执行 Notifier.request_delete。
  • 3:尝试传送到辅助网关。
status (in) Integer

情况概览。可在开发过程中使用状态来确定问题,例如不正确的过滤器和处理程序属性。可以返回以下值:

  • 0:已接收并确认。
  • -2:正确响应但消息被拒绝。
  • -3:正确响应且消息被接受,但操作失败。
  • -4:错误响应而消息被接受。
  • -5:错误响应且消息被拒绝。
  • -6:错误响应。消息被接受且操作成功。
  • -7:错误响应。消息被接受但操作失败。
request_id (in) Integer 请求 ID。request_cursor 事件必须包含请求 ID 列才能使用 confirmation_handler 事件。
remote_code (in) Integer

远程监听器报告的汇总。可以返回以下值:

  • 1:消息被接受。
  • 2:消息被拒绝。
  • 3:消息被接受且操作成功。
  • 4:消息被接受但操作失败。
remote_device (in) Varchar 响应监听器的设备名。
remote_mluser (in) Varchar 响应监听器的 MobiLink 用户名。
remote_action_return (in) Varchar 远程操作的返回代码。
remote_action (in) Varchar 为操作命令保留。
gateway (in) Varchar 与请求关联的网关。
address (in) Varchar 与请求关联的地址。
subject (in) Varchar 与请求关联的主题。
content (in) Varchar 与请求关联的内容。
另请参见
示例

在以下示例中,您将创建一个名为 CustomConfirmation 的表,然后使用名为 CustomConfirmationHandler 的存储过程在其中记录确认。输出参数 request_option 始终设置为 0,表示使用缺省通告程序处理。

CREATE TABLE CustomConfirmation(
    error_code   integer,
    request_id   integer,
    remote_code   integer,
    remote_device  varchar(128),
    remote_mluser  varchar(128),
    remote_action_return varchar(128),
    remote_action  varchar(128),
    gateway   varchar(255),
    address   varchar(255),
    subject   varchar(255),
    content   varchar(255),
    occurAt   timestamp not null default timestamp
)

CREATE PROCEDURE CustomConfirmationHandler(
    out @request_option integer,
    in @error_code  integer,
    in @request_id  integer,
    in @remote_code  integer,
    in @remote_device  varchar(128),
    in @remote_mluser  varchar(128),
    in @remote_action_return varchar(128),
    in @remote_action  varchar(128),
    in @gateway   varchar(255),
    in @address   varchar(255),
    in @subject   varchar(255),
    in @content   varchar(255)
)

BEGIN
    INSERT INTO CustomConfirmation( 
        error_code,
        request_id,
        remote_code,
        remote_device,
        remote_mluser,
        remote_action_return,
        remote_action,
        gateway,
        address,
        subject,
        content)
    VALUES (
        @error_code,
        @request_id,
        @remote_code,
        @remote_device,
        @remote_mluser,
        @remote_action_return,
        @remote_action,
        @gateway,
        @address,
        @subject,
        @content
    );
    SET @request_option = 0;
END

要将 ml_add_property 系统过程与 SQL Anywhere 统一数据库一起使用,请运行以下命令:

call ml_add_property( 
    'SIS',
    'Notifier(myNotifier)',
    'confirmation_handler',
    'call CustomConfirmation(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)');

还可以通过将以下行添加到通告程序配置文件调用此事件:

Notifier(myNotifier).confirmation_handler = call CustomConfirmation(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)

使用 mlsrv11 -notifier 选项运行文件。有关如何配置通告程序配置文件的详细信息,请参见使用通告程序配置文件配置服务器端设置