




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、例子1地址:狀態(tài)機(jī)工作流主要跟以下幾個(gè)活動有關(guān)。State:表示一個(gè)審批狀態(tài)。內(nèi)部可以放置StateInitialization、EventDrivenActivity和StateFinalization 3個(gè)活動。StateInitialization:用來初始化狀態(tài),一般在這個(gè)活動內(nèi)部添加CreateTask實(shí)現(xiàn)任務(wù)的創(chuàng)建。StateFinalization:當(dāng)狀態(tài)結(jié)束時(shí)被執(zhí)行。 EventDrivenActivity:用來接受事件,一般在內(nèi)部放置一個(gè)OnTaskChange活動等待任務(wù)完成。SetState:用來實(shí)現(xiàn)流程狀態(tài)的跳轉(zhuǎn)。SetState活動一般放置在OnTaskCh
2、ange活動后,在任務(wù)完成后按照任務(wù)表單域設(shè)置流程狀態(tài)。拖曳4個(gè)State活動到設(shè)計(jì)器中。分別改名為preApprovalActivity、approvalActivity、reSubmitActivity和completeActivity。通過右鍵菜單,將completeActivity活動設(shè)置為終止?fàn)顟B(tài),如圖。1 雙擊Workflow1InitialState活動中的"EventDriven"活動,在其中添加一個(gè)SetState活動,設(shè)置其TargetState為"preApprovalActivity"。2 添加CreateTask活動,創(chuàng)建審批任
3、務(wù)。拖曳stateInitializationActivity到preApprovalActivity內(nèi)部,雙擊"stateInitializationActivity",在stateInitializationActivity內(nèi)部添加一個(gè)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 = "文檔預(yù)審"preAp
5、provalTaskProperties.TaskType = 0; /審批任務(wù)采用第一個(gè)任務(wù)表單preApprovalTaskProperties.AssignedTo = "codeartuser1" /指定審批人/設(shè)置任務(wù)編輯權(quán)限preApprovalTaskSpecialPermissions.Clear(); preApprovalTaskSpecialPermissions.Add(preApprovalTaskProperties. AssignedTo, SPRoleType.Contributor);以上代碼將文檔預(yù)審任務(wù)分配給user1。4 添加OnTa
6、skChanged活動,等待任務(wù)完成,并進(jìn)行處理。返回到工作流設(shè)計(jì)器界面,拖曳EventDriven活動到preApprovalActivity,雙擊"EventDriven"活動,在EventDriven活動中添加OnTaskChanged活動,改名為"onPreApprovalTaskChanged"。設(shè)置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域設(shè)置審批狀態(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 + "審批時(shí)間:" + DateTime.Now + "審批意見:" + comments, "");6 設(shè)置狀態(tài)轉(zhuǎn)換邏輯。添加一個(gè)IfElse活動到EventDrive
10、n活動中,并添加一個(gè)條件分支。設(shè)置第1個(gè)分支的Condition為規(guī)則條件,名稱為"IsApproval",表達(dá)式為:this.approvalState = ApprovalState.Approval在第1個(gè)分支中添加1個(gè)SetState活動,設(shè)置其TargetState為approvalActivity。設(shè)置第2個(gè)分支的Condition為規(guī)則條件,名稱為"IsReSubmit",表達(dá)式為:this.approvalState = ApprovalState.ReSubmit在第2個(gè)分支中添加1個(gè)SetState活動,設(shè)置其TargetState為
11、"reSubmitActivity"。設(shè)置第3個(gè)分支的Condition為規(guī)則條件,名稱為"IsComplete",表達(dá)式為:this.approvalState = ApprovalState.Complete在第3個(gè)分支中添加1個(gè)SetState活動,設(shè)置其TargetState為completeActivity。最后的EventDriven活動設(shè)計(jì)器效果如圖所示。7 按照同樣的步驟,完成approvalActivity活動和reSubmitActivity活動的設(shè)置。最終的設(shè)計(jì)器如圖所示。從以上的流程可以看出示例項(xiàng)目中實(shí)現(xiàn)的流轉(zhuǎn)邏輯:preAppr
12、ovalActivity可以轉(zhuǎn)向reSubmitActivity、approvalActivity或completeActivity,而reSubmitActivity只能轉(zhuǎn)回preApprovalActivity,approvalActivity只能轉(zhuǎn)向completeActivity。例子2地址:建立一個(gè)sharepoint 2007 狀態(tài)機(jī)工作流項(xiàng)目1 打開vs20082 文件新建項(xiàng)目3 選擇sharepoint 2007狀態(tài)機(jī)工作流4 輸入工作流名稱ExpenseReportStateMachineWF5 輸入有效的sharepoint web url,如:6 庫或列表后面的選項(xiàng)選擇要
13、附加的庫或列表,然后下一步,完成。7 把workflow1.cs重命名為ExpenseReportStateMachineWorkflow.cs設(shè)計(jì)你的狀態(tài)機(jī)工作流添加狀態(tài)并設(shè)置開始和終止?fàn)顟B(tài)1 工作流里已經(jīng)默認(rèn)包含了一個(gè)名為Workflow1InitalState的狀態(tài)。在它上面點(diǎn)右鍵,選屬性,在屬性窗口里把名字改成ReportInitialState。2 打開工具欄,點(diǎn)開sharepoint工作流控件列表和Windows Workflow v3.0控件列表。3 Windows Workflow v3.0類別中選擇State,并且把它拖拽到設(shè)計(jì)器中。注:State就是狀態(tài)機(jī)中的狀態(tài)4 打開它
14、的屬性,把名字改成ReportSubmittedState。5 再增加三個(gè)狀態(tài),它們的名字分別是ReportApprovedState, ReportRejectedState, ReportCompleteState。6 將ReportInitialState設(shè)置為開始狀態(tài),在它上面點(diǎn)右鍵,選設(shè)置為初始狀態(tài),在這個(gè)狀態(tài)的左上角的小圖標(biāo)里多出了一個(gè)綠色的標(biāo)志。7 將ReportCompleteState設(shè)置為結(jié)束狀態(tài),右鍵選擇設(shè)置為已完成狀態(tài),在這個(gè)狀態(tài)左上角的小圖標(biāo)里面多了一個(gè)紅色的標(biāo)志。開始和結(jié)束狀態(tài)所有用到的狀態(tài)已經(jīng)在設(shè)計(jì)器中,下面為狀態(tài)添加activities(行為)狀態(tài)支持以下幾種a
15、ctivities(行為): StateActivityEventDrivenActivityStateInitializationActivityStateFinalizationActivity這里只需要StateInitializationActivity和EventDrivenActivity兩種行為1 選擇ReportInitialState狀態(tài)下的eventDrivenActivity1。2 在它的屬性里重命名為eventInitWorkflow。3 拖拽一個(gè)StateInitializationActivity到ReportSubmittedState狀態(tài)中,并重命名為state
16、InitReportSubmittedState。4 在ReportApprovedState和ReportRejectedState狀態(tài)中重復(fù)上面一步的操作,并把它們重命名為stateInitReportApprovedState和stateInitReportRejectedState。5 Drag an EventDriven activity to the ReportSubmittedState. Rename it to eventReviewReport. 為ReportSubmittedState狀態(tài)拖拽一個(gè)EventDrivenActivity,并重命名為eventRevie
17、wReport。注意:拖拽的EventDriven應(yīng)該放在StateInitialization的下面。你的設(shè)計(jì)器中的工作流如下圖:下面,該為每個(gè)狀態(tài)填充更詳細(xì)的內(nèi)容。為初始化狀態(tài)添加詳細(xì)內(nèi)容 1 雙擊ReportInitialState狀態(tài)中的eventInitWorkflow,如圖:你可以通過視圖中頂部靠左邊的鏈接回到前面的視圖中。2 把onWorkflowActivated1重命名為onReportWorkflowActivated。3 在屬性窗口里面找到CorrelationToken屬性,并把它后面的下拉菜單中選擇workflowToken。點(diǎn)開CorrelationToken前面的
18、(+),在OwnerActivityName后面選擇ExpenseReportStateMachineWorkflow。找到WorkflowProperties屬性,點(diǎn)他后面的(.)。4 在新彈出的對話框中,選擇綁定到現(xiàn)有成員選項(xiàng)卡,選擇下面的workflowProperties,點(diǎn)確定。5 最后,你可以在onReportWorkflowActivated上點(diǎn)右鍵,選擇生成處理程序。它可以在后置代碼斷里自動生成一個(gè)方法,用來寫你自己的代碼。然后回到設(shè)計(jì)器中。6 拖拽一個(gè)CreateTask到onReportWorkflowActivated下面,并把它重命名為createReportTask。
19、7 在它的屬性窗口里面找到CorrelationToken屬性,輸入taskToken。點(diǎn)開CorrelationToken前面的(+),找到OwnerActivityName,選擇ExpenseReportStateMachineWorkflow。找到TaskId點(diǎn)擊后面的(.)。8 在新彈出的綁定對話框中,選擇綁定到新成員選項(xiàng)卡,輸入taskId選擇下面的創(chuàng)建字段,然后點(diǎn)確定。9 接下來,選擇TaskProperties屬性,點(diǎn)擊后面的(.),在綁定對話框中選擇綁定到新成員選項(xiàng)卡,輸入taskProperties,選擇創(chuàng)建字段,然后點(diǎn)確定。10 最后,可以在createReportTask
20、上點(diǎn)右鍵,選生成處理程序,在后置代碼中自動生成一個(gè)方法。11 拖拽一個(gè)SetState到createReportTask下面。注意:在vs2008中有兩個(gè)SetState。這里用到的是Windows Workflow v3.0下面的。12 把它重命名為setStateSubmitted,找到TargetStateName屬性,選擇ReportSubmittedState。點(diǎn)擊視圖頂部左邊的ExpenseReportStateMachineWorkflow鏈接,回到狀態(tài)視圖中為Submitted 狀態(tài)添加詳細(xì)內(nèi)容1. 雙擊ReportSubmittedState狀態(tài)下的stateInitRepo
21、rtSubmittedState來打開詳細(xì)視圖。2. 拖拽一個(gè)LogToHistoryListActivity行為到設(shè)計(jì)界面,并重命名為logToHistoryReportSubmittedState。3. 右擊logToHistoryReportSubmittedState,選擇生成處理程序。然后回到設(shè)計(jì)視圖中。4. 回到狀態(tài)視圖,雙擊ReportSubmittedState里面的eventReviewReport。拖拽一個(gè)onTaskChanged到設(shè)計(jì)視圖中,并改名為onTaskChangedReportReviewed。在屬性窗口中找到CorrelationToken,在下拉菜單中選擇
22、taskToken。5. 找到AfterProperties屬性,點(diǎn)開它后面的(.)。在綁定對話框中,選擇綁定到新成員選項(xiàng)卡。輸入afterProperties,選擇創(chuàng)建字段,然后點(diǎn)確定。重復(fù)步驟來設(shè)置BeforeProperties。6. 找到TaskId屬性,點(diǎn)擊后面的(.)。在綁定對話框中,選擇綁定到現(xiàn)有成員選項(xiàng)卡,選擇下面的taskId,然后點(diǎn)確定。7. 右擊onTaskChangedReportReviewed,選擇生成處理程序來寫自己的處理代碼。然后返回設(shè)計(jì)視圖。8. 拖拽IfElse到onTaskChangedReportReviewed下面,并重命名為ifElseReportR
23、eview。9. 把左邊的if分支重命名為ifElseReportApproved。在它的屬性里找到Condition屬性,在后面的下拉菜單中選擇代碼條件。打開Condition前面的(+),在下面的Condition后面輸入IsReportApproved,然后按回車。這時(shí)系統(tǒng)會自動建立一個(gè)空的方法,名為IsReportApproved,然后回到設(shè)計(jì)界面。10. 把第二個(gè)if分支重命名為ifElseReportRejected,在它的屬性里找到Condition屬性,在后面的下拉菜單中選擇代碼條件。打開Condition前面的(+),在下面的Condition后面輸入IsReportReje
24、cted,然后按回車。11. 拖拽一個(gè)SetState到if的第一分支上,也就是ifElseReportApproved,然后重命名為setStateReportApproved。在它的屬性里,找到TargetStateName屬性,在它后面的下拉菜單中選擇ReportApprovedState。12. 拖拽一個(gè)SetState到if的第二個(gè)分支上,然后重命名為setStateReportRejected。設(shè)置TargetStateName屬性為ReportRejectedState。13. 點(diǎn)擊設(shè)計(jì)視圖左上角的ExpenseReportStateMachineWorkflow鏈接,回到狀態(tài)視
25、圖。為通過審批狀態(tài)和沒通過審批狀態(tài)添加詳細(xì)內(nèi)容1 雙擊ReportApprovedState中的StateInitReportApprovedState。2 拖拽一個(gè)LogToHistoryListActivity到設(shè)計(jì)界面中,并重命名為logToHistoryReportApprovedState。3 右擊logToHistoryReportApprovedState,選擇生成處理程序。然后回到設(shè)計(jì)界面。4 拖拽一個(gè)CompleteTask到logToHistoryReportApprovedState下面,并重命名為completeTaskReportApproved。設(shè)置它的Correl
26、ationToken屬性為taskToken。點(diǎn)擊它的TaskId屬性后面的(.)。在綁定對話框中,選擇綁定到現(xiàn)有成員選項(xiàng)卡,然后選擇下面的taskId,然后點(diǎn)確定。5 右擊completeTaskReportApproved,選擇生成處理程序。然后返回到設(shè)計(jì)視圖。6 拖拽一個(gè)SetState到completeTaskReportApproved下面,并把它重命名為setStateReportApprovedComplete。設(shè)置它的TargetStateName屬性為ReportCompleteState。7 重復(fù)上面步驟來設(shè)置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. 給每個(gè)字段添加屬性把下面代碼添加到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(); 關(guān)于如何設(shè)置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; 重復(fù)上面的步驟,把上面代碼添加到logToHistroyReportApprovedState_MethodInvoking和logTo
39、HistoryReportRejectedState_MethodInvoking方法中,修改Report Submitted為Report Approved或者Report Rejected。修改Workflow.xml文件你要確定在Workflow.xml中包含你的費(fèi)用報(bào)銷流程表單添加下面的元素作為MetaData的子元素。Xml<Task1_FormURN>urn:schemas-microsoft-comffice:infopath: ExpenseReportApprovalForm: -myXSD-2008-04-09T15-47-41</Task1_FormURN> 用你自己的費(fèi)用報(bào)銷表單的URN替換上面的URN。你可以通過,在設(shè)計(jì)器中打開你的表單,然后點(diǎn)文件->屬性查看。添加TaskListContentTypeId屬性到Workflow元素中。XmlCopy CodeTaskListC 注意: 如果你的表單不能正確顯示,請檢查上面的編號是否正確。把CodeBesideClass的值為ExpenseReportStateMachineWF.ExpenseReportStateMachineWork
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司策劃活動方案
- 公司每天晨跑活動方案
- 2025年心理咨詢與心理治療基礎(chǔ)知識考試試題及答案
- 2025年市場營銷策劃考試試題及答案
- 2025年時(shí)尚設(shè)計(jì)師職業(yè)資格考試試卷及答案
- 2025年攝影師職業(yè)技能測試試題及答案
- 2025年民法典相關(guān)知識的考試試題及答案
- 2025年城市交通與環(huán)境問題分析考試試題及答案
- 2025年中國冷壓香皂行業(yè)市場全景分析及前景機(jī)遇研判報(bào)告
- 二型糖尿病的護(hù)理
- 2025年山東夏季高中學(xué)業(yè)水平合格考模擬生物試卷(含答案)
- 大連海事大學(xué)育鯤輪電機(jī)員培訓(xùn)課件詳解
- GB/T 45577-2025數(shù)據(jù)安全技術(shù)數(shù)據(jù)安全風(fēng)險(xiǎn)評估方法
- IgG4腎病的診斷和治療
- 中國啤酒籃行業(yè)市場發(fā)展前景及發(fā)展趨勢與投資戰(zhàn)略研究報(bào)告2025-2028版
- 2025年中國直接結(jié)合鎂鉻磚數(shù)據(jù)監(jiān)測研究報(bào)告
- 會議流程規(guī)劃能力試題及答案
- 中藥硬膏熱貼敷操作流程
- 西安歷年美術(shù)中考題及答案
- 國家開放大學(xué)《管理學(xué)基礎(chǔ)》形考任務(wù)1-4答案
- 眩暈中醫(yī)臨床路徑解讀
評論
0/150
提交評論