設想一下這樣一個簡單的情景:
某個公司里面設定報銷限度為1200元。
如果報銷限度超過1200,就提交給老板審核。
沒有超過的話,系統自動批准。(暫時不考慮重復報銷的情況)
1. 通過指向“文件”菜單上的“新建”並單擊“新建項目”,顯示“新建項目”對話框。
2. 展開“Visual C#”下的“SharePoint”節點,然后單擊“2010”。
3. 在“模板”窗格中選擇“順序工作流”。
4. 在“名稱”框中,鍵入名稱,然后單擊“確定”。這將顯示“SharePoint 自定義向導”。
5. 在“要使用哪個本地網站進行調試?”頁中,單擊“下一步”以接受默認網站。
此步驟還會將解決方案的信任級別設置為場解決方案(工作流項目的唯一可用選項)。
6. 在“指定用於調試的工作流名稱”頁上,接受默認名稱(“* - Workflow1”)。 保留默認工作流模板類型值(“列表工作流”)。 單擊“下一步”。
7. 在“是否希望 Visual Studio 在調試會話中自動關聯工作流?”頁中,清除自動關聯工作流模板的框(如果此框已選中)。
利用此步驟,您可以稍后手動將工作流與顯示關聯窗體的“共享文檔”列表關聯。
8. 單擊“完成”。
將關聯窗體添加到工作流
接下來,創建一個 .ASPX 關聯窗體,當 SharePoint 管理員首次將工作流與文檔庫或列表相關聯時,將顯示此窗體。
1. 單擊“解決方案資源管理器”中的“Workflow1”節點。
2. 單擊“項目”菜單上的“添加新項”以顯示“添加新項”對話框。
3. 在該對話框樹視圖中,展開“Visual C#”,再展開“SharePoint”節點,然后單擊“2010”。
4. 在模板列表中,選擇“工作流關聯窗體”。
5. 在“名稱”文本框中,鍵入 ExpenseReportAssocForm.aspx。在這個場景中,這個關聯窗體主要作用是初始化最大報銷費用,這個稍后會有介紹。
6. 單擊“添加”按鈕將該窗體添加到項目中。
設計關聯窗體並對其進行編碼
在此過程中,通過在關聯窗體中添加控件和代碼來引入功能。
1. 在關聯窗體 (ExpenseReportAssocForm.aspx) 中,找到具有 ID=”Main” 的 asp:Content 元素。
2. 緊接在此內容元素中的第一行后面添加以下代碼,以創建一個用於提示輸入費用審批限額 (AutoApproveLimit) 的標簽和文本框:
<asp:Label ID="lblAutoApproveLimit" Text="自動批准限制:" runat="server" />
<asp:TextBox ID="AutoApproveLimit" runat="server" />
<br /><br />
效果如下:
輸入框主要是輸入限定的金額,將來可以輸入1200元的最大限定金額。
3. 展開“解決方案資源管理器”中的“ExpenseReportAssocForm.aspx”文件以顯示其從屬文件。
4. 右擊 ExpenseReportAssocForm.aspx 文件並選擇“查看代碼”。
5. 將 GetAssociationData 方法替換為:
// This method is called when the user clicks the button to associate the workflow.
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 AutoApproveLimit.Text;
}
返回的是限制金額數。
將啟動窗體添加到工作流
接下來,創建在用戶針對文檔庫或者列表運行工作流時顯示的啟動窗體。
創建啟動窗體
1. 單擊“解決方案資源管理器”中的“Workflow1”節點。
2. 單擊“項目”菜單上的“添加新項”以顯示“添加新項”對話框。
3. 在該對話框樹視圖中,展開“Visual C#”,再展開“SharePoint”節點,然后單擊“2010”。
4. 在模板列表中,選擇“工作流啟動窗體”。
5. 在“名稱”文本框中,鍵入ExpenseReportInitForm.aspx。
6. 單擊“添加”按鈕將該窗體添加到項目中。
設計啟動窗體並對其進行編碼
對啟動窗體進行編碼
1. 在啟動窗體 (ExpenseReportInitForm.aspx) 中,找到具有 ID=”Main” 的 asp:Content 元素。
2. 緊接在此內容元素中的第一行后面添加以下代碼,以創建一個顯示已在關聯窗體中輸入的費用審批限額 (AutoApproveLimit) 的標簽和文本框,以及另一個提示輸入費用總額 (ExpenseTotal) 的標簽和文本框:
<asp:Label ID="lblAutoApproveLimit" Text="費用審批限額:" runat="server" />
<asp:TextBox ID="AutoApproveLimit" ReadOnly="true" runat="server" />
<br /><br />
<asp:Label ID="lblExpenseTotal" Text="費用總額:" runat="server" />
<asp:TextBox ID="ExpenseTotal" runat="server" />
<br /><br />
3. 展開“解決方案資源管理器”中的“ExpenseReportInitForm.aspx”文件以顯示其從屬文件。
4. 右擊 ExpenseReportInitForm.aspx 文件並選擇“查看代碼”。
5. 將 Page_Load 方法替換為以下示例:
protected void Page_Load(object sender, EventArgs e)
{
InitializeParams();
this.AutoApproveLimit.Text = workflowList.WorkflowAssociations[new Guid(associationGuid)].AssociationData;
}
這段代碼的意思是 費用審批限額框顯示初始化好的最大報銷限額,如果我們在關聯窗口設定最大報銷金額為1200,那么這里就會顯示1200。
6. 將 GetInitiationData 方法替換為以下示例:
// 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,在工作流設計器中顯示工作流。
1. 在工具箱中,展開“Windows Workflow v3.0”節點,並找到“IfElse”活動。
2. 通過將此活動拖動到設計器中並將其放置在工作流中的“onWorkflowActivated1”活動下方,將此活動添加到工作流中。 這將在設計器中創建一個稱作 IfElseActivity1 的活動。
3. 在工具箱中,展開“SharePoint 工作流”節點並找到“CreateTask”活動。
4. 通過將此活動拖放到 IfElseActivity1 中的兩個“將 Activity 拖放至此”區域之一,將此活動添加到工作流中。
5. 在“屬性”窗口中,為 CorrelationToken 屬性輸入屬性值 taskToken。
6. 通過單擊 CorrelationToken 屬性旁邊的加號來展開此屬性。
7. 單擊 OwnerActivityName 子屬性上的下拉箭頭並選擇 Workflow1。
8. 單擊 TaskId 屬性,然后單擊省略號 按鈕以顯示“綁定屬性”對話框。
9. 單擊“綁定到新成員”選項卡,選擇“創建字段”,然后單擊“確定”。
10. 單擊 TaskProperties 屬性,然后單擊省略號按鈕以顯示“綁定屬性”對話框。
11. 單擊“綁定到新成員”選項卡,選擇“創建字段”,然后單擊“確定”。
12. 在工具箱中,展開“SharePoint 工作流”節點並找到“LogToHistoryListActivity”活動。
13. 通過將此活動拖放到 IfElseActivity1 中的另一個“將 Activity 拖放至此”區域,將此活動添加到工作流中。
在工作流中添加代碼
接下來,在工作流中添加代碼以引入功能。
1. 在 MethodInvoking 方法下添加以下示例:
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”活動關聯上這段代碼。如接下來的2、3、4所述。
2. 在工作流設計器中,單擊“ifElseBranchActivity1”活動。
3. 在“屬性”窗口中,單擊“Condition”屬性的下拉箭頭並選擇 Code Condition。
4. 通過單擊“Condition”屬性旁邊的加號來展開此屬性,然后將其值設置為 checkApprovalNeeded。
接下來我們在這一條分支中寫一些具體操作的步驟,讓超過限額的報告交給老板審核。如5、6所述。
5. 在工作流設計器中雙擊“createTask1”活動,為 MethodInvoking 事件生成一個空方法。
6. 將 MethodInvoking 方法替換為:
private void createTask1_MethodInvoking(object sender, EventArgs e)
{
createTask1_TaskId1 = Guid.NewGuid();
createTask1_TaskProperties1.AssignedTo = "icloud\\administrator";//這里可以設定審核人的帳號,比如說老板的。
createTask1_TaskProperties1.Description = "請批准開支報告";
createTask1_TaskProperties1.Title = "開支報告需要批准";
}
7. 接下來我們設定當報銷少於限定金額時,系統自動通過審核的流程:在工作流設計器中,右擊“logToHistoryListActivity1”活動並選擇“生成處理程序”,以便為 MethodInvoking 事件生成空方法。
8. 將 MethodInvoking 代碼替換為下面的內容:
private void logToHistoryListActivity1_MethodInvoking(object sender, EventArgs e)
{
this.logToHistoryListActivity1.HistoryOutcome = "費用已經獲得自動批准,金額 " + workflowProperties.InitiationData + " 元。";
}
9. 按 F5 調試程序。
將工作流關聯到文檔庫或列表
接下來,通過將工作流與 SharePoint 網站上的“共享文檔”列表相關聯來顯示工作流關聯窗體。
關聯工作流
1. 在快速啟動欄上單擊“共享文檔”。
2. 單擊“庫工具”功能區選項卡上的“庫”,然后單擊“庫設置”功能區按鈕。
3. 在“權限和管理”部分中,單擊“工作流設置”鏈接,然后單擊“工作流”頁上的“添加工作流”鏈接。
4. 在工作流設置頁中的頂部列表中,選擇創建好的模板。
5. 在下一個字段中,鍵入 Workflow,然后單擊“下一步”按鈕。
這會將工作流與“共享文檔”列表相關聯並顯示工作流關聯窗體。
6. 在“提交審批的限額”文本框中,鍵入 1200,然后單擊“關聯工作流”按鈕。
啟動工作流
然后將工作流關聯到“共享文檔”列表中的某個文檔以顯示工作流啟動窗體。
1. 在 SharePoint 頁上,單擊“主頁”按鈕,然后通過在快速啟動欄上單擊“共享文檔”鏈接來顯示 SharePoint 網站上的“共享文檔”列表。
2. 通過單擊頁頂部的“庫工具”選項卡上的“文檔”鏈接,並單擊功能區上的“上載文檔”按鈕,將新文檔上載到“共享文檔”列表中。
3. 將鼠標指針指向已上載文檔以顯示下拉箭頭。 單擊下拉箭頭並選擇“工作流”。
這將顯示工作流啟動窗體。 (請注意,“提交審批的限額”框中顯示的值是只讀的,因為此值是先前在關聯窗體中輸入的。)
5. 點擊“費用批准”鏈接或圖標,開始工作流。在“費用總額”文本框中鍵入 1600,然后單擊“啟動工作流”。
(按照我們代碼中的條件,將會啟動提交審核人手動審核的分支流程。我們按照6、7步驟可以查看處理后的結果。)
這將再次顯示“共享文檔”列表。 將帶有“已完成”值的名為“費用批准”的新列添加到工作流剛啟動的項中。
6. 單擊已上載文檔旁邊的下拉箭頭,然后單擊“工作流”以顯示工作流狀態頁。 單擊“已完成工作流”下的值“已完成”。 這將在“任務”部分下方列出任務。
7. 單擊任務的標題以顯示其任務詳細信息。
8. 返回到“共享文檔”列表並使用同一文檔或其他文檔重新啟動工作流。
9. 在啟動頁上輸入一個小於或等於關聯頁上輸入的金額 (1200) 的金額。
在執行此操作時,會在歷史記錄列表中創建一個項而不是任務。 該項顯示在工作流狀態頁的“工作流歷史記錄”部分中。 請注意歷史記錄事件的“結果”列中的消息。 它包含 logToHistoryListActivity1.MethodInvoking 事件中輸入的文本,該文本包括已自動審批的金額。
說明:此教程只來說明,工作流關聯窗體和啟動窗體如何使用,內容簡單。較復雜的工作流和比較符合實際業務流程的工作流開發會在以后的教程中涉及。
參考 http://msdn.microsoft.com/zh-cn/library/ee231590.aspx
參考 http://blog.csdn.net/yun_liang1028/article/details/6281397



























