




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、例子1地址:狀態(tài)機(jī)工作流主要跟以下幾個活動有關(guān)。State:表示一個審批狀態(tài)。內(nèi)部可以放置StateInitialization、EventDrivenActivity和StateFinalization 3個活動。StateInitialization:用來初始化狀態(tài),一般在這個活動內(nèi)部添加CreateTask實現(xiàn)任務(wù)的創(chuàng)建。StateFinalization:當(dāng)狀態(tài)結(jié)束時被執(zhí)行。 EventDrivenActivity:用來接受事件,一般在內(nèi)部放置一個OnTaskChange活動等待任務(wù)完成。SetState:用來實現(xiàn)流程狀態(tài)的跳轉(zhuǎn)。SetState活動一般放置在OnTaskCh
2、ange活動后,在任務(wù)完成后按照任務(wù)表單域設(shè)置流程狀態(tài)。拖曳4個State活動到設(shè)計器中。分別改名為preApprovalActivity、approvalActivity、reSubmitActivity和completeActivity。通過右鍵菜單,將completeActivity活動設(shè)置為終止?fàn)顟B(tài),如圖。1 雙擊Workflow1InitialState活動中的"EventDriven"活動,在其中添加一個SetState活動,設(shè)置其TargetState為"preApprovalActivity"。2 添加CreateTask活動,創(chuàng)建審批任
3、務(wù)。拖曳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 = "文檔預(yù)審"preAp
5、provalTaskProperties.TaskType = 0; /審批任務(wù)采用第一個任務(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è)計器界面,拖曳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 + "審批時間:" + DateTime.Now + "審批意見:" + comments, "");6 設(shè)置狀態(tài)轉(zhuǎn)換邏輯。添加一個IfElse活動到EventDrive
10、n活動中,并添加一個條件分支。設(shè)置第1個分支的Condition為規(guī)則條件,名稱為"IsApproval",表達(dá)式為:this.approvalState = ApprovalState.Approval在第1個分支中添加1個SetState活動,設(shè)置其TargetState為approvalActivity。設(shè)置第2個分支的Condition為規(guī)則條件,名稱為"IsReSubmit",表達(dá)式為:this.approvalState = ApprovalState.ReSubmit在第2個分支中添加1個SetState活動,設(shè)置其TargetState為
11、"reSubmitActivity"。設(shè)置第3個分支的Condition為規(guī)則條件,名稱為"IsComplete",表達(dá)式為:this.approvalState = ApprovalState.Complete在第3個分支中添加1個SetState活動,設(shè)置其TargetState為completeActivity。最后的EventDriven活動設(shè)計器效果如圖所示。7 按照同樣的步驟,完成approvalActivity活動和reSubmitActivity活動的設(shè)置。最終的設(shè)計器如圖所示。從以上的流程可以看出示例項目中實現(xiàn)的流轉(zhuǎn)邏輯:preAppr
12、ovalActivity可以轉(zhuǎn)向reSubmitActivity、approvalActivity或completeActivity,而reSubmitActivity只能轉(zhuǎn)回preApprovalActivity,approvalActivity只能轉(zhuǎn)向completeActivity。例子2地址:建立一個sharepoint 2007 狀態(tài)機(jī)工作流項目1 打開vs20082 文件新建項目3 選擇sharepoint 2007狀態(tài)機(jī)工作流4 輸入工作流名稱ExpenseReportStateMachineWF5 輸入有效的sharepoint web url,如:6 庫或列表后面的選項選擇要
13、附加的庫或列表,然后下一步,完成。7 把workflow1.cs重命名為ExpenseReportStateMachineWorkflow.cs設(shè)計你的狀態(tài)機(jī)工作流添加狀態(tài)并設(shè)置開始和終止?fàn)顟B(tài)1 工作流里已經(jīng)默認(rèn)包含了一個名為Workflow1InitalState的狀態(tài)。在它上面點(diǎn)右鍵,選屬性,在屬性窗口里把名字改成ReportInitialState。2 打開工具欄,點(diǎn)開sharepoint工作流控件列表和Windows Workflow v3.0控件列表。3 Windows Workflow v3.0類別中選擇State,并且把它拖拽到設(shè)計器中。注:State就是狀態(tài)機(jī)中的狀態(tài)4 打開它
14、的屬性,把名字改成ReportSubmittedState。5 再增加三個狀態(tài),它們的名字分別是ReportApprovedState, ReportRejectedState, ReportCompleteState。6 將ReportInitialState設(shè)置為開始狀態(tài),在它上面點(diǎn)右鍵,選設(shè)置為初始狀態(tài),在這個狀態(tài)的左上角的小圖標(biāo)里多出了一個綠色的標(biāo)志。7 將ReportCompleteState設(shè)置為結(jié)束狀態(tài),右鍵選擇設(shè)置為已完成狀態(tài),在這個狀態(tài)左上角的小圖標(biāo)里面多了一個紅色的標(biāo)志。開始和結(jié)束狀態(tài)所有用到的狀態(tài)已經(jīng)在設(shè)計器中,下面為狀態(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)中重復(fù)上面一步的操作,并把它們重命名為stateInitReportApprovedState和stateInitReportRejectedState。5 Drag an EventDriven activity to the ReportSubmittedState. Rename it to eventReviewReport. 為ReportSubmittedState狀態(tài)拖拽一個EventDrivenActivity,并重命名為eventRevie
17、wReport。注意:拖拽的EventDriven應(yīng)該放在StateInitialization的下面。你的設(shè)計器中的工作流如下圖:下面,該為每個狀態(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)有成員選項卡,選擇下面的workflowProperties,點(diǎn)確定。5 最后,你可以在onReportWorkflowActivated上點(diǎn)右鍵,選擇生成處理程序。它可以在后置代碼斷里自動生成一個方法,用來寫你自己的代碼。然后回到設(shè)計器中。6 拖拽一個CreateTask到onReportWorkflowActivated下面,并把它重命名為createReportTask。
19、7 在它的屬性窗口里面找到CorrelationToken屬性,輸入taskToken。點(diǎn)開CorrelationToken前面的(+),找到OwnerActivityName,選擇ExpenseReportStateMachineWorkflow。找到TaskId點(diǎn)擊后面的(.)。8 在新彈出的綁定對話框中,選擇綁定到新成員選項卡,輸入taskId選擇下面的創(chuàng)建字段,然后點(diǎn)確定。9 接下來,選擇TaskProperties屬性,點(diǎn)擊后面的(.),在綁定對話框中選擇綁定到新成員選項卡,輸入taskProperties,選擇創(chuàng)建字段,然后點(diǎn)確定。10 最后,可以在createReportTask
20、上點(diǎn)右鍵,選生成處理程序,在后置代碼中自動生成一個方法。11 拖拽一個SetState到createReportTask下面。注意:在vs2008中有兩個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. 拖拽一個LogToHistoryListActivity行為到設(shè)計界面,并重命名為logToHistoryReportSubmittedState。3. 右擊logToHistoryReportSubmittedState,選擇生成處理程序。然后回到設(shè)計視圖中。4. 回到狀態(tài)視圖,雙擊ReportSubmittedState里面的eventReviewReport。拖拽一個onTaskChanged到設(shè)計視圖中,并改名為onTaskChangedReportReviewed。在屬性窗口中找到CorrelationToken,在下拉菜單中選擇
22、taskToken。5. 找到AfterProperties屬性,點(diǎn)開它后面的(.)。在綁定對話框中,選擇綁定到新成員選項卡。輸入afterProperties,選擇創(chuàng)建字段,然后點(diǎn)確定。重復(fù)步驟來設(shè)置BeforeProperties。6. 找到TaskId屬性,點(diǎn)擊后面的(.)。在綁定對話框中,選擇綁定到現(xiàn)有成員選項卡,選擇下面的taskId,然后點(diǎn)確定。7. 右擊onTaskChangedReportReviewed,選擇生成處理程序來寫自己的處理代碼。然后返回設(shè)計視圖。8. 拖拽IfElse到onTaskChangedReportReviewed下面,并重命名為ifElseReportR
23、eview。9. 把左邊的if分支重命名為ifElseReportApproved。在它的屬性里找到Condition屬性,在后面的下拉菜單中選擇代碼條件。打開Condition前面的(+),在下面的Condition后面輸入IsReportApproved,然后按回車。這時系統(tǒng)會自動建立一個空的方法,名為IsReportApproved,然后回到設(shè)計界面。10. 把第二個if分支重命名為ifElseReportRejected,在它的屬性里找到Condition屬性,在后面的下拉菜單中選擇代碼條件。打開Condition前面的(+),在下面的Condition后面輸入IsReportReje
24、cted,然后按回車。11. 拖拽一個SetState到if的第一分支上,也就是ifElseReportApproved,然后重命名為setStateReportApproved。在它的屬性里,找到TargetStateName屬性,在它后面的下拉菜單中選擇ReportApprovedState。12. 拖拽一個SetState到if的第二個分支上,然后重命名為setStateReportRejected。設(shè)置TargetStateName屬性為ReportRejectedState。13. 點(diǎn)擊設(shè)計視圖左上角的ExpenseReportStateMachineWorkflow鏈接,回到狀態(tài)視
25、圖。為通過審批狀態(tài)和沒通過審批狀態(tài)添加詳細(xì)內(nèi)容1 雙擊ReportApprovedState中的StateInitReportApprovedState。2 拖拽一個LogToHistoryListActivity到設(shè)計界面中,并重命名為logToHistoryReportApprovedState。3 右擊logToHistoryReportApprovedState,選擇生成處理程序。然后回到設(shè)計界面。4 拖拽一個CompleteTask到logToHistoryReportApprovedState下面,并重命名為completeTaskReportApproved。設(shè)置它的Correl
26、ationToken屬性為taskToken。點(diǎn)擊它的TaskId屬性后面的(.)。在綁定對話框中,選擇綁定到現(xiàn)有成員選項卡,然后選擇下面的taskId,然后點(diǎn)確定。5 右擊completeTaskReportApproved,選擇生成處理程序。然后返回到設(shè)計視圖。6 拖拽一個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. 給每個字段添加屬性把下面代碼添加到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)用報銷流程表單添加下面的元素作為MetaData的子元素。Xml<Task1_FormURN>urn:schemas-microsoft-comffice:infopath: ExpenseReportApprovalForm: -myXSD-2008-04-09T15-47-41</Task1_FormURN> 用你自己的費(fèi)用報銷表單的URN替換上面的URN。你可以通過,在設(shè)計器中打開你的表單,然后點(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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 文創(chuàng)集團(tuán)面試題目及答案
- 電子基礎(chǔ)試題及答案
- 2025年計算機(jī)二級考試模擬題解析及答案
- 2025智能機(jī)器人專項技術(shù)服務(wù)合同
- 湖北電工單相電機(jī)考試題及答案
- 重要知識點(diǎn)初級社會工作者試題及答案
- 2025成品房屋買賣合同范本
- 2016助理試題及答案
- 保育師筆試題庫及答案
- 多媒體內(nèi)容創(chuàng)作測試及答案
- GB/T 2703-2017鞋類術(shù)語
- GB/T 15968-2008遙感影像平面圖制作規(guī)范
- GB/T 12359-2008梯形螺紋極限尺寸
- GB/T 10125-2021人造氣氛腐蝕試驗鹽霧試驗
- 素混凝土灌注CFG樁施工技術(shù)
- DBJ51-T 198-2022 四川省既有民用建筑結(jié)構(gòu)安全隱患排查技術(shù)標(biāo)準(zhǔn)
- 智能樓宇管理員(四級)理論考試(重點(diǎn))題庫(含答案)
- 2分鐘雙人相聲劇本
- 脈沖編碼調(diào)制與解調(diào)實驗報告
- 人教版五年級下冊數(shù)學(xué)找次品表格式教案設(shè)計
- EAM實施和應(yīng)用
評論
0/150
提交評論