Collection Contents 上一页 下一页 PDF

MobiLink 管理指南

同步事件

old_row_cursor 表事件(不建议使用)


功能 

定义游标,MobiLink 同步服务器用该游标插入旧行值,这些值在远程数据库中已经更新,但它们与当前统一数据库中的值相冲突。该事件也用于在强制冲突模式中插入删除的行值。

对上载使用基于语句的事件 
已不支持使用此脚本。请用基于语句的事件 upload_old_row_insert。将来的版本中很可能会删除对 old_row_cursor 事件的支持。
参数 

在下表中,[说明] 部分提供 SQL 数据类型。如果您使用 Java 或 .NET 编写脚本,则应该使用相应的数据类型。请参见 SQL-Java 数据类型SQL-.NET 数据类型

参数 说明
1 ml_username VARCHAR(128)
缺省操作 

无。

说明 

在远程数据库上更新行时,MobiLink 客户端将保存原始值的副本。客户端将数据的旧值和新值一同发送到 MobiLink 同步服务器。

在 MobiLink 同步服务器接收到更新的行时,它会使用 upload_cursor 事件将原始值与统一数据库中的当前值进行比较。如果旧的上载值与统一数据库中的当前值不匹配,则该行发生冲突。MobiLink 同步服务器将分别使用 old_row_cursor 事件和 new_row_cursor 事件将旧值和新值插入到统一数据库中,而不是更新该行。

使用临时表存储冲突行的新旧版本是常用的做法。在 Adaptive Server Anywhere 中,您可以在前一个脚本中创建这些表。某些非 ASA 统一数据库支持临时表,但它们通常明显不同于 ASA 提供的临时表。有关详细信息,请参见您的 DBMS 文档。可以使用具有用于 MobiLink 用户名的额外列的基表代替临时表。这将在并发同步间有效地区分基表的行。

MobiLink 同步服务器使用游标将旧的上载值从冲突行插入到统一数据库。该脚本中包含用于定义此游标的 SELECT 语句。

您可以为远程数据库的每个表编写一个 old_row_cursor 脚本。

通常,SELECT 列表中的列必须与客户端表中的列具有相同的顺序和类型。但 MobiLink 同步服务器允许额外添加一列。如果您额外添加了一列,MobiLink 同步服务器将自动向第一列中插入用户名,接着继续照常使用其余的列插入新的行值。

另请参见 
SQL 示例 

下面的 SELECT 语句定义了适用于 Oracle 安装的 CustDB 示例应用程序的 old_row_cursor 脚本。ULOrder 表的主键是 order_id。

call ml_add_table_script(
  'ver1',
  'table1',
  'old_row_cursor',
'SELECT order_id, cust_id, prod_id, emp_id,
    disc, quant, notes, status
 FROM ULOldOrder')

而下面的 SELECT 语句将用于相同的客户端表。这种情况允许额外添加一列。MobiLink 同步服务器将自动在第一列中存储用户名。

SELECT user_name, order_id, cust_id, prod_id,
    emp_id, disc, quant, notes, status
 FROM ULOldOrder
Java 示例 

此脚本必须返回有效的 SQL。

下面的存储过程调用在同步脚本版本 ver1 时将名为 oldRowCursor 的 Java 方法注册为 old_row_cursor 事件的脚本。

call ml_add_java_table_script(
  'ver1',
  'table1',
  'old_row_cursor',
  'ExamplePackage.ExampleClass.oldRowCursor' )

下面是示例 Java 方法 oldRowCursor。它通过调用 Java 方法动态生成旧行游标语句。

public String oldRowCursor()
{  return( getRowCursor( _curTable ) ); }

Collection Contents 上一页 下一页 PDF