实现业务规则的重要性
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同步时作为远程数据库,而在与小组成员同步时作为统一数据库。 |
阅读(542) | 评论(0) | 转发(0) |