封裝清單、網站與可重複使用的工作流程以及套件方式
英文原文已於 2012 年 8 月 30 日星期四發佈
大家好,我叫 JongHwa Lim,是 SharePoint Designer (也稱做 SPD) 小組的專案經理。
我今天要介紹的這個功能,比起在 SharePoint Designer 2010 和 SharePoint Server 2010,又更加強了許多。它就是工作流程套件功能。在 SharePoint Designer 2010 用過這個功能的人都很清楚,要先在開發環境中開發一個工作流程,然後將它部署到實際執行環境。很可惜,壞消息是在 SharePoint Designer 2010 中,這個功能只支援可重複使用的工作流程類型。
在 SharePoint Designer 2013 以及 SharePoint Server 2013 和 Azure Workflow Service 中,現在我們三種工作流程類型全都支援 – 清單工作流程、網站工作流程和可重複使用的工作流程。這真是太棒了。這表示您不必再侷限於可重複使用的工作流程,為了此目的而必須把清單工作流程移轉到可重複使用的工作流程,也將成為過去式。
用例子來說明會清楚得多。我會建立一個工作流程範例,說明如何在目標網站中重複使用該工作流程。
範例:休假要求清單工作流程
假設您要在開發環境建立一個清單工作流程。這個工作流程有兩份清單:休假清單與休假要求清單。休假清單記錄所有員工剩餘的休假時數,休假要求清單則是讓要求者建立要求項目請求准假。
建立必要的清單 (開發環境)
我說過了我們需要兩份清單,所以我建立了如下兩份清單。請注意,對於「工作清單」和「歷程記錄清單」,我們將使用預設設定。
在休假要求清單建立清單工作流程
現在準備好了必要的清單,使用 SPD 連線至伺服器,按一下 [清單工作流程],然後選擇 [休假要求] 清單。您會看到下面這個對話方塊,輸入工作流程名稱後,確認您選擇的類型是 [SharePoint 2013 工作流程] (SharePoint 2013 Workflow)。
填入邏輯並發佈工作流程
在 SPD 畫布,您可以選擇文字型設計工具,如果您有安裝 Visio Professional,您也可以選擇視覺化設計工具來製作工作流程。在本篇部落格文章,我將使用文字型設計工具,如果您對視覺化設計工具有興趣,請參閱另一篇關於視覺化設計工具的部落格文章,該篇文章將於近日內發表。
請加入下列邏輯。整體而言,除了幾點以外,這個邏輯非常清楚易懂。它包含五個階段。每個階段的標題說明它的功用,但是為了把它說得更清楚,我做了以下說明:
- [檢查是否有剩餘休假] (Check if remaining vacation exists) 階段 – 擷取提案人的剩餘休假天數,與要求的休假天數互相比對
- [核准程序] (Approval Process) 階段 – 核准要求休假天數的要求
- [已核准] (Approved) 階段 – 核准後,以新計算出的值更新休假清單
- [已拒絕] (Rejected) 階段 – 傳送拒絕郵件
- [休假天數不足] (insufficient vacation) 階段 – 傳送郵件告知剩餘休假天數不足
比較複雜的是這些從休假清單擷取剩餘休假天數,或更新休假清單的查詢 UI。
如果 [項目建立時自動開始] 選項對您而言比較有用,您也可以選擇開啟該選項。
在您發佈工作流程的同時,也會建立工作流程關聯,而狀態欄會隱藏於幕後。
封裝清單至 STP 套件
要確保目標伺服器中有必要的清單和結構描述有很多方法,但使用 STP 套件不失為一個好辦法。所以,我們就將休假清單和休假要求清單封裝進 STP 套件。
您可以用伺服器 UI 或 SPD UI 來進行,如下所示。
然後,您會看到下面這個畫面,您可以在這裡輸入名稱以及選擇封裝內容。
請注意,無論您是否選擇 [包括內容] (Include Content),都不會一起封裝 SharePoint 2013 清單工作流程。
如果成功,會引導您到下載套件的位置。
按一下連結,並下載套件以便稍後使用。
如果成功,您現在應該有兩個 STP 套件,一個是用於休假要求清單的套件,另一個用於休假清單 (也就是包含剩餘休假天數的清單)。
封裝工作流程至 WSP 套件
若要封裝清單工作流程至套件,請前往工作流程摘要頁面,按一下功能區的 [另存範本] (Save as Template) 按鈕。
會出現如下對話方塊。
您可以在 [導覽] (Navigation) 窗格看到 [網站資產] (Site Assets) 庫,在這裡可以找到清單工作流程套件。(可能需要重新整理頁面,才會看到套件。)
使用功能表的 [匯出檔案] (Export File) 按鈕,將套件存到本機電腦。
部署 STP 套件
在瀏覽器開啟目標網站 (或實際執行環境),前往 [網站設定]。您會在 [網站設計工具圖庫] (Web Designer Galleries) 群組下看到 [清單範本] (List templates) 功能表。
用 [檔案] 功能表下的 [上傳文件],上傳這兩個 STP 套件。
使用已部署的清單範本建立清單
您可以從已部署的清單範本建立這兩個清單。請前往伺服器中導覽功能表的 [網站內容],按一下 [新增應用程式]。您應該會看到 [休假] (Vacation) 和 [休假要求] (Vacation Request) 圖示。
使用那些功能表建立 [休假] 和 [休假要求] 清單。
部署 WSP 套件並啟動套件
部署 WSP 套件和部署 STP 清單範本略有不同。您必須將它上傳到 [網站設定] 的 [網站設計工具圖庫] (Web Designer Galleries) 群組下的 [解決方案] (Solutions) 程式庫。
然後,會出現對話方塊提示您啟動套件 (解決方案) 的位置。
啟動功能
啟動解決方案後,您會在 [網站設定] 的 [網站動作] (Site Actions) 下的 [管理網站功能] (Manage site features) 裡看到一個新的網站功能。
就是它。您可以依據您將它裝進套件時使用的名稱找到這個工作流程。按一下 [啟動] (Activate) 按鈕,等到按鈕變成 [停用],或出現 [使用中] 圖示,就表示該功能已啟動。
(選用) 從 SPD 開啟工作流程
有些時候,您會想在目標網站更新工作流程。沒問題。它就和在開發環境中一樣。您會看到 SPD 中正確列出已部署好的工作流程。
開啟它不會有任何問題。您可以看到,在摘要頁面的值還是一樣。當然啦,邏輯也會好好保存。
(選用) 執行工作流程
從伺服器執行工作流程後,您會發現有兩個欄的名稱相同 (工作流程狀態欄)。這是一個已知的問題。一個欄是來自來源伺服器 (封裝於 STP 內),另一個欄則是建立於目標網站。請更新清單檢視,以將舊的欄隱藏。
使用 STP 套件以外的替代方案
只要目標網站有必要的清單:用於工作流程邏輯的清單,以及 [工作流程工作] 和 [工作流程歷程記錄] 清單,解決方案就能正常部署。但是最好能使用相同的清單範本和欄位類型,來建立清單和工作流程所參照的清單欄。如果類型不符,套件會在功能啟動時失敗,或是工作流程會在執行階段失敗。
如果部署工作流程套件的網站沒有 [休假] 或 [休假要求] 清單,會發生什麼事?
啟動網站功能會失敗。
這個錯誤訊息不是非常詳盡,但如果您查看 ULS 記錄,您會看見如下的提示:
「因為以下錯誤,工作流程 XAML 無法通過驗證:無法從文字 '$ListId:Lists/Vacation; 建立 'ListId'」
但是一旦功能啟動失敗,即使之後您建立了必要的清單,重新啟動該功能還是可能會再次失敗。這是因為工作流程定義部署不完整。您必須執行下列動作:
- 開啟 SPD,刪除在啟動功能時失敗的工作流程定義
- 停用並移除解決方案
- 上傳並啟動解決方案
- 啟動網站功能
這樣應該能解決這個問題。
已知問題
以下是工作流程套件的已知問題。
- 您必須確保相關清單的 URL 相同 (例如,[清單/休假])。即使您建立清單時用的是指定的名稱,之後已變更為其他名稱,清單的 URL 也不會改變,因為 URL 是根據原始顯示名稱。正因為如此,就算您是根據更新過的清單名稱來封裝工作流程,工作流程還是會根據目標網站中的舊名稱尋找清單 URL。因此,當您在目標網站中重新建立清單時,必須確認您一開始給清單的命名是原始名稱,而非更新過的名稱。這樣就能保留清單 URL。清單建立後,您就可以變更清單名稱為更新過的名稱。
- 含 Unicode 或 DBCS 名稱的工作流程會封裝進 WSP 檔案,預設的硬式編碼名稱為 ‘WorkflowSolution.wsp’
- 在您前往 [網站資產] 查看更新的解決方案清單後,您必須手動重新整理頁面。
- 如果目標伺服器沒有 [工作流程工作] 清單和 [工作流程歷程記錄] 清單,當您在 [工作流程設定] 頁面按下工作流程時,會顯示下方錯誤訊息。如果您部署工作流程的目標伺服器以前未曾建立過工作流程,就會發生這樣的狀況。因應之道是從 SPD 建立並發佈一個空的工作流程,以建立 [工作流程工作] 清單和 [工作流程歷程記錄] 清單。接下來您就可以從 SPD 開啟已部署的工作流程,調整 [工作流程工作] 清單和 [工作流程歷程記錄] 清單設定,並重新發佈工作流程。
- 專案工作流程的封裝方式就和一般網站工作流程相同。但是為了確保它能正常運作,您還必須封裝專案實體,例如 EPT、階段、自訂欄等。請參閱 Project 小組即將推出的專案工作流程指南。
謝謝您。
JongHwa
這是翻譯後的部落格文章。英文原文請參閱 Packaging List, Site, and Reusable Workflow and How to Deploy the Package