




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、例子1地址:狀態(tài)機工作流主要跟以下幾個活動有關。State:表示一個審批狀態(tài)。內(nèi)部可以放置StateInitialization、EventDrivenActivity和StateFinalization 3個活動。StateInitialization:用來初始化狀態(tài),一般在這個活動內(nèi)部添加CreateTask實現(xiàn)任務的創(chuàng)建。StateFinalization:當狀態(tài)結束時被執(zhí)行。 EventDrivenActivity:用來接受事件,一般在內(nèi)部放置一個OnTaskChange活動等待任務完成。SetState:用來實現(xiàn)流程狀態(tài)的跳轉。SetState活動一般放置在OnTaskCh
2、ange活動后,在任務完成后按照任務表單域設置流程狀態(tài)。拖曳4個State活動到設計器中。分別改名為preApprovalActivity、approvalActivity、reSubmitActivity和completeActivity。通過右鍵菜單,將completeActivity活動設置為終止狀態(tài),如圖。1 雙擊Workflow1InitialState活動中的"EventDriven"活動,在其中添加一個SetState活動,設置其TargetState為"preApprovalActivity"。2 添加CreateTask活動,創(chuàng)建審批任
3、務。拖曳stateInitializationActivity到preApprovalActivity內(nèi)部,雙擊"stateInitializationActivity",在stateInitializationActivity內(nèi)部添加一個CreateTask活動,改名為"createPreApprovalTask",指定其CorrelationToken為"preApprovalTaskToken",將其SpecialPermission屬性綁定到工作流的preApprovalTaskSpecialPermissions字段Task
4、Id屬性綁定到工作流的preApprovalTaskId字段TaskProperties屬性綁定到工作流的preApprovalTaskProperties字段如圖所示。3 處理createPreApprovalTask的MethodInvoking方法,代碼如下。private void createPreApprovalTask_MethodInvoking(object sender, EventArgs e)preApprovalTaskId = Guid.NewGuid();preApprovalTaskProperties.Title = "文檔預審"preAp
5、provalTaskProperties.TaskType = 0; /審批任務采用第一個任務表單preApprovalTaskProperties.AssignedTo = "codeartuser1" /指定審批人/設置任務編輯權限preApprovalTaskSpecialPermissions.Clear(); preApprovalTaskSpecialPermissions.Add(preApprovalTaskProperties. AssignedTo, SPRoleType.Contributor);以上代碼將文檔預審任務分配給user1。4 添加OnTa
6、skChanged活動,等待任務完成,并進行處理。返回到工作流設計器界面,拖曳EventDriven活動到preApprovalActivity,雙擊"EventDriven"活動,在EventDriven活動中添加OnTaskChanged活動,改名為"onPreApprovalTaskChanged"。設置CorrelationToken屬性跟createPreApprovalTask活動一致,將AfterProperties和BeforeProperties屬性均綁定到preApprovalTaskProperties字段,將TaskId屬性綁定到
7、preApprovalTaskId字段,如圖所示。5 處理Invoked事件,代碼如下。 private void onApprovalTaskChanged_Invoked(object sender, ExternalDataEventArgs e) /獲取到產(chǎn)生事件的OnTaskChanged活動 OnTaskChanged onTaskChangedActivity = (OnTaskChanged)sender;SPWorkflowTaskProperties taskProp = onTaskChangedActivity
8、.AfterProperties;/按照表單中approvalState域設置審批狀態(tài)this.approvalState = (ApprovalState)Enum.Parse(typeof(ApprovalState), taskProp.ExtendedProperties"approvalState".ToString(), true);string comments = "" + taskProp.ExtendedProperties"comments"/記錄日志this.workflowProperties.Workflo
9、w.CreateHistoryEvent( (int) SPWorkflowHistoryEventType.WorkflowComment, 0, this.workflowProperties.OriginatorUser, this.approvalState.ToString(),"審批用戶:" + taskProp.AssignedTo + "審批時間:" + DateTime.Now + "審批意見:" + comments, "");6 設置狀態(tài)轉換邏輯。添加一個IfElse活動到EventDrive
10、n活動中,并添加一個條件分支。設置第1個分支的Condition為規(guī)則條件,名稱為"IsApproval",表達式為:this.approvalState = ApprovalState.Approval在第1個分支中添加1個SetState活動,設置其TargetState為approvalActivity。設置第2個分支的Condition為規(guī)則條件,名稱為"IsReSubmit",表達式為:this.approvalState = ApprovalState.ReSubmit在第2個分支中添加1個SetState活動,設置其TargetState為
11、"reSubmitActivity"。設置第3個分支的Condition為規(guī)則條件,名稱為"IsComplete",表達式為:this.approvalState = ApprovalState.Complete在第3個分支中添加1個SetState活動,設置其TargetState為completeActivity。最后的EventDriven活動設計器效果如圖所示。7 按照同樣的步驟,完成approvalActivity活動和reSubmitActivity活動的設置。最終的設計器如圖所示。從以上的流程可以看出示例項目中實現(xiàn)的流轉邏輯:preAppr
12、ovalActivity可以轉向reSubmitActivity、approvalActivity或completeActivity,而reSubmitActivity只能轉回preApprovalActivity,approvalActivity只能轉向completeActivity。例子2地址:建立一個sharepoint 2007 狀態(tài)機工作流項目1 打開vs20082 文件新建項目3 選擇sharepoint 2007狀態(tài)機工作流4 輸入工作流名稱ExpenseReportStateMachineWF5 輸入有效的sharepoint web url,如:6 庫或列表后面的選項選擇要
13、附加的庫或列表,然后下一步,完成。7 把workflow1.cs重命名為ExpenseReportStateMachineWorkflow.cs設計你的狀態(tài)機工作流添加狀態(tài)并設置開始和終止狀態(tài)1 工作流里已經(jīng)默認包含了一個名為Workflow1InitalState的狀態(tài)。在它上面點右鍵,選屬性,在屬性窗口里把名字改成ReportInitialState。2 打開工具欄,點開sharepoint工作流控件列表和Windows Workflow v3.0控件列表。3 Windows Workflow v3.0類別中選擇State,并且把它拖拽到設計器中。注:State就是狀態(tài)機中的狀態(tài)4 打開它
14、的屬性,把名字改成ReportSubmittedState。5 再增加三個狀態(tài),它們的名字分別是ReportApprovedState, ReportRejectedState, ReportCompleteState。6 將ReportInitialState設置為開始狀態(tài),在它上面點右鍵,選設置為初始狀態(tài),在這個狀態(tài)的左上角的小圖標里多出了一個綠色的標志。7 將ReportCompleteState設置為結束狀態(tài),右鍵選擇設置為已完成狀態(tài),在這個狀態(tài)左上角的小圖標里面多了一個紅色的標志。開始和結束狀態(tài)所有用到的狀態(tài)已經(jīng)在設計器中,下面為狀態(tài)添加activities(行為)狀態(tài)支持以下幾種a
15、ctivities(行為): StateActivityEventDrivenActivityStateInitializationActivityStateFinalizationActivity這里只需要StateInitializationActivity和EventDrivenActivity兩種行為1 選擇ReportInitialState狀態(tài)下的eventDrivenActivity1。2 在它的屬性里重命名為eventInitWorkflow。3 拖拽一個StateInitializationActivity到ReportSubmittedState狀態(tài)中,并重命名為state
16、InitReportSubmittedState。4 在ReportApprovedState和ReportRejectedState狀態(tài)中重復上面一步的操作,并把它們重命名為stateInitReportApprovedState和stateInitReportRejectedState。5 Drag an EventDriven activity to the ReportSubmittedState. Rename it to eventReviewReport. 為ReportSubmittedState狀態(tài)拖拽一個EventDrivenActivity,并重命名為eventRevie
17、wReport。注意:拖拽的EventDriven應該放在StateInitialization的下面。你的設計器中的工作流如下圖:下面,該為每個狀態(tài)填充更詳細的內(nèi)容。為初始化狀態(tài)添加詳細內(nèi)容 1 雙擊ReportInitialState狀態(tài)中的eventInitWorkflow,如圖:你可以通過視圖中頂部靠左邊的鏈接回到前面的視圖中。2 把onWorkflowActivated1重命名為onReportWorkflowActivated。3 在屬性窗口里面找到CorrelationToken屬性,并把它后面的下拉菜單中選擇workflowToken。點開CorrelationToken前面的
18、(+),在OwnerActivityName后面選擇ExpenseReportStateMachineWorkflow。找到WorkflowProperties屬性,點他后面的(.)。4 在新彈出的對話框中,選擇綁定到現(xiàn)有成員選項卡,選擇下面的workflowProperties,點確定。5 最后,你可以在onReportWorkflowActivated上點右鍵,選擇生成處理程序。它可以在后置代碼斷里自動生成一個方法,用來寫你自己的代碼。然后回到設計器中。6 拖拽一個CreateTask到onReportWorkflowActivated下面,并把它重命名為createReportTask。
19、7 在它的屬性窗口里面找到CorrelationToken屬性,輸入taskToken。點開CorrelationToken前面的(+),找到OwnerActivityName,選擇ExpenseReportStateMachineWorkflow。找到TaskId點擊后面的(.)。8 在新彈出的綁定對話框中,選擇綁定到新成員選項卡,輸入taskId選擇下面的創(chuàng)建字段,然后點確定。9 接下來,選擇TaskProperties屬性,點擊后面的(.),在綁定對話框中選擇綁定到新成員選項卡,輸入taskProperties,選擇創(chuàng)建字段,然后點確定。10 最后,可以在createReportTask
20、上點右鍵,選生成處理程序,在后置代碼中自動生成一個方法。11 拖拽一個SetState到createReportTask下面。注意:在vs2008中有兩個SetState。這里用到的是Windows Workflow v3.0下面的。12 把它重命名為setStateSubmitted,找到TargetStateName屬性,選擇ReportSubmittedState。點擊視圖頂部左邊的ExpenseReportStateMachineWorkflow鏈接,回到狀態(tài)視圖中為Submitted 狀態(tài)添加詳細內(nèi)容1. 雙擊ReportSubmittedState狀態(tài)下的stateInitRepo
21、rtSubmittedState來打開詳細視圖。2. 拖拽一個LogToHistoryListActivity行為到設計界面,并重命名為logToHistoryReportSubmittedState。3. 右擊logToHistoryReportSubmittedState,選擇生成處理程序。然后回到設計視圖中。4. 回到狀態(tài)視圖,雙擊ReportSubmittedState里面的eventReviewReport。拖拽一個onTaskChanged到設計視圖中,并改名為onTaskChangedReportReviewed。在屬性窗口中找到CorrelationToken,在下拉菜單中選擇
22、taskToken。5. 找到AfterProperties屬性,點開它后面的(.)。在綁定對話框中,選擇綁定到新成員選項卡。輸入afterProperties,選擇創(chuàng)建字段,然后點確定。重復步驟來設置BeforeProperties。6. 找到TaskId屬性,點擊后面的(.)。在綁定對話框中,選擇綁定到現(xiàn)有成員選項卡,選擇下面的taskId,然后點確定。7. 右擊onTaskChangedReportReviewed,選擇生成處理程序來寫自己的處理代碼。然后返回設計視圖。8. 拖拽IfElse到onTaskChangedReportReviewed下面,并重命名為ifElseReportR
23、eview。9. 把左邊的if分支重命名為ifElseReportApproved。在它的屬性里找到Condition屬性,在后面的下拉菜單中選擇代碼條件。打開Condition前面的(+),在下面的Condition后面輸入IsReportApproved,然后按回車。這時系統(tǒng)會自動建立一個空的方法,名為IsReportApproved,然后回到設計界面。10. 把第二個if分支重命名為ifElseReportRejected,在它的屬性里找到Condition屬性,在后面的下拉菜單中選擇代碼條件。打開Condition前面的(+),在下面的Condition后面輸入IsReportReje
24、cted,然后按回車。11. 拖拽一個SetState到if的第一分支上,也就是ifElseReportApproved,然后重命名為setStateReportApproved。在它的屬性里,找到TargetStateName屬性,在它后面的下拉菜單中選擇ReportApprovedState。12. 拖拽一個SetState到if的第二個分支上,然后重命名為setStateReportRejected。設置TargetStateName屬性為ReportRejectedState。13. 點擊設計視圖左上角的ExpenseReportStateMachineWorkflow鏈接,回到狀態(tài)視
25、圖。為通過審批狀態(tài)和沒通過審批狀態(tài)添加詳細內(nèi)容1 雙擊ReportApprovedState中的StateInitReportApprovedState。2 拖拽一個LogToHistoryListActivity到設計界面中,并重命名為logToHistoryReportApprovedState。3 右擊logToHistoryReportApprovedState,選擇生成處理程序。然后回到設計界面。4 拖拽一個CompleteTask到logToHistoryReportApprovedState下面,并重命名為completeTaskReportApproved。設置它的Correl
26、ationToken屬性為taskToken。點擊它的TaskId屬性后面的(.)。在綁定對話框中,選擇綁定到現(xiàn)有成員選項卡,然后選擇下面的taskId,然后點確定。5 右擊completeTaskReportApproved,選擇生成處理程序。然后返回到設計視圖。6 拖拽一個SetState到completeTaskReportApproved下面,并把它重命名為setStateReportApprovedComplete。設置它的TargetStateName屬性為ReportCompleteState。7 重復上面步驟來設置ReportRejectedState。logToHistory
27、ReportrejectedState;completeTaskReportrejected;setStateReportrejectedComplete。8 Figure 5. Complete workflow layout添加代碼Now that you have designed your workflow, you must add code to provide the logic.To add code to the workflowAdd your own fields, as follows. 添加你的字段C#Copy Code/ Status.
28、160; private bool isReportApproved; / Report Information. private string employeeName;
29、; private string mngrEmail; private string mngrName; private double reportTotal;
30、; private string domain; Add properties for each field. You do not have to provide setters; getters are sufficient. 給每個字段添加屬性把下面代碼添加到onReportWorkflowActivated_Invoked中C#/ Read in Expense Report form values.
31、60; employeeName = workflowProperties.ItemEmployee Name.ToString(); mngrName = workflowProperties.ItemManager Name.ToString(); mngrEmail
32、= workflowProperties.ItemManager Email Address.ToString(); reportTotal = (double)workflowProperties.ItemReport Total; domain = workflowProperties.ItemDomain.ToString(); 關于如何設置infopath表單字段域,請看Creating a Custom Approval Workflow for SharePoint Server 2007 Using SharePoint Designer 2007把
33、下面代碼添加到createReportTask_MethodInvoking中C#/ Create unique Task Id.taskId = Guid.NewGuid(); / Set task properties. taskProperties.TaskType = 1; taskProperties.Title = Expense Report Approval; taskProperties.StartDate = DateTime.Today; taskProperties.PercentComplete = 0.0f; ta
34、skProperties.AssignedTo = Domain + + ManagerName;把下面代碼添加到onTaskChangedReportReviewed_Invoked中C#/ Retrieve report approval value from task form. string selVal = afterProperties.ExtendedPropertiesoptApproval.ToString();int val = 0;&
35、#160;if (!String.IsNullOrEmpty(selVal) if (Int32.TryParse(selVal, out val) if (val = 1) isReportApproved = true;
36、 / Show that the task is in progress. taskProperties.PercentComplete = 50; 把下面代碼添加到IsReportRejected方法中C#/ Check to see if report is rejected.if (!isReportApproved) e.Result = true; Add t
37、he following code to the IsReportApproved method. 把下面代碼添加到IsReportApproved方法中C#/ Check to see if report is approved.if (isReportApproved) e.Result = true; 把下面代碼添加到completeTaskReportApproved_MethodInvoking和completeTaskReportRejected_MethodInvoking方法中C#/ Complete the task. taskP
38、roperties.PercentComplete = 100; 現(xiàn)在添加日志代碼。把下面代碼添加到logToHistoryReportSubmittedState_MethodInvoking方法中。C#LogToHistoryListActivity log = (LogToHistoryListActivity)sender;if (log != null) log.HistoryDescription = Report Submitted; 重復上面的步驟,把上面代碼添加到logToHistroyReportApprovedState_MethodInvoking和logTo
39、HistoryReportRejectedState_MethodInvoking方法中,修改Report Submitted為Report Approved或者Report Rejected。修改Workflow.xml文件你要確定在Workflow.xml中包含你的費用報銷流程表單添加下面的元素作為MetaData的子元素。Xml<Task1_FormURN>urn:schemas-microsoft-comffice:infopath: ExpenseReportApprovalForm: -myXSD-2008-04-09T15-47-41</Task1_FormURN> 用你自己的費用報銷表單的URN替換上面的URN。你可以通過,在設計器中打開你的表單,然后點文件->屬性查看。添加TaskListContentTypeId屬性到Workflow元素中。XmlCopy CodeTaskListC 注意: 如果你的表單不能正確顯示,請檢查上面的編號是否正確。把CodeBesideClass的值為ExpenseReportStateMachineWF.ExpenseReportStateMachineWork
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年芬蘭語等級考試芬蘭語言學習成果研究試卷
- 咖啡廳飲品供應管理協(xié)議
- 社會保險繳納工資證明書(6篇)
- 2025年水上加油船項目申請報告
- 小明和爸爸的一次爬山經(jīng)歷記敘文作文4篇
- 2025年法語DELFDCLT級寫作測試試卷:翻譯技巧實戰(zhàn)分析
- 2025年小學英語畢業(yè)考試模擬卷:英語跨文化交際案例分析題庫
- 農(nóng)民土地流轉承包經(jīng)營權委托管理協(xié)議
- 酒店投資與管理權合作經(jīng)營協(xié)議
- 2025年差壓變送器項目申請報告
- 事業(yè)單位工勤人員技師考試職業(yè)道德復習試題
- The Old Man and The Sea 老人與海 中英文對照版
- 居委會開具的自建房證明
- ICU成年患者疼痛、躁動鎮(zhèn)靜、譫妄、制動及睡眠障礙的預防和管理的臨床實踐指南(PADIS)2018
- 冷凍水管道工程施工工藝
- 混凝土拌合站拆除方案
- 對照品管理SOP雙語
- 兩臺37kW三相交流電動機的動力配電柜設計(共21頁)
- 積雪草提取物對胃粘膜的保護作用及其機制探討
- 市中等職業(yè)學校學籍卡片(樣表)
- 手術室清潔消毒記錄表
評論
0/150
提交評論