實現業務規則的重要性
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同步時作為遠程數據庫,而在與小組成員同步時作為統一數據庫。