当 MobiLink 服务器使用 upload_fetch 脚本检测到冲突后,将发生以下事件。
MobiLink 服务器按照 upload_old_row_insert 脚本的定义插入从远程数据库上载的旧行值。通常将旧值插入到临时表中。
MobiLink 服务器按照 upload_new_row_insert 脚本的定义插入从远程数据库上载的新行值。通常将新值插入到临时表中。
MobiLink 服务器执行 resolve_conflict 脚本。在此脚本中,您可以调用存储过程,或定义一系列步骤以便使用新行值和旧行值来解决冲突。
有关详细信息,请参见resolve_conflict 表事件。
在下面的示例中,您将为 6 个事件创建脚本,然后创建一个存储过程。
在 begin_synchronization 脚本中,创建两个名为 contact_new 和 contact_old 的临时表。(也可在 begin_connection 脚本中执行此操作。)
upload_fetch 脚本检测到冲突。
当存在冲突时,upload_old_row_insert 和 upload_new_row_insert 脚本将使用从远程数据库中上载的新旧数据来填充这两个临时表。
resolve_conflict 脚本调用存储过程 MLResolveContactConflict 来解决此冲突。
事件 | 脚本 | ||
---|---|---|---|
begin_synchronization |
|
||
upload_fetch |
|
||
upload_old_row_insert |
|
||
upload_new_row_insert |
|
||
resolve_conflict |
|
||
end_synchronization |
|
存储过程 MLResolveContactConflict 如下:
CREATE PROCEDURE MLResolveContactConflict( ) BEGIN --update the consolidated database only if the new contact date --is later than the existing contact date UPDATE contact c SET c.contact_date = cn.contact_date FROM #contact_new cn WHERE c.id = cn.id AND cn.contact_date > c.contact_date; --cleanup DELETE FROM #contact_new; DELETE FROM #contact_old; END |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |