狀態(tài)機(jī)工作流例子_第1頁
狀態(tài)機(jī)工作流例子_第2頁
狀態(tài)機(jī)工作流例子_第3頁
狀態(tài)機(jī)工作流例子_第4頁
狀態(tài)機(jī)工作流例子_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論