SQL Anywhere Studio MobiLink 之(2)

来源:岁月联盟 编辑:zhuzhu 时间:2007-08-06

实现业务规则的重要性

 

MobiLink的一个主要优点是具有利用其事件驱动的架构定制同步过程的能力。您能够提供自定义脚本为任何特殊事件指定相应处理方法。MobiLink 提供了非常精细的控制;比如说,在涉及100个表的同步过程中,差不多有数千个不同的事件可用。当然,大多数事件无需脚本,采用默认操作即可;在本案例中,为以下事件编写了自定义脚本:

 

事件名称 脚本用途 upload_insert 为每一个表指定如何处理每一个已上传的插入 upload_update 为每一个表指定如何处理每一个已上传的更新 upload_delete 为每一个表指定如何处理每一个已上传的删除 upload_statistics 为每一个表记录上传行数 begin_download 确定要下载的表和行的集合 download_cursor 为每一个表选择下载的行 download_delete_cursor 为每一个表选择要从远程数据库删除的行的主键 end_download 记录哪一个表和行的集合在变更前不需下载 download_statistics 为每一个表记录所下载的行数 handle_error 对可能发生的特定错误进行特殊处理

 

完善的应用程序通常在同步过程上运用复杂的业务规则,Mobile Inspector也不例外。为业务规则使用的MobiLink脚本就像“仅District Supervisors可获得District Supervisor Inspection表中的行”一样直观,当然也可实现更复杂的规则。例如,以下download_cursor脚本选择Inspect 行的规则为:该行(1)被分配给特殊检查小组,并且(2a)尚未被下载,或(2b)自上次下载后已更新。此脚本中的SELECT语句使用 BRI_RECD_SYNC_IDS 表识别已分配给该小组的行;而之前更长的begin_download脚本动态填充该表,从而使其可在类似于本例所示的脚本中使用:

 

SELECT BRI_INSPCTN.INSPCTN_ID, BRI_INSPCTN.STRCTR_ID, BRI_INSPCTN.INSPCTN_DT, ... BRI_INSPCTN.APRVL_DT FROM WIGINS_UNIT.BRI_INSPCTN WHERE EXISTS ( SELECT * FROM WIGINS_UNIT.BRI_RECD_SYNC_IDS, WIGINS_UNIT.BRI_TMP_SYNC_VRBLS WHERE BRI_TMP_SYNC_VRBLS.SESSION_ID = TO_NUMBER ( USERENV ( SESSIONID ) ) AND BRI_RECD_SYNC_IDS.GLOBAL_DB_ID = BRI_TMP_SYNC_VRBLS.GLOBAL_DB_ID -- for this remote AND BRI_RECD_SYNC_IDS.STRCTR_ID = BRI_INSPCTN.STRCTR_ID -- matches on structure id AND BRI_RECD_SYNC_IDS.INSPCTN_ID = BRI_INSPCTN.INSPCTN_ID -- matches on inspection id AND ( BRI_RECD_SYNC_IDS.FRST_DOWNLOAD_TS = '1900-01-01' -- not yet been downloaded OR BRI_INSPCTN.LST_MDFD_TS >= ? ) )-- updated since the last synch

 

 

MobiLink服务器调用Mobilink脚本,但实际上由中心或“统一”数据库服务器执行脚本,并为MobiLink服务器往返传递行。NC DOT 使用两组Mobilink服务器和两组脚本实现三层数据库架构。在最上面的一级,用Oracle PL/SQL编写的脚本运行于中心的Oracle 9i服务器;上例为此类脚本之一。行被传递到中心站点处运行的Mobilink服务器,并从那里传递到检查办公室的小组负责人的平板电脑上。

 

 

 

在现场,有另一个在每位小组负责人的平板电脑上运行的Mobilink服务器。该服务器调用运行在同一台电脑上的ASA数据库服务器中的SQL脚本;这些行传递到MobiLink服务器,并从那里通过无线连接传送给小组成员。通过这样的设置,小组负责人的数据库在以Oracle同步时作为远程数据库,而在与小组成员同步时作为统一数据库。 (责任编辑:卢兆林)