簡單介紹下狀態機工做流,狀態機工做流提供了一系列的狀態。工做流從初始狀態開始,到終止狀態結束。兩個狀態之間定義行爲進行過渡。一般狀況下,狀態機工做流對事件做出反應,事件的發生將會使狀態發生改變。學習
一、新建項目,選擇SharePoint解決方案,建立空項目:ui
二、選擇調試站點,部署爲場解決方案,以下圖:spa
三、添加新項,選擇「Office/SharePoint」下面的「狀態機工做流(僅場解決方案)」:.net
四、選擇列表工做流,修改工做流名稱爲「平常報銷」:設計
五、選擇調試時使用的列表,並選擇任務列表和歷史記錄列表;若是項目建立完畢,想要修改調試列表,能夠在工做流項目上右鍵屬性;3d
六、選擇工做流的啓動方式,以下圖:調試
七、修改Feature配置要部署的工做流:code
八、而後回到開發界面,準備畫流程圖:視頻
九、添加狀態,並設置一個爲「已完成狀態」,同時右鍵重命名各個狀態,以下圖:xml
十、添加事件驅動並重命名,添加鏈接線:
十一、在狀態上右鍵,添加stateInitialization(用來CreatTask):
十二、建立CreatTask,重命名並修改屬性,添加Correlation Token和OwnerActivityName;
1三、建立任務ID,以下圖,記得選擇建立字段,點擊肯定:
1四、同任務ID建立任務屬性,以下圖:
1五、雙擊CreatTask進入代碼視圖,給方法添加代碼:
createJLTask_TaskId1 = Guid.NewGuid(); createJLTask_TaskProperties1.Title = "經理待審批"; createJLTask_TaskProperties1.AssignedTo = @"i:0#.w|sp\li.jing"; createJLTask_TaskProperties1.DueDate = DateTime.Now.AddDays(1.0); createJLTask_TaskProperties1.ExtendedProperties.Add("狀態", "已啓動");
如上面代碼,分別是任務ID、標題、分配人員、有效期和狀態屬性;
(createJLTask_MethodInvoking方法代碼截圖)
1六、返回到設計視圖,雙擊該狀態的事件驅動,進入事件驅動的視圖:
以下圖,添加OnTaskChanged事件,監視任務變化,重命名;添加After/Before屬性,相似上面任務ID,建立字段;修改Correlation Token和OwnerActivityName,和以前Task的相同便可;修改TaskId,修改成以前任務ID。
1七、雙擊OnJLTaskChanged,添加方法代碼:
onJLTaskChanged_AfterProperties1 = onJLTaskChanged.AfterProperties;
onJLTaskChanged_BeforeProperties1 = onJLTaskChanged.BeforeProperties;
(OnJLTaskChanged方法截圖)
1八、添加IF…ELSE…,以下圖:
添加分支判斷的代碼條件,併爲方法添加方法體:
方法以下,若是審批經過則走左側分支,不然右側分支;
public Guid TaskStatusFieldId = new Guid("55b29417-1042-47f0-9dff-ce8156667f96"); private void NextToZJL(object sender, ConditionalEventArgs e) { string strresult = onJLTaskChanged_AfterProperties1.ExtendedProperties[TaskStatusFieldId].ToString(); if (strresult == "已批准") { e.Result = true; } else { e.Result = false; } }
特:TaskStatusFieldId是ExtendedProperties的一個Key值,調試能夠看到。
1九、設置狀態,以下圖:
20、添加狀態字段,以下圖:
2一、雙擊SetState建立方法:
private void setStateToJL_MethodInvoking(object sender, EventArgs e) { }
2二、添加xml和擴展狀態代碼:
2三、添加狀態的枚舉類型,以下圖:
public enum SPWorkflowStatus { 經理待審批 = 0, 經理已拒絕 = 1, 總經理待審批 = 2, 總經理已拒絕 = 3, 總裁待審批 = 4, 總裁已拒絕 = 5, 報銷審批經過 = 6, Max = 15 }
2四、完成剛剛建立的setStateToJL_MethodInvoking方法
setStateToJL_State1 = (Int32)SPWorkflowStatus.Max;
2五、如此方法建立ZJLstateActivity、ZCstateActivity兩個狀態,在此不一一重複了,配置好的流程圖,附後:
審批流程描述:
普通員工 – 經理審批 – 總經理審批 – 總裁審批;
經理 – 總經理審批 – 總裁審批;
總經理 – 總裁審批;
審批結果:
任意一級拒絕,工做流結束,狀態爲該級別拒絕;
審批經過,能夠報銷,狀態爲審批經過。
流程運行過程
一、新建一條報銷;
二、 啓動新的工做流;
三、查看工做流狀態
四、 經理審批頁面,以下圖:
五、 經理審批後的狀態,以下圖:
六、 總經理審批後,總裁批准,以下圖:
七、 總裁已批准,平常報銷頁面,以下圖:
八、 總經理審批後,總裁批准,以下圖:
九、 總裁已拒絕,平常報銷頁面,以下圖:
結束語
以上,就是SharePoint 2013狀態機工做流的簡單示例,例子比較簡單,但願你們不要吐槽,也但願可以給須要學習的人以參考。
其實,作工做流的過程,本身也常常吐槽,確實是一個痛苦的過程,接下來還想寫表單來跑工做流,不知道還有沒有耐心繼續寫下去了,呵呵,好了,不吐槽了,就這樣吧。
總 結
由於截圖比較倉促,不少地方可能介紹並不詳細,特此作一個總結。SharePoint狀態機工做流的設計過程:添加工做流狀態 – 添加事件驅動 – 勾畫流程圖 – 添加工做流初始化 – 添加任務(CreatTask) - 事件驅動裏添加OnTaskChanged事件 – 設置IF..ELSE等選擇語句 – 設置流程結束狀態。基本上就是這樣一個過程,但願你們理解後再動手作。
回覆一樓留言
簡單修改下流程~
IF...ELSE分支加代碼
private void IfMoneyBelow500(object sender, ConditionalEventArgs e) { if (Convert.ToInt32(workflowProperties.Item["報銷金額"].ToString()) >= 500) { e.Result = true; } else { e.Result = false; } }
結果以下圖: