什麼是“商務活動”,我認為是對活動在業務層面上的更高的抽象,就好像我們提物件導向時將子類的公用方法提取到抽象類別中一樣,我們將活動在業務上的公用提取到“商務活動”上。“商務活動”建立在“商務程序”之下,是對流程更細一層的業務抽象。一個“商務活動”可以對應一個具體流程中的多個相同業務概念的活動,也可以對應在同一“商務程序”下的多個具體流程中同一業務環節的多個活動。
這樣我們在為商務程序建模時,首先是定義“商務程序”,其次應該是識別流程中有哪些“商務活動”,並為“商務活動”定製一些屬性,最後才是定義具體的流程。使用一套已經建立好了的“商務程序”來定製流程就變得非常的輕鬆,流程上關聯商務程序,活動上關聯商務活動,這樣所有與業務相關的屬性就都可以設定好。
先前版本的工作流程將活動上不管是與業務相關的,還是與流程相關的屬性一齊混雜在流程設計器上。這種實現方式有幾大弊端:1、無法實現同一業務概念的複用,在一個活動上定的業務概念,需要在另一個相同業務意義的活動上原封不同的重定一遍。雖然我們實現了活動的複製,但我認為這種複製不是解決這種業務意義複用的很好方式。2、所有的與業務相關的實體都是獨立於工作流程系統之外的,在定義流程時將這些業務實體的設定記錄在流程定義中。由於流程的版本控制,先前已經啟動並執行流程定義是無法改變的,而業務實體又可能是會發生變化的,如單據的欄位許可權變化了(對於自訂表格單這樣生來就是為適應變化的,就更容易發生變化了),構件的參數又增加了一個等等,致使流程運行時業務上的改變得不到及時的體現,甚至運行不下去。3、流程運行結果,更通俗的講可能是審批的結論、意見不能根據業務意義進行分類,明顯的體現是審批結果列印時,所有的意見結論都羅列在一起(這個需求來源於OA項目組)。
哪些活動屬性應該放到“商務活動”上,我認為表單定義、表單使用權限設定(動作許可權、欄位許可權),其他象外部工具、規則等也可以考慮放進來。
工作流程可以無區別的對待普通流程和OA使用的動態流程的使用權限設定,都包括表單參數設定、表單動作許可權的設定、表單欄位許可權的設定。
值得一提的是,像加簽、會簽、跳轉等許可權,我認為是純粹的流程許可權,不應該去表單的許可權混為一談,可以強制識別這些的流程引擎提供了的流程動態功能,並為其設定許可權。
對特殊性、向下相容的考慮,在流程定義上仍然保留這些在“商務活動”添加的屬性,在使用時首先尋找具體活動上的定義,再尋找商務活動上的定義。這樣的同一“商務活動”對應的活動也可以有完全不同的特性,而且對於老版本的流程定義,即使沒有在活動上關聯商務活動,仍可以正常運行。