InfoPath單表單審批流程(2)


本文繼續上一篇文章,講解采用Infopath+QuickFlow開發單表單流程時,如何允許任務操作人直接編輯InfoPath表單。

在最新版的QuickFlow發布包中,有2個InfoPath示例文件:InfoPathDocV1.xsn和InfoPathDocV2.xsn, InfoPathDocV1.xsn是為了兼容老版本功能保留下來的,新的流程建議大家都采用InfoPathDocV2的格式。

我們先打開InfoPathDocV2,點擊右鍵->設計. 可以看到表單中有個QuickFlow節點,當infopath表單在QuickFlow的任務頁面中顯示的時候,任務頁面代碼就會控制QuickFlow節點下的字段值,更因為如此,QuickFlow節點下的這些字段一般都要存在,而且類型一定要正確。

以下是各字段的說明:

字段

類型

用處

ReadOnlyInTaskMode 

boolean

設置表單在任務頁面是否只讀,若允許任務頁面編輯表單,必須設置此字段為false

ShowDefaultTaskRegion

boolean

設置是否顯示默認的任務編輯面板。在上一篇中我們看到了默認任務面板的樣子,這個是非InfoPath的內容,如果想要在InfoPath中自己設計任務面板,則設置此字段為false

CurrentStep

String

獲取當前工作流步驟,若活動設置了TaskStep則為TaskStep的值,否則為活動名,表單中的規則可以通過此字段獲取到工作流的狀態。

TaskMode

boolean

獲取當前表單是否是在任務模式—即通過任務編輯頁面查看表單。若是任務模式,則其值為true。否則,如直接在表單庫中單擊查看表單,則此值為false。通過這個字段,表單規則可以控制任務模式和查看模式采用不同的視圖。

CommitTask 

boolean 

若隱藏默認的任務面板,自己在InfoPath中添加了任務審批按鈕,則在按鈕的單擊規則中,可以設置此值為false或true,來控制是暫存任務還是完成任務

FormHandler 

string 

InfoPath里可以直接寫代碼,但是,如果你不想在InfoPath中寫代碼,而表單處理邏輯又非常復雜怎么辦?你可以自定義一個類,繼承於QuickFlow.UI.FormService.InfoPathTaskFormHandlerV2,在類中可以在任務提交后對表單字段做各種操作。編譯成dll部署到GAC,然后把類的全名配置在FormHandler即可。

QuickFlow節點下的TaskItem子節點用於跟任務字段的映射,在表單展現的時候,TaskItem下的各個字段值都會對應到當前任務的字段中,如果任務內容類型有擴展的字段,也可以配置在這里。只有在任務模式下,TaskItem下字段的值才會有意義。

字段

類型

說明

ID 

Int

任務ID

Title 

String

任務標題

Outcome

String

獲取或設置任務的結果,也就是審批結果(通過,打回等),在提交任務按鈕規則設置CommitTask字段值為true的時候,必須設置此字段值為相應的審批結果,否則工作流中無法獲取到審批結果。

Comment 

String 

審批意見。可以把此字段直接拖放到表單上,用於輸入審批意見

UserLoginName 

String 

獲取任務操作用戶賬號

UserName 

String 

獲取任務操作用戶顯示名

StartDate 

日期和時間

獲取任務開始時間

CompleteDate 

日期和時間

獲取任務完成時間

Status 

String 

獲取任務狀態

QuickFlow節點下的TaskHistory子節點用於存放流程的所有審批任務信息。這個節點直接引用了TaskItem節點,操作方法:

右鍵選中TaskHistory,選擇引用…,瀏覽到TaskItem節點,確定,然后編輯屬性,確保TaskHistory/TaskItem節點允許重復

如果要直接在InfoPath表單中顯示歷史審批信息(或其他人的審批意見),則可以直接把TaskHistory/TaskItem拖到表單,作為重復表顯示,當然,TaskHistory應該是只讀的,所有要設置重復表的每個字段為只讀

以上大量的篇幅講解了QuickFlow節點下字段的用處,可以看到這個節點的結構還是很復雜的。如果是創建新的表單,建議直接采用修改V2示例的方式來開始。

下面我們就來看如何將上一章的流程改造成表單可編輯。

在考慮這個示例的時候,我糾結了幾分鍾,因為QuickFlow節點確實夠復雜的,我又比較懶,即不想在已有的表單中添加那么多節點,也不想重新畫個表單,而且安裝包里的V2是基於InfoPath2010的,InfoPath07打不開,我的環境現在只有SharePoint2007,怎么辦?

好在QuickFlow在InfoPath表單處理的時候還是比較靈活的,如果把QuickFlow下的所有子節點都添加完了,那么可以享有QuickFlow任務頁面針對InfoPath的所有處理,比如自動把任務字段信息同步到TaskItem節點,自動把完成的任務累加到TaskHistory節點,但是如果我們不想要這些功能,那么只去要添加幾個必要的字段即可。

編輯上章的InfoPath文件,添加下圖所示的字段:ShowDefaultTaskRegion值為true,ReadOnlyInTaskMode值為false。TaskItem是個空的組,必須存在。重新發布表單。

現在啟動流程,編輯任務,可以看到表單已經可以編輯了.

好,到此為止,一個最簡單的允許任務頁面編輯InfoPath的示例已經完成了。這個示例采用一個表單,一個視圖,直接在任務頁面把表單顯示為可編輯模式,通過表單外部的默認任務面板保存表單和提交任務。

有同學可能會發現一個小bug,咦~怎么編輯任務的時候還有個Submit按鈕呢?這個就留給各位同學去研究怎么去掉吧,提示下:可以在表單的Submit按鈕的提交規則中加一個規則,設置一個字段的值,如(IsSubmit=true),標識表單已經提交過了,然后設置Submit按鈕的Condition Format(條件格式),當IsSubmit==true時,隱藏此按鈕即可。

這個示例跟V2表單的實現是有區別的,V2表單展示的是一種更復雜的情況:

  1. 采用多個視圖,每步審批任務可能有不同的視圖(可以控制視圖部分可編輯),在表單加載規則中,按照CurrentStep的值切換不同的視圖。
  2. 隱藏默認任務面板,把任務審批界面直接在表單中設計,審批意見綁到TaskItem/Comment字段,給每個提交按鈕加規則,控制TaskItem/Outcome的值來傳遞審批結果
  3. 將TaskHistory/TaskItem 用重復表顯示.

相信通過這篇文章加上以上三點說明,各位同學對V2表單的理解應該會比較透徹了,下一章針對V2表單模式的教程是否有必要寫就看情況了。

本文示例下載:https://skydrive.live.com/redir?resid=7F5A25CDF47D03E6!1558


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM