逐步解說:使用關聯與初始化表單建立工作流程
本逐步解說示範如何建立結合使用關聯與初始表單的基本循序工作流程。這些是 ASPX 表單,可在 SharePoint 系統管理員最初建立工作流程的關聯 (關聯表單),以及在使用者啟動工作流程 (初始表單) 時,將參數加入至工作流程。
本逐步解說將針對案例進行概要說明,在這個案例中,使用者想建立費用報表的核准工作流程,此工作流程的需求如下:
當工作流程與清單產生關聯時,系統會將關聯表單提示給系統管理員看到,讓他們輸入費用報表的金額限制。
員工將他們的費用報表上載至共用文件清單、啟動工作流程,然後在工作流程初始表單中輸入費用總支出。
如果員工的費用報表總支出超過系統管理員預先定義的限制,系統會建立工作給員工的主管,以核准費用報表。不過,如果員工的費用報表總支出低於或等於費用限制,就會將自動核准的訊息寫入工作流程的歷程清單。
這個逐步解說將說明下列工作:
在 Visual Studio 中建立 SharePoint 清單定義循序工作流程專案。
建立工作流程排程。
處理工作流程活動事件。
建立工作流程關聯和初始表單。
與工作流程建立關聯。
手動啟動工作流程。
![]() |
---|
雖然本逐步解說使用循序工作流程專案,但狀態機器工作流程的程序完全相同。 此外,在下列指示的某些 Visual Studio 使用者介面項目中,您的電腦可能會顯示不同的名稱或位置。您所擁有的 Visual Studio 版本和使用的設定決定了這些項目。如需詳細資訊,請參閱 Visual Studio 設定。 |
必要條件
您需要下列元件才能完成此逐步解說:
支援的 Microsoft Windows 和 SharePoint 版本。如需詳細資訊,請參閱開發 SharePoint 方案的要求。
Visual Studio。
建立 SharePoint 循序工作流程專案
首先,在 Visual Studio 中建立循序工作流程專案。循序工作流程是依順序執行直到最後一個活動完成為止的一系列步驟。在此程序中,您將建立套用至 SharePoint 中共用文件清單的循序工作流程。工作流程的精靈會讓您將工作流程與網站或清單定義加以關聯,並且讓您決定工作流程將在何時啟動。
建立 SharePoint 循序工作流程專案
在功能表列上的 [],然後選取 [檔案], [新增], [專案] 顯示 [新增專案] 對話方塊。
展開 [SharePoint] 節點在 [Visual C#] 或 [Visual Basic],然後選取 [2010 年] 節點。
在 [樣板] 窗格中,選取 [SharePoint 2010 專案] 專案範本。
在 [名稱] 方塊中,輸入 ExpenseReport 然後選取 [確定] 按鈕。
[SharePoint 自訂精靈] 隨即出現。
在 [指定網站和安全性層級進行偵錯] 頁面上,選取 [部署為陣列方案] 選項按鈕,然後選取 [完成] 按鈕的信任層級和預設網站。
此步驟也會將方案的信任層級設定為陣列方案,這是工作流程專案唯一可用的選項。
在 [方案總管],請選取中的專案節點。
在功能表列上的 [],然後選取 [專案], [加入新項目]。
在 [Visual C#] 或 [Visual Basic] 下,展開 [SharePoint] 節點,然後選取 [2010 年] 節點。
在 [樣板] 窗格中,選取 [循序工作流程 (僅限陣列方案)] 範本,然後選取 [加入] 按鈕。
[SharePoint 自訂精靈] 隨即出現。
在 [指定工作流程名稱進行偵錯] 頁面中,接受預設名稱 (ExpenseReport - Workflow1)。保留預設工作流程範本類型值 ([清單工作流程])。選取 [下一個] 按鈕。
在 [您要 Visual Studio 在偵錯工作階段中自動關聯工作流程嗎?] 頁面中,清除它自動關聯工作流程範本的方塊 (如果已經核取的話)。
此步驟可讓您稍後在顯示關聯表單時,手動建立工作流程與共用文件清單的關聯。
選取 [完成] 按鈕。
將關聯表單加入至工作流程
接下來,建立 .ASPX 關聯表單,這個表單會在 SharePoint 系統管理員一開始建立工作流程與費用報表文件的關聯時出現。
若要將關聯表單加入至工作流程
在 [方案總管] 的 [Workflow1] 節點。
在功能表列上的 [],然後選取 [專案], [加入新項目] 顯示 [加入新項目] 對話方塊。
在對話方塊樹狀檢視中,展開 [Visual C#] 或 [Visual Basic ](視專案語言而定), [SharePoint] 展開節點,然後選取 [2010 年] 節點。
在範本清單中,選取 [工作流程關聯表單] 範本。
在 [名稱] 文字方塊中,輸入 ExpenseReportAssocForm.aspx。
選取 [加入] 按鈕加入表單加入至專案。
設計和撰寫關聯表單的程式碼
在這個程序中,您會將控制項和程式碼加入至關聯表單來增加功能。
若要設計和撰寫關聯表單的程式碼
在關聯表單 (ExpenseReportAssocForm.aspx) 中找到具有 ID="Main" 的 asp:Content 項目。
直接在此內容項目的第一行後面,加入下列程式碼來建立標籤和文字方塊,以提示輸入費用核准限制 (AutoApproveLimit):
<asp:Label ID="lblAutoApproveLimit" Text="Auto Approval Limit:" runat="server" /> <asp:TextBox ID="AutoApproveLimit" runat="server" /> <br /><br />
在 [方案總管] 中展開 [ExpenseReportAssocForm.aspx] 檔案,以顯示其相依檔案。
注意事項
如果專案在 Visual Basic,您必須選取 [監看所有檔案。] 按鈕執行這個步驟。
開啟 ExpenseReportAssocForm.aspx 檔案的捷徑功能表並選取 [檢視程式碼]。
以下列方法取代 GetAssociationData 方法:
Private Function GetAssociationData() As String ' TODO: Return a string that contains the association data that ' will be passed to the workflow. Typically, this is in XML ' format. Return Me.AutoApproveLimit.Text End Function
private string GetAssociationData() { // TODO: Return a string that contains the association data that // will be passed to the workflow. Typically, this is in XML // format. return this.AutoApproveLimit.Text; }
將初始表單加入至工作流程
接下來,建立初始表單,這個表單會在使用者執行工作流程來處理費用報表時出現。
若要建立初始表單
在 [方案總管] 的 [Workflow1] 節點。
在功能表列上的 [],然後選取 [專案], [加入新項目] 顯示 [加入新項目] 對話方塊。
在對話方塊樹狀檢視中,展開 [Visual C#] 或 [Visual Basic ] (視專案語言而定), [SharePoint] 展開節點,然後選取 [2010 年] 節點。
在範本清單中,選取 [工作流程初始表單] 範本。
在 [名稱] 文字方塊中,輸入 ExpenseReportInitForm.aspx。
選取 [加入] 按鈕加入表單加入至專案。
設計和撰寫初始表單的程式碼
接下來,將控制項和程式碼加入至初始表單來增加功能。
若要撰寫初始表單的程式碼
在初始表單 (ExpenseReportInitForm.aspx),請將包含 ID="Main"的 asp:Content 項目。
直接在此內容項目的第一行後面,加入下列程式碼來建立標籤和文字方塊,以顯示關聯表單中輸入的費用核准限制 (AutoApproveLimit) 標籤和文字方塊,然後建立另一個標籤和文字方塊,以提示輸入總支出 (ExpenseTotal):
<asp:Label ID="lblAutoApproveLimit" Text="Auto Approval Limit:" runat="server" /> <asp:TextBox ID="AutoApproveLimit" ReadOnly="true" runat="server" /> <br /><br /> <asp:Label ID="lblExpenseTotal" Text="Expense Total:" runat="server" /> <asp:TextBox ID="ExpenseTotal" runat="server" /> <br /><br />
在 [方案總管] 中展開 [ExpenseReportInitForm.aspx] 檔案,以顯示其相依檔案。
開啟 ExpenseReportInitForm.aspx 檔案的捷徑功能表並選取 [檢視程式碼]。
以下列範例取代 Page_Load 方法:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load InitializeParams() Me.AutoApproveLimit.Text = workflowList.WorkflowAssociations(New Guid(associationGuid)).AssociationData ' Optionally, add code here to pre-populate your form fields. End Sub
protected void Page_Load(object sender, EventArgs e) { InitializeParams(); this.AutoApproveLimit.Text = workflowList.WorkflowAssociations[new Guid(associationGuid)].AssociationData; }
以下列範例取代 GetInitiationData 方法:
' This method is called when the user clicks the button to start the workflow. Private Function GetInitiationData() As String Return Me.ExpenseTotal.Text ' TODO: Return a string that contains the initiation data that ' will be passed to the workflow. Typically, this is in XML ' format. Return String.Empty End Function
// This method is called when the user clicks the button to start the workflow. private string GetInitiationData() { // TODO: Return a string that contains the initiation data that // will be passed to the workflow. Typically, this is in XML // format. return this.ExpenseTotal.Text; }
自訂工作流程
接下來,自訂工作流程。您稍後會建立兩個表單與工作流程的關聯。
若要自訂工作流程
您可以在專案中開啟 Workflow1 顯示在工作流程設計工具的工作流程。
在 [工具箱],展開 [Windows Workflow v3.0] 節點並找出 [IfElse] 活動。
將此活動加入至工作流程執行下列其中一個步驟:
開啟 [IfElse] 活動的捷徑功能表上,選取 [複製],開啟的捷徑功能表在工作流程設計工具的 [onWorkflowActivated1] 活動],然後選取 [貼上]。
從 拖曳 [工具箱] 的 [IfElse] 活動,並將它連接至行在工作流程設計工具的 [onWorkflowActiviated1] 活動下。
在 [工具箱] 中,展開 [SharePoint 工作流程] 節點並找出 [CreateTask] 活動。
將此活動加入至工作流程執行下列其中一個步驟:
開啟 [CreateTask] 活動的捷徑功能表上,選取 [複製],開啟 IfElseActivity1 中有兩 [這裡置放活動] 其中一個區域的捷徑功能表在工作流程設計工具,然後選取 [貼上]。
從 拖曳 [工具箱] 的 [CreateTask] 活動在 IfElseActivity1 中有兩 [這裡置放活動] 其中一個區域中。
在 [屬性] 視窗中,為 CorrelationToken 屬性輸入 taskToken 屬性值。
藉由選取加號展開 CorrelationToken 屬性 (
) 旁邊。
在 OwnerActivityName Sub 屬性的下拉箭號,並設定 Workflow1 值。
選取 TaskId 屬性,然後選擇省略符號 (
) 按鈕以顯示 [繫結屬性] 對話方塊。
選取 [繫結至新的成員] 索引標籤,然後選取 [建立資料行] 選項按鈕,然後選取 [確定] 按鈕。
選取 TaskProperties 屬性,然後選擇省略符號 (
) 按鈕以顯示 [繫結屬性] 對話方塊。
選取 [繫結至新的成員] 索引標籤,然後選取 [建立資料行] 選項按鈕,然後選取 [確定] 按鈕。
在 [工具箱][SharePoint 工作流程] ,展開 節點,然後找出 [LogToHistoryListActivity] 活動。
將此活動加入至工作流程執行下列其中一個步驟:
開啟 [LogToHistoryListActivity] 活動的捷徑功能表上,選取 [複製],開啟另一 [這裡置放活動] 地區的捷徑功能表在工作流程設計工具的 IfElseActivity1 的,然後選取 [貼上]。
從 拖曳 [工具箱] 的 [LogToHistoryListActivity] 活動,並放在 IfElseActivity1 內的另一 [這裡置放活動] 區域上。
將程式碼加入至工作流程
接下來,將程式碼加入至工作流程來增加功能。
若要將程式碼加入工作流程
開啟 [createTask1] 活動的捷徑功能表在工作流程設計工具,然後選取 [檢視程式碼]。
加入下列方法:
Private Sub createTask1_MethodInvoking(ByVal sender As System.Object, ByVal e As System.EventArgs) createTask1_TaskId1 = Guid.NewGuid createTask1_TaskProperties1.AssignedTo = "somedomain\\someuser" createTask1_TaskProperties1.Description = "Please approve the expense report" createTask1_TaskProperties1.Title = "Expense Report Approval Needed" End Sub
private void createTask1_MethodInvoking(object sender, EventArgs e) { createTask1_TaskId1 = Guid.NewGuid(); createTask1_TaskProperties1.AssignedTo = "somedomain\\someuser"; createTask1_TaskProperties1.Description = "Please approve the expense report"; createTask1_TaskProperties1.Title = "Expense Report Approval Needed"; }
注意事項
在程式碼中,以將建立工作的網域和使用者取代 somedomain\\someuser,例如 "Office\\JoeSch"。為了進行測試,使用開發用的帳戶會比較方便。
在 MethodInvoking 方法之下加入下列範例:
Private Sub checkApprovalNeeded(ByVal sender As Object, ByVal e As ConditionalEventArgs) Dim approval As Boolean = False If (Convert.ToInt32(workflowProperties.InitiationData) > Convert.ToInt32(workflowProperties.AssociationData)) Then approval = True End If e.Result = approval End Sub
private void checkApprovalNeeded(object sender, ConditionalEventArgs e) { bool approval = false; if (Convert.ToInt32(workflowProperties.InitiationData) > Convert.ToInt32(workflowProperties.AssociationData)) { approval = true; } e.Result = approval; }
在工作流程設計工具中,選取 [ifElseBranchActivity1] 活動。
在 [內容] 視窗中,選取 [條件] 屬性上的下拉箭號,然後將 Code Condition 值。
藉由選取加號展開 [條件] 屬性 (
) 旁邊,然後將其值設定為 checkApprovalNeeded。
在工作流程設計工具中,開啟 [logToHistoryListActivity1] 活動的捷徑功能表,然後選取 [產生處理常式] 產生 MethodInvoking 事件的空方法。
以下列程式碼取代 MethodInvoking 程式碼:
Private Sub logToHistoryListActivity1_MethodInvoking(ByVal sender As System.Object, ByVal e As System.EventArgs) Me.logToHistoryListActivity1.HistoryOutcome = ("Expense was auto approved for " + workflowProperties.InitiationData) End Sub
private void logToHistoryListActivity1_MethodInvoking(object sender, EventArgs e) { this.logToHistoryListActivity1.HistoryOutcome = "Expense was auto approved for " + workflowProperties.InitiationData; }
選取 F5 鍵偵錯應用程式。
這會編譯、封裝、部署應用程式、啟動其功能、回收 IIS 應用程式集區,然後在 [網站 URL] 屬性指定的位置啟動瀏覽器。
建立工作流程與文件清單的關聯
接下來,建立工作流程與 SharePoint 網站上的 [共用文件] 清單的關聯,以顯示工作流程關聯表單。
若要關聯工作流程
選取在快速啟動列上 [共用文件] 連結。
在 [程式庫工具] 索引標籤的 [程式庫] 連結然後選取 [程式庫設定] 功能區按鈕。
在 [使用權限和管理] 區段中,選取 [工作流程設定] 連結然後選取 [工作流程] 網頁的 [將工作流程] 連結。
在工作流程的上方清單中設定頁,請選取 [ExpenseReport - Workflow1] 範本。
在下一個資料行中,輸入 ExpenseReportWorkflow 然後選取 [下一個] 按鈕。
這會建立工作流程與 [共用文件] 清單的關聯,並顯示工作流程關聯表單。
在 [自動核准限制] 文字方塊中,輸入 1200 並選取 [關聯工作流程] 按鈕。
啟動工作流程
接下來,建立工作流程與 [共用文件] 清單中其中一個文件的關聯,以顯示工作流程初始表單。
若要啟動工作流程
在 SharePoint 頁面上,選取 [首頁] 按鈕。
選取在快速啟動列上 [共用文件] 連結顯示 [共用文件] 清單。
在 [程式庫工具] 索引標籤的 [文件] 連結在頁面頂端按一下 [],然後選取 功能區上的 [上傳文件] 按鈕將新文件上載至 [共用文件] 清單。
在 [上傳文件] 對話方塊中,選取 [瀏覽] 按鈕,選取所有檔案,請選取 [[開啟]] 按鈕,然後選取 [確定] 按鈕。
您可以變更文件的設定在這個對話方塊,不過,保留預設值。藉由選取 [儲存] 按鈕。
選取要上載的文件,選擇顯示的下拉箭號,然後選取 [工作流程] 項目。
ExpenseReportWorkflow 旁的選取影像。
這會顯示工作流程初始表單 (請注意,[自動核准限制] 方塊中顯示的值是唯讀的,因為此值是在關聯表單中輸入的)。
在 [費用合計] 文字方塊中,輸入 1600,然後選取 [啟動工作流程] 按鈕。
這會再次顯示 [共用文件] 清單。名為 [ExpenseReportWorkflow] 的新欄和值 [已完成] 會加入至工作流程剛才啟動的項目中。
在上載的檔案選取旁邊的下拉箭號並選取 [工作流程] 項目顯示工作流程狀態頁面。選取 [已完成] 值。 [完成工作流程] 下。工作會列在 [工作] 區段底下。
選取工作的標題來顯示工作詳細資訊。
回到 [共用文件] 清單,然後使用相同或不同文件重新啟動工作流程。
輸入在小於或等於在關聯頁面上輸入的數量的初始頁面的數量 (1200)。
這時會在歷程清單中建立項目,而非建立工作。此項目會顯示在工作流程狀態頁面的 [工作流程記錄] 區段中。請注意記錄事件的 [結果] 欄中的訊息。它包含 logToHistoryListActivity1.MethodInvoking 事件中輸入的文字,其中包括自動核准的金額。
後續步驟
您可以在下列主題中,進一步了解如何建立工作流程範本:
- 若要進一步了解 SharePoint 工作流程,請參閱 Windows SharePoint Services 工作流程 (英文)。