英文原文已於 2012 年 8 月 30 日星期四發佈

大家好,我叫 JongHwa Lim,是 SharePoint Designer (也稱做 SPD) 小組的專案經理。jonghwal's pic

我今天要介紹的這個功能,比起在 SharePoint Designer 2010 和 SharePoint Server 2010,又更加強了許多。它就是工作流程套件功能。在 SharePoint Designer 2010 用過這個功能的人都很清楚,要先在開發環境中開發一個工作流程,然後將它部署到實際執行環境。很可惜,壞消息是在 SharePoint Designer 2010 中,這個功能只支援可重複使用的工作流程類型。

在 SharePoint Designer 2013 以及 SharePoint Server 2013 和 Azure Workflow Service 中,現在我們三種工作流程類型全都支援 – 清單工作流程、網站工作流程和可重複使用的工作流程。這真是太棒了。這表示您不必再侷限於可重複使用的工作流程,為了此目的而必須把清單工作流程移轉到可重複使用的工作流程,也將成為過去式。

用例子來說明會清楚得多。我會建立一個工作流程範例,說明如何在目標網站中重複使用該工作流程。

範例:休假要求清單工作流程

假設您要在開發環境建立一個清單工作流程。這個工作流程有兩份清單:休假清單與休假要求清單。休假清單記錄所有員工剩餘的休假時數,休假要求清單則是讓要求者建立要求項目請求准假。

建立必要的清單 (開發環境)

我說過了我們需要兩份清單,所以我建立了如下兩份清單。請注意,對於「工作清單」和「歷程記錄清單」,我們將使用預設設定。

clip_image001

clip_image002

在休假要求清單建立清單工作流程

現在準備好了必要的清單,使用 SPD 連線至伺服器,按一下 [清單工作流程],然後選擇 [休假要求] 清單。您會看到下面這個對話方塊,輸入工作流程名稱後,確認您選擇的類型是 [SharePoint 2013 工作流程] (SharePoint 2013 Workflow)。

clip_image003

填入邏輯並發佈工作流程

在 SPD 畫布,您可以選擇文字型設計工具,如果您有安裝 Visio Professional,您也可以選擇視覺化設計工具來製作工作流程。在本篇部落格文章,我將使用文字型設計工具,如果您對視覺化設計工具有興趣,請參閱另一篇關於視覺化設計工具的部落格文章,該篇文章將於近日內發表。

請加入下列邏輯。整體而言,除了幾點以外,這個邏輯非常清楚易懂。它包含五個階段。每個階段的標題說明它的功用,但是為了把它說得更清楚,我做了以下說明:

  • [檢查是否有剩餘休假] (Check if remaining vacation exists) 階段 – 擷取提案人的剩餘休假天數,與要求的休假天數互相比對
  • [核准程序] (Approval Process) 階段 – 核准要求休假天數的要求
  • [已核准] (Approved) 階段 – 核准後,以新計算出的值更新休假清單
  • [已拒絕] (Rejected) 階段 – 傳送拒絕郵件
  • [休假天數不足] (insufficient vacation) 階段 – 傳送郵件告知剩餘休假天數不足

圖像

clip_image005

比較複雜的是這些從休假清單擷取剩餘休假天數,或更新休假清單的查詢 UI。

clip_image006

clip_image007

如果 [項目建立時自動開始] 選項對您而言比較有用,您也可以選擇開啟該選項。

clip_image008

在您發佈工作流程的同時,也會建立工作流程關聯,而狀態欄會隱藏於幕後。

封裝清單至 STP 套件

要確保目標伺服器中有必要的清單和結構描述有很多方法,但使用 STP 套件不失為一個好辦法。所以,我們就將休假清單和休假要求清單封裝進 STP 套件。

您可以用伺服器 UI 或 SPD UI 來進行,如下所示。

clip_image009

clip_image010

然後,您會看到下面這個畫面,您可以在這裡輸入名稱以及選擇封裝內容。

clip_image011

請注意,無論您是否選擇 [包括內容] (Include Content),都不會一起封裝 SharePoint 2013 清單工作流程。

如果成功,會引導您到下載套件的位置。

clip_image012

按一下連結,並下載套件以便稍後使用。

如果成功,您現在應該有兩個 STP 套件,一個是用於休假要求清單的套件,另一個用於休假清單 (也就是包含剩餘休假天數的清單)。

封裝工作流程至 WSP 套件

若要封裝清單工作流程至套件,請前往工作流程摘要頁面,按一下功能區的 [另存範本] (Save as Template) 按鈕。

clip_image013

會出現如下對話方塊。

clip_image014

您可以在 [導覽] (Navigation) 窗格看到 [網站資產] (Site Assets) 庫,在這裡可以找到清單工作流程套件。(可能需要重新整理頁面,才會看到套件。)

使用功能表的 [匯出檔案] (Export File) 按鈕,將套件存到本機電腦。

clip_image015

部署 STP 套件

在瀏覽器開啟目標網站 (或實際執行環境),前往 [網站設定]。您會在 [網站設計工具圖庫] (Web Designer Galleries) 群組下看到 [清單範本] (List templates) 功能表。

clip_image016

用 [檔案] 功能表下的 [上傳文件],上傳這兩個 STP 套件。

clip_image017

使用已部署的清單範本建立清單

您可以從已部署的清單範本建立這兩個清單。請前往伺服器中導覽功能表的 [網站內容],按一下 [新增應用程式]。您應該會看到 [休假] (Vacation) 和 [休假要求] (Vacation Request) 圖示。

clip_image018

使用那些功能表建立 [休假] 和 [休假要求] 清單。

部署 WSP 套件並啟動套件

部署 WSP 套件和部署 STP 清單範本略有不同。您必須將它上傳到 [網站設定] 的 [網站設計工具圖庫] (Web Designer Galleries) 群組下的 [解決方案] (Solutions) 程式庫。

clip_image019

然後,會出現對話方塊提示您啟動套件 (解決方案) 的位置。

clip_image020

啟動功能

啟動解決方案後,您會在 [網站設定] 的 [網站動作] (Site Actions) 下的 [管理網站功能] (Manage site features) 裡看到一個新的網站功能。

clip_image021

就是它。您可以依據您將它裝進套件時使用的名稱找到這個工作流程。按一下 [啟動] (Activate) 按鈕,等到按鈕變成 [停用],或出現 [使用中] 圖示,就表示該功能已啟動。

clip_image022

(選用) 從 SPD 開啟工作流程

有些時候,您會想在目標網站更新工作流程。沒問題。它就和在開發環境中一樣。您會看到 SPD 中正確列出已部署好的工作流程。

clip_image023

開啟它不會有任何問題。您可以看到,在摘要頁面的值還是一樣。當然啦,邏輯也會好好保存。

圖像

(選用) 執行工作流程

從伺服器執行工作流程後,您會發現有兩個欄的名稱相同 (工作流程狀態欄)。這是一個已知的問題。一個欄是來自來源伺服器 (封裝於 STP 內),另一個欄則是建立於目標網站。請更新清單檢視,以將舊的欄隱藏。

使用 STP 套件以外的替代方案

只要目標網站有必要的清單:用於工作流程邏輯的清單,以及 [工作流程工作] 和 [工作流程歷程記錄] 清單,解決方案就能正常部署。但是最好能使用相同的清單範本和欄位類型,來建立清單和工作流程所參照的清單欄。如果類型不符,套件會在功能啟動時失敗,或是工作流程會在執行階段失敗。

如果部署工作流程套件的網站沒有 [休假] 或 [休假要求] 清單,會發生什麼事?

啟動網站功能會失敗。

clip_image025

這個錯誤訊息不是非常詳盡,但如果您查看 ULS 記錄,您會看見如下的提示:

「因為以下錯誤,工作流程 XAML 無法通過驗證:無法從文字 '$ListId:Lists/Vacation; 建立 'ListId'」

但是一旦功能啟動失敗,即使之後您建立了必要的清單,重新啟動該功能還是可能會再次失敗。這是因為工作流程定義部署不完整。您必須執行下列動作:

  • 開啟 SPD,刪除在啟動功能時失敗的工作流程定義
  • 停用並移除解決方案
  • 上傳並啟動解決方案
  • 啟動網站功能

這樣應該能解決這個問題。

已知問題

以下是工作流程套件的已知問題。

  • 您必須確保相關清單的 URL 相同 (例如,[清單/休假])。即使您建立清單時用的是指定的名稱,之後已變更為其他名稱,清單的 URL 也不會改變,因為 URL 是根據原始顯示名稱。正因為如此,就算您是根據更新過的清單名稱來封裝工作流程,工作流程還是會根據目標網站中的舊名稱尋找清單 URL。因此,當您在目標網站中重新建立清單時,必須確認您一開始給清單的命名是原始名稱,而非更新過的名稱。這樣就能保留清單 URL。清單建立後,您就可以變更清單名稱為更新過的名稱。
  • 含 Unicode 或 DBCS 名稱的工作流程會封裝進 WSP 檔案,預設的硬式編碼名稱為 ‘WorkflowSolution.wsp’
  • 在您前往 [網站資產] 查看更新的解決方案清單後,您必須手動重新整理頁面。
  • 如果目標伺服器沒有 [工作流程工作] 清單和 [工作流程歷程記錄] 清單,當您在 [工作流程設定] 頁面按下工作流程時,會顯示下方錯誤訊息。如果您部署工作流程的目標伺服器以前未曾建立過工作流程,就會發生這樣的狀況。因應之道是從 SPD 建立並發佈一個空的工作流程,以建立 [工作流程工作] 清單和 [工作流程歷程記錄] 清單。接下來您就可以從 SPD 開啟已部署的工作流程,調整 [工作流程工作] 清單和 [工作流程歷程記錄] 清單設定,並重新發佈工作流程。clip_image026
  • 專案工作流程的封裝方式就和一般網站工作流程相同。但是為了確保它能正常運作,您還必須封裝專案實體,例如 EPT、階段、自訂欄等。請參閱 Project 小組即將推出的專案工作流程指南。

謝謝您。

JongHwa

這是翻譯後的部落格文章。英文原文請參閱 Packaging List, Site, and Reusable Workflow and How to Deploy the Package