一步一步學習sharepoint2010 workflow 系列第二部分:SharePoint無代碼工作流 第7章 自定義表單的基礎知識(Custom form fundamentals)

本章涵蓋
■使用InfoPath自定義開箱即用的表單
■發佈表單模板到表單庫
■映射表單數據到列
■自定義的啓動和關聯表單

 

工作流和表單是一個功能強大的組合因爲大多數業務流程都是用表單形式。爲了有一個全面瞭解如何構建自定義SharePoint工作流,你需要只奧如何建立自定義表單和建立它們可用的工具。

三種類型的工具可以在SharePoint中建立自定義表單:開箱即用表單(自動生成),InfoPath表單和ASP.NET表單。 重要的是要知道何時使用每種類型和他們的利弊。例如,你可以完成一個大量處理的通過開箱即用表單,而沒有想用更高級的工具 例如Infopath或者ASP.NET。使用開箱即用的表單工作是簡單而且快速的,節省了你的時間和成本。正因爲如此,它是一個好的選擇。 但是,缺點是有時需要使用InfoPath,我們將在本章討論進一步的細節。因爲ASP.NET表單是一個編程的主題,它們將在第9章涵蓋。 

有了這些工具,它們是許多使用表單去建立工作流解決方案包括自定義開箱即用表單,使用表單庫 ,啓動和關聯表單在SPD工作流等的基礎。在這一章中,你將去類似發佈自定義表單到表單庫, 更新一個庫默認模板,和製作共享模板應用到更多的庫等。

7.1 使用工具去建立自定義表單(tools used  to build custom forms)

 開箱即用表單幫助用戶編輯列表項和SharePoint數據,並有有限的自定義設置功能,而InfoPath表單帶來深層次的自定製。ASP.NET表單內置在Visual Studio用於更多技術複雜的表單。當你設計你的工作流解決方案,認真評估表單技術的利弊。提前考慮你的表單需求,可以節省時間和不必重寫的功能。

7.1.1 新建和編輯表單 (New and Edit Forms)

 開箱即用表單在你的依賴的列表上生成,而Infopath和ASP.NET表單,你需要一步一步的建立.

 考慮在SharePoint中創建新列表或者庫,並添加工作流到列表上。大多數情況下,當你創建一個新的自定義列表或庫,你會去添加自定義列到列表或庫上。當一個項被創建這些元數據將駐留在列表或庫上。在一個列表上,你有機會去輸入這些元數據通過開箱即用表單,在你點擊新建按鈕時(圖7.1)。

 圖7.1

 如果它被創建,你可以去編輯它。圖7.2

 圖7.2

  這兩個按鈕帶你到自動生成表單輸入數據的地方。它自然能去啓動工作流在列表項上去響應創建新項或者編輯存在的項.

 很複雜的自定義工作流表單使用自動生成表單將不能工作,至少它只需要幾分鐘就可以添加。

讓我們快速瀏覽你可以添加到開箱即用的列表類型,並且怎麼自動生成表單的。表7.1和圖7.3說明了這點。 

表7.1 

 

  7.3

 

很容易的可以看到這些開箱即用表單豐富的功能。如前所述,工作流可能在列表項或文檔的創建時開始, 所以該項的元數據通過表單輸入後,將隨時付諸行動。 

在一個自定義SPD工作流,你可以檢查自定義列的數據通過If Current item field equals value 的條件。 使用此條件(圖7.4),你可以選擇你想要的當前項字段和比較的另外的字段. 

 圖7.4

 

 同樣,在Visual Studio工作流在表單上輸入的列表項數據很容易的提供給程序員和工作流.

爲什麼不適用開箱即用 任何時候都可以使用表單嗎? 

表7.1顯示數據類型能被使用,但是如果你想複選框代替單選按鈕? 或者你需要更詳細的說明,標誌,或者圖形在表單上做出更多的吸引的圖形?或者在下拉列表框的數據可能需要來自 外部的業務數據。對於這些例子,開箱即用表單就不行了。表7.2顯示開箱即用的利弊。

 

表7.2 

 

 

7.1.2 InfoPath2010的表單( InfoPath 2010 forms)

 InfoPath帶來很多能力,以提供更先進的解決方案需求。需求例如從Web Service拉出業務數據,動態的控件過濾,和表單字段高級驗證提交能容易的完成。另外的優點是你有很多需要去建立獨特的,品牌化的用戶界面,讓最終用戶更容易的理解和使用。毫無疑問這些信息能編成一本書,但是我們會看到幾個最常用的技術在本章的示例中。

InfoPath表單能駐留在像一個叫做表單庫的文檔中。雖然並非總是如此,這是最常見的InfoPath場景。 表單庫是文檔庫,但是他們有InfoPath的連接器和專門設計的內部表單。這樣,InfoPath彌補了開箱即用表單, 因爲編輯表單勝於新建表單,你現在將直接編輯Infopath表單。當你保存或提交以一個表單在表單庫, 默認情況下,這些表單上的數據存儲到像XML的庫。

另外一種方式是InfoPath和SharePoint列表交互通過自定義的列表或者庫新建和編輯表單。當你自定義開箱即用表單, 這些表單上的數據總是被映射到列表中的列或者庫,而前面的例子,表單本身是被上傳到表單庫作爲附件,並且 該附件包含了XML數據. 

所以你怎麼知道當自定義開箱即用表單使用了表單庫?考慮你將交互多少數據。如果你自定義開箱即用表單, 你需要保存每一個數據。如果你使用表單庫,這些數據在表單中保存成XML,所以你不需要去保存更多的數據, 使用表單庫比創建許多列更好。表7.3顯示利弊 

表7.3 

 

 

瀏覽器-啓用InfoPath表單和依賴 

InfoPath客戶端是一個客戶端應用程序,像Microsoft Word是一個客戶端應用程序。你可以使用客戶端去設計或編輯表單模板, 當然你也可以使用客戶端去填充和提交表單。 SharePoint兩個主要的版本是SharePoint Foundation和SharePoint Server。SharePoint Server是附加在SharePoint Foundation上的。 該附加包含一個叫做Form Server啓用InfoPath表單去填充和從窗口瀏覽器中顯示。如果沒有SharePoint服務器,你只能使用Infopath客戶端應用程序。顯然,這可能會出現問題。最好的途徑就是你的公司購買SharePoint服務器版本。

7.1.3(使用Visual Studio建立ASP.NET表單) ASP.NET forms built in Visual Studio 

你想需要表單定製的最大靈活性嗎?你現在的表單和代碼是很久之前建立的,你想進行重建嗎? 你是ASP.NET程序員嗎?誰沒有興趣學習InfoPath?如果以上的問題,你都說是的,你將很開心 的聽到ASP.NET表單仍然在SharePoint2010發揮着作用。例如,你能替換新建和編輯開箱即用的表單通過自定義的ASP.NET 表單。 你可以自定義的ASP.NET表單嵌入在現在的WebPart中。當一個用戶提交表單,你可以使用SharePoint對象模型去添加一個新的列表項 ,並啓動該項上的工作流。欲瞭解更多信息,請參閱第9章. 

 儘管能支持複雜的自定義,但是ASP.NET表單的增長越來越少因爲InfoPath的來到提供了多功能並且簡單的工具。而ASP.NET,你需要從頭開始,但是InfoPath只需要有控件和嚮導就能幫助你添加所需的功能到你的表單。因此,ASP.NET的主題不在本章中詳解,這裏只提供一般的優點和利弊(表7.4)。

表7.4 

 

 

7.2(使用InfoPath自定義開箱即用表單) Customizing out-of-the-box forms with InfoPath 

 InfoPath2010中的一個新功能使自定義自動生成的開箱即用的表單。即時你選擇開箱即用的途徑,後來你又需要更多的功能,你可以自定義這些表單通過InfoPath。這節將引導你通過自定義開箱即用表單的步驟。

在表單庫中使用表單和使用InfoPath去自定義開箱即用新建和編輯表單的數據存儲方法顯然不同。 表單庫中的表單存儲數據像XML是上傳文檔到庫。當你自定義開箱即用表單,這些數據仍需要映射到列表項的列。 如果你有良好的數據處理,你可能會想到表單庫的路線,而不是增加20個列到列表項。你可能想改變一個列或兩個列的行爲,或者 一個公司的品牌標誌或者更細節的介紹。在這種情況下,自定義開箱即用表單是很好的方法。 

 當需要自定義開箱即用表單時SharePoint Server平臺是必須的 本節只適用於SharePoint2010服務器版本

 開始時,首先創建一個SharePoint列表或庫,並在這個列表上添加所有的你需要跟蹤的列。你可以通過列表設置,然後添加列選項。然後你未你的數據需求設置你的列,編輯表單去滿足你的用戶界面需要。在Ribbon(功能區)列表選項卡,你可以使用自定義列表下拉列表框,並選擇自定義表單(圖7.5)去啓動InfoPath。

 圖7.5

 

示例中你將去建立包括一個任務列表,以及每個任務關聯的項目和子項目。我們怎麼去做關聯項目動態改變, 當你選擇一個項目,子項目下拉列表框將改變它的項基於選擇的父項目。圖7.6顯示當首次打開顯示的任務表單是什麼樣子的。 注意父項目和子項目將會改變。 

 圖7.6

  其實說白了就是表單聯動,可以使用(省、市)或者(年紀、班級)來做示例。

Parent Project列是一個查找列,查找一個叫Project Names的列表。Sub Project是另一個查找列,查找另外一個叫 Sub project Names的列表。Sub Project Names列表有兩個列,Title和Parent Project。繼續之前,設置兩個Project Nemas 和Sub Project Names 列表像之前的描述一樣。然後,添加一個Project name查找列和一個Sub Project Name查找列到一個任務列表。 最後編輯開箱即用表單在InfoPath中像圖7.5的編輯 。

要使Sub Project 下拉列表在你的任務表單中動態變化,選擇它的項目基於它的Parent Project如何選擇的。 首先,創建一個新的數據源爲Sub Project 下拉列表框。下拉列表框默認數據源只包含兩個字段,title和ID。 因爲你需要去過濾Parent Project列,添加一個新的數據源。然後,過濾數據源通過parent Project的選擇。 最後,設置一個規則在Parent Project下拉列表框上,去確定數據源在每次下拉的時候更新。通過表7.5的步驟 你將做到這點。 

 表7.5

 

 

 

 

 

現在所身下的是發佈表單到你的任務列表。在文件菜單下的信息選項卡,點擊快速發佈。現在,當你去創建一個新任務在你的任務列表, Sub Project下拉列表將動態改變基於Parent Project的選擇(圖7.7) 

 圖7.7

只允許數字的錯誤  

如果你得到這個粗無哦說只允許數字,你想保存字符串到一個列期望是存儲數字的。最有可能是Sub Project下拉列表框的值 被設置成字符串了,因爲列是查找列,它需要被數字替代。要解決這個錯誤,請右擊Sub Project下拉列表框選擇屬性。 然後Entries的條目,更改值從d:Title到d:ID。之後重新發布你的表單,表單應妥善保存。

 

7.3 發佈模板到表單庫(Publishing a template to a form library

我們已經結束了關於如何自定義開箱即用表單一節,現在去仔細看錶單如何與表單庫工作的。當一個用戶在一個表單庫填充一個表單, 新的表單(例如,XML文檔)是創建在該庫關聯的表單模板。這個模板默認是空白的並且不是可用的。本節介紹如何建立一個你 自定義表單模板和更新默認模板通過你的自定義模板。 

 將InfoPath表單模板放入一個表單庫的方法很多。你可以發佈表單模板直接從InfoPath客戶端到SharePoint。或者從SharePoint,你可以瀏覽你的硬盤,並選擇表單模板。無論你選擇哪種,你需要如何是你需要的。你想表單模板值用在一個庫或者你想你的最終用戶可以使用去創建新表單在整個網站集的表單模板上?如果你需要一個全局部署表單模板,你將需要發佈表單模板到一個內容類型(見節7.4);否則更新開箱即用模板就足夠了。

當表單像公司開支報告僅需要添加和編輯在一個表單庫中,更新一個表單庫的開箱即用表單模板是最簡單的辦法。 如果你需要一個表單模板被跨越多個表單庫共享,詳見節7.4.在你編輯表單模板之前,你需要按照以下步驟創建一個表單庫: 

1 導航到你的SharePoint站點。  

2 在Site Actions菜單,點擊more options.

3 一個彈出框將出現(圖7.8)。在左側導航,點擊Library。

4 在中心導航,選擇Form Library。

5 提供一個唯一的名字爲表單庫,然後點擊創建。

 圖7.8

 

現在你有了一個表單庫,讓我們看一下如何更新庫表單模板。如果你點擊新建文檔按鈕,你將獲取一個空的表單。你可以確定哪個模板被使用通過導航到庫的高級設置。在Ribbon,點擊庫設置,並點擊高級設置。注意默認模板是存儲在一個表單文件夾中。圖7.9顯示現在你需要的更新。

 圖7.9

 更新這個表單,點擊在Template URL下面的Edit Template鏈接。這將在InfoPath2010 Designer客戶端加載一個空的表單。這個界面是空白的,並且有一個灰色的背景。你需要從無到有的去創建你的表單。按照這些步驟去設置一個基本的費用報告模板爲你的公司:

1 默認情況下,你頁面模板只有標題。按照這些步驟將添加標題和主體頁面模板到這個表單。點擊頁面設計選項卡在加載的InfoPath表單。 在頁面佈局模板,選擇標題和主體。  

2給你的表單一個標題,例如SP WFiA Expense Report,和一個描述。

3 點擊標題下面,並通過主頁選項上的控件菜單添加一個重複表格。選擇一個三列的表格。

4 填充重複表列名,例如Date of Expense,Dollar Amount,和Description。 5 保存模板到你的個人電腦硬盤通過點擊保存圖標。

當你完成後,你的表單將看起來像圖7.10 

 圖7.10

 

InfoPath最佳實踐:命名你的基本數據描述 圖7.10 顯示一個在InfoPath上的示例表單的建立。當建立InfoPath表單, 重點是要確保你的字段命名是有意義的。默認情況下,當你添加一個字段到表單,這個字段名字叫field1,field2,以此類推。 當你保存表單到SharePoint,數據時存儲到XML中的。如果你的所有數據都是像field1這樣的通用名稱,你的XML理解起來會很困難。 你將在第9章學習如何以編程的方式訪問InfoPath表單數據。你的數據的準確命名將很有幫助。圖7.12顯示所有數據重新命名 將建立一個堅實的XML結構,圖7.11(默認)將產生令人費解的XML數據。 

 圖7.11    圖7.12

 

 

現在你有了你喜好的模板,你需要發佈表單到表單庫。點擊InfoPath的文件菜單並選擇快速發佈(圖7.13)。發佈完成之後,回到表單庫測試表單。點擊新文檔按鈕,自定義的費用開支模板將出現。

 圖7.13

 

 在這裏使用快速發佈因爲你從表單庫本身打開一個空白的模板表單,InfoPath知道它該覆蓋哪個庫的模板。如果你喜歡,你可以發佈到不同的表單庫。當你第一次打開InfoPath Designer,你可以從一個叫做SharePoint表單庫選擇多個模板。如果你創建一個新表單模板,你將是重複之前相反的順序。而不是首先創建一個表單庫,並在高級設置中點擊編輯模板。你首先要做的是從頭創建模板,然後選擇一個表單庫發佈。

在這種情況下,快速發佈將不可用。相反,在文件菜單,發佈選項卡下面,有另外的選項去發佈到SharePoint服務器(圖7.14)。 這個動作將加載一個嚮導貫穿整個發佈過程。點擊SharePoint 服務器按鈕進行發佈。按照表7.6的步驟,你會將你的表單發佈到不同的表單庫。 

 圖7.14 

 表7.6

 

 

7.4 發佈表單模板到內容類型(Publishing a template to a content type )

 你已經爲單個的表單庫定製了表單模板。如果你需要在同一個網站集的多個庫中使用模板,最好的辦法是發佈模板到內容類型。無論內容類型是添加到一個表單庫,這個模板將也可以添加到庫。

內容類型在這種情形下是有幫助的:你有部門站點在站點集中,它們是一個銷售的站點,另一個市場的,和第三個是人力資源的。 這些站點需要自己的費用開支庫因爲每個部門的批准人不同,你可以創建費用開支內容類型安裝就可以了。然後,你可以添加內容類型到 每個部門的表單庫。在這個例子中,如果你需要在6個月後更新模板,這個改動將會被傳播到每個庫。

返回第一章:內容類型

在第一章中,你學習了內容類型能被使用去封裝工作流,模板和元數據的可重用工作流在真個站點集上。創建內容類型 爲了節省你的時間,因爲你有10個表單庫都需要相同的模板,元數據和工作流,你可以添加內容類型到這些庫上。 如果你不要使用內容類型,你將需要去添加模板,列和工作流到10個庫上,將耗費很多時間和努力去維護。

要發佈內容類型,你將使用發佈到SharePoint服務器功能。替代選擇發佈到表單庫,你要創建一個新的內容類型(表7.7) 

表7.7 

 

 

 

 

 7.5 映射表單數據到列(Mapping Form data to columns)

 我們已經討論完如何自定義開箱即用表單以及如何使用表單庫去存儲自定義表單數據。如果你記得,當你自定義開箱即用表單,數據時保存到列表項上的列上的,而你工作在一個表單庫,數據時存儲XML表單數據本身的。麻煩是保持所有的數據爲XML你將無法進行派訊,篩選和分組數據。也許你想分類所有你的開支費用報告通過開支類型(例如,油耗,午餐,和旅費)。這是通過添加一個字段到InfoPath表單並映射字段到SharePoint列表來完成的,讓你能排序,過濾和分組在這個列上。從某種意義上來說,表單庫和映射列是兩全其美的。你可以存儲大量數據到表單,並提取你的用戶感興趣的數據到列表項。

 爲了說明這個概念,我們回到SPWFiA Expense report去添加一個新的下拉列表(用戶可以指定開支類型)。此外,你要添加另一個字段將包含所有費用的總和(計算總和的邏輯在第9章的第1節討論)。你將重新發布表單到SharePoint,這時映射你的新列到表單庫,最終用戶可以排序,篩選和分組。按照表7.8去添加你的兩個新的數據塊到expense report 表單。

表7.8 

 

 

當你完成後,你的表單看起來像圖7.15

 圖7.15

 不是使用快速發佈,這次的發佈需要很長的路要走,並添加你的ExpenseType和TotalAmount字段映射到列表項。這將給你排序你的expenses通過totalAmount和通過expenseType進行過濾的能力。發佈表單通過點擊發布-》SharePoint Server,並指定SharePoint站點的URL。之後要決定你要直接發佈到庫或者到一個內容類型。無論哪種情況,你可以映射數據到列。當你獲得步驟在嚮導說明“以下列出的列表字段將在列上可用...",點擊添加按鈕,並添加ExpenseType和TotalAmount字段(圖7.16)點擊下一步,並完成發佈.

 圖7.16

 

在最近更新的表單庫,你將注意到兩個心裏惡。如果你創建一個新的expense report並輸入幾個費用。然後你保存並關閉表單,你將發現expense type和total amount字段將寫入到他們相應的列(圖7.17)。這些數據映射到這些列,你可以很方便的去排序,過濾和分組。此外,你可以使用SharePoint Designer工作流去響應提交,特別哪些指定的字段,如果適當。

 圖7.17

 

在節9.1例子更進一步。在這時,總金額不會自動計算。在第9章,你將添加一些.NET代碼到表單去計算這些值的開支總和。有了這些代碼, 提交者就不需要手動計算了. 

 

 7.6 (SharePoint Designer 工作流中的表單)Forms in SharePoint Designer workflows

 你可以使用InfoPath去自定義啓動和關聯表單在SharePoint Designer工作流。默認情況下,當一個SharePoint Designer工作流首次啓動,啓動表單會顯示給用戶,但是僅僅只有兩個按鈕顯示,並且表單是空白的。用戶能確認或取消開始的工作流通過這兩個按鈕。關聯表單顯示給用戶當他們添加工作流到一個列表,而啓動表單顯示是當工作流啓動時。

默認情況下,啓動表單包含開始和取消按鈕(圖7.18)。在一些情況下你可能需要去收集信息從用戶在工作流開始之前。你也可能需要添加 信息給表單去幫助理解工作流是如何工作的。 

 圖7.18

  當你需要去收集信息從用戶在工作流開始前,你可以使用啓動表單參數。他們是輸入字段顯示在啓動表單上。之後工作流啓動,這些參數 是我們可用的在工作流中。這些啓動表單參數是類似局部變量。添加參數到啓動表單很簡單;點擊Ribbon上啓動表單參數按鈕, 在可以打開關聯和啓動表單參數的對話框(圖7.19)

 圖7.19

 

點擊添加按鈕將允許你去添加新字段到表單(圖7.20)。你選擇的字段類型將決定列設置上可用,之後你點擊下一步。對於列表工作流,你可以只創建啓動表單因爲SharePoint Designer將自動關聯工作流到你選擇的列表。對於可重用或者站點工作流,你要指定關聯參數。  圖7.20顯示一個下拉列表在這裏你指定參數顯示在-啓動,關聯或者兩者都有。

 圖7.20

之後添加啓動參數到工作流,用戶將能夠與它們互動當手動啓動工作流從一個列表項。圖7.21顯示發佈之後啓動表單上的啓動參數.

 圖7.21

 

 爲了幫助你理解在SharePoint Designer中的啓動表單的概念,要通過一個示例工作流零件的庫存處理請求。工作流很容易的使用在汽車修理店,在管理零部件的數量,並僱用工作流去處理它們修理部分的順序請求。

 示例將從一個自定義列表名字叫Parts Inventory進行工作流。Parts Inventory列表將有三個列,名字叫Part name,Quantity available,和Base cost。你希望一個流程使你的用戶去請求額外的零件當供應成本低的時候。然後,根據成本和他們定義的數量,不同審批者將被分配。

當用戶啓動庫存請求工作流,他們將看見一個自定義啓動表單提供他們去輸入訂購零件的數量。 這個時候啓動表單將派上用場。

要設置這個例子,首先通過創建一個新的SharePoint列表標題叫Parts Inventory有三個列。這個列表將存儲零部件,並駐入工作流。 然後,在SharePoint Designer創建一個新的列表工作流。打開SharePoint Designer去你創建Parts Inventory列表的站點,在工作流選項卡, 點擊列表工作流並選擇你的自定義列表。在這時,你將被提示輸入標題和描述爲你的工作流。輸入Parts Request workflow到標題,並點擊確定。 在工作流中,通過指定你的啓動表單數據啓動工作流 表7.9. 

 表7.9

 

 

現在指定的啓動參數,用戶將看到一個表單當他們開始工作流時。表單將要求他們去輸入他們訂購的零件的數量。現在添加業務邏輯到你的工作流。 讓我們使用計算(Do Calculation)動作去計算請求的成本。你可以添加一個If-Else塊到計算如果總成本超過$1000,如果只這樣需要經理Joe Bob批准。另外Fred Fredrickson是經理助理,也可以批准。按照表7.9的步驟設置這個動作和條件。 

 

表7.9續

 

 

 圖7.22

 表7.9續

 

 

現在你有了工作流的基礎,發佈和測試啓動表單。點擊保存按鈕去保存工作流,然後點擊發布按鈕去發佈工作流到Parts Inventory 列表。 在列表上,選擇一個列表項,並啓動parts request工作流。工作流不會立即開始,你將被提示需要填寫表單。直到你點擊”開始“按鈕纔會開始。 對於我們的工作流,你會看到圖7.23. 

 圖7.23

 之後你點擊開始按鈕,工作流將執行計算決定批准的順序,並且emial將被髮送到相應的審批者。現在完成此表格之前,你需要回去,並且定製。表單有最小的數字字段,但是它不直觀。按照表7.10的步驟編輯表單使直觀顯示給用戶.

表7.10

 

之後你發佈你的表單,它看起來像圖7.24.這是一個通用的例子,但是不要被矇騙,因爲你可以做許多很強大的事情通過InfoPath在你的初始化表單。 人們通常用他來填充下拉列表從外部數據(包括第6章的例子) 

 圖7.24

 

 

 

 

下一章

一步一步學習sharepoint2010 workflow 系列第三部分:自定義SharePoint代碼工作流 第8章 自定義Visual Studio工作流(Custom Visual Studio workflows)

 

 

 

 

 

本人聲明

 

  本博客內的文字和圖片除標明出處和轉貼的外,均系本人原創作品,如轉載或使用,不是用於盈利目的,盡請使用,但請註明引自這裏和作者的名字;有商業用途的,請與本人聯繫,協商後再作使用,否則我將採取法律手段維護自己的利益。謝謝合作。[email protected] 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章