Collection Contents 上一页 下一页 PDF

MobiLink 管理指南

同步事件

new_row_cursor 表事件(不建议使用)


功能 

定义插入游标,MobiLink 同步服务器用该游标插入新行值,这些值在远程数据库中已经更新,但它们与当前统一数据库中的值相冲突。

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

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

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

无。

说明 

在远程数据库上更新行时,MobiLink 客户端将保存原始值的副本。客户端将数据的旧值和新值一同发送到 MobiLink 同步服务器。也用于在强制冲突模式中输入 INSERT 操作。

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

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

使用临时表存储冲突行的新旧版本是常用的做法。您可以在前一个脚本中创建这些临时表。

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

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

注意 
如果为同一个表定义了下列任一脚本,则该脚本将被忽略:upload_insert、upload_update、upload_delete、upload_fetch、upload_new_row_insert、upload_old_row_insert。
另请参见 
SQL 示例 

下面的 SELECT 语句定义了适用于 CustDB 示例应用程序的 new_row_cursor 脚本。

call ml_add_table_script(
  'ver1',
  'table1',
  'new_row_cursor',
'SELECT order_id, cust_id, prod_id, emp_id,
    disc, quant, notes, status
  FROM ULNewOrder FOR update')

ULOrder 表的主键是 order_id。

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

SELECT user_name, order_id, cust_id, prod_id,
    emp_id, disc, quant, notes, status
  FROM ULNewOrder FOR update
Java 示例 

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

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

call ml_add_java_table_script(
  'ver1',
  'table1',
  'new_row_cursor',
  'ExamplePackage.ExampleClass.newRowCursor' )

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

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

Collection Contents 上一页 下一页 PDF