距離上次gMIS/吉密斯的更新差不都有半年過去了,這期間gMIS部署和使用的場景進一步擴大。最近又有新的部署并使用,在更新維護的同時,也有增加新功能,比如這次比較重要的一點是進一步地深化和加強了擴展行為操作的使用。情況較復雜,茲詳述如下,以備忘。
gMIS/吉密斯 是“通用管理信息系統(tǒng)“軟件,當我們有底氣說“通用”的時候,意味著這個系統(tǒng)可以管理任何基于關系數據庫所管理的數據,為這些數據提供面向非技術人員的人性化的操作和使用數據的途徑。關系數據庫,技術人員能耳熟能詳地列出 Oracle、MySQL、SQLServer、SyBase等,其也是當今信息化的基礎設施之一。通用的面向技術人員的,各種數據庫的客戶端,無論是基于命令行的還是基于GUI的(包括App和Web, 如 Navicat、PHPMyAdmin等),都有不少選擇。而能夠基于原始數據,直接產生能夠面向非技術人員的,類似產品并不多,我們說“通用”,是我們創(chuàng)建了一套方法,可以針對任意指定的“字段”,無論其什么數據類型,我們都能夠在gMIS/吉密斯中配置出契合其特點的輸出/輸入接口/界面,也即我們的 extra目錄,插件式的工作,通過指定配置信息,無論這個字段是讀寫數據、字符串、選擇項、文件、層級目錄、編輯器等,均能應付自如。當一種新的數據類型、接口、界面被需要時,我們可以再通過extra方式制作并嵌入進去,這就是當我們說“通用”的底氣。
一直以來,gMIS/吉密斯秉持這種“通用性”工作良好。
然而,我們深知,多樣性、豐富性和復雜性才是世界的本原,我們以“通用”立命題就有某種抗自然規(guī)律的沖動,這種帶有某種邪乎勁的要“包治百病”式的做法,會讓人擔憂,也令人不解。畢竟,這世界上沒有包治百病的良藥。
Fig.1 數據庫數據表示層級
深度地解析,上述“通用性”是建立在對“字段”這一級別的操作上,也即,可以應對所有數據類型的字段進行操作,按照通常的數據組織結構劃分 “數據庫 — 數據表 — 記錄 — 字段”(Fig.1),我們實現了在“字段”級的“通用性”操作。
如果多樣性和豐富性的需要是針對“記錄(Row)”這一級別呢?
目前針對“記錄”的操作,我們有規(guī)定的動作“add、modify、view、print、delete、search(insite, pickup)、pivot、export、copy”等,如果要增加一種或多種針對“記錄”的操作,該如何操作?這種需求合理嗎?常見嗎? 需要被滿足嗎? 能被滿足嗎? 如果能,該如何實現在“記錄”層級的“通用性”?
最早我們設想,幾乎所有共用的操作,針對一條數據(Row)的操作也就這么多,除了增刪改查這四項基本的,我們已經很豐富地增強提供了其他多項。然而,誠如前所言,多樣、豐富和復雜的客觀世界,可能會有更多種針對一條數據的操作需求。這種需求是合理的,也是客觀的描繪世界的必需項。這樣的設計應該被滿足。
初次遇到這樣的需求,并令我們面對和思考這樣的問題是在進行 工作流 的設計和制作上。工作流的本質也是對Row為單位的數據進行操作,但其動作已經超過了對Row本身的操作,而是Row之間發(fā)生了關系,也即一條Row可能從用戶A流轉到用戶B,然后用戶B將該Row流轉到用戶C等等,依此類推,而且還可能針對Row產生不同的修改。
為了滿足這種需求,我們設計并實現了第一版的 ActOption 標記,這一個版本的 ActOption 在數據表的 table節(jié)點配置,并輸出綁定到 act/view 界面上. 詳細記錄參考:
[2016] -gMIS 更新多庫連接及工作流workflow
[2018] –gMIS吉密斯更新Workflow工作流、FileMgr文件柜及GTAjax等模塊
這些實踐,為我們最終打開 gMIS 好好與這個世界的大門,既然 ActOption 可以一種配置文件的形式嵌入到 act/view 中,那距離出現在 list 主頁面的 彈出式菜單中也只有一步之遙。如果實現了某種針對 Row級別的操作,既能出現在 act/view 的窗口,也能夠出現在 list主頁面的彈出式菜單中,與 常規(guī)的 addmodifyviewprint等相并列,則gMIS/吉密斯就具有了好好與這個世界對話的強大話語表達能力。
于是沿著這個思路,近期我們突破了自我局限,將 ActOption 的配置通過 ido, jdo, comm/ido.js 等修改實現了自動添加到 list 主頁面的 彈出式菜單,與常規(guī)操作 view/modify/print 等并列。其實現方式亦頗為曲折,大致流程可以描述為:
基于 table 的xml配置信息,配置某個