在開發查看流程表單明細的時候,在Web界面中,我們往往通過使用@RenderPage實現頁面內容模塊化的隔離,減少複雜度,因此把一些常用的如審批、撤銷、會簽、閱辦等等的流程步驟都放到了通用處理的頁面ViewDetail.cshtml裡面實現了。那麼如果在一些特殊的表單處理過程中,我們在審批完成後需要... ...
在開發查看流程表單明細的時候,在Web界面中,我們往往通過使用@RenderPage實現頁面內容模塊化的隔離,減少複雜度,因此把一些常用的如審批、撤銷、會簽、閱辦等等的流程步驟都放到了通用處理的頁面ViewDetail.cshtml裡面實現了。那麼如果在一些特殊的表單處理過程中,我們在審批完成後需要觸發一個事件來修改一些業務表的數據的處理的話,就會變得麻煩起來,通用的處理就代表要損失一部分靈活性,特殊性。那是否可以通過一些處理,能夠實現這些特殊更新的操作呢?本篇隨筆介紹的就是這個方面,實現流程完成後更新資料狀態處理。
1、頁面的模塊關係
之前我在隨筆《在Bootstrap開發框架的前端視圖中使用@RenderPage實現頁面內容模塊化的隔離,減少複雜度》裡面已經介紹過,對於這種有著共同內容的頁面,我們可以把它提取出來,然後在主頁面裡面使用@RenderPage的方式進行包含進來,這樣有助於我們模塊化的處理。
上面通用的處理內容,全部在Apply/ViewDetail.cshtml頁面裡面。
它的頁面內容,主要是封裝一些常規的界面和處理腳本。
也就是對於一些如資產領用或者資產處置的界面,它都是包含這些基礎流程顯示的界面和處理邏輯的。
查看具體流程表單明細的界面如下所示。
或者資產領用表單的查看界面如下所示。
2、腳本的模板化處理,實現子類函數的差異性
在查看信息的頂部有對應的流程處理按鈕,如果用戶是流程參與人,那麼可以執行相關的處理。
審批是一個通用的常規處理操作,彈出界面需要錄入處理意見,以及下一步流程的處理人員,如下界面所示。
既然我們需要在一些業務表單結束後,觸發一些後處理的事件來實現我們所需要數據的更新操作,那麼我們可以通過使用Javascript的模板化方法的設計模式來實現我們需要的處理。
首先我們在通用處理的模塊頁面裡面,定義好我們需要的函數,可以保留它不做任何事情,僅僅定義一個空殼函數就可以,不過需要在調用它的地方加上這個函數即可,而差異處理的不同,則讓子類頁面重載它的函數就可以實現差異性的模板方法模式。
例如我們在Apply/ViewDetail.cshtml頁面,這個通用頁面是相當於基類界面了,定義它的函數處理如下所示。
//審批處理後的執行操作 //該操作一般發生在申請單完成後,需要修改業務表單數據的情況 //該函數預設為空,具體邏輯給子視圖頁面ViewDetail.cs裡面實現 function ToCompletedForm() { console.log("ToCompletedForm");//留待子類重寫函數 }
而在可能需要進行後續處理的地方,調用這個方法,以完成它的調用邏輯。
以上就是處理流程的時候,增加上這個函數處理方法的調用,其他地方如果是類似的場景,則類似處理即可。
然後,我們不同的子類頁面,重寫好自己的處理函數就可以覆蓋基類的函數ToCompletedForm的處理邏輯了。
以上是資產領用流程的一個處理步驟,其中主要就是在流程結束的時候,完成一些數據更新和狀態的處理操作。
以上就是對於表單完成後的一些特殊處理的實現方法,在流程結束的時刻,我們可以做更多的相關後臺處理邏輯,都可以這樣統一在一個後臺方法中處理。
這樣通過這種方式實現的邏輯,不影響頁面的關係和處理過程,僅僅是我們在子頁面裡面重寫一下處理規則即可,如果不需要,也可以不重寫,不影響整個處理過程。