SharePoint發行版本有SharePoint2003、SharePoint2007、Sharepoint 2010、SharePoint2013和SharePoint2016。SharePoint提供了功能強大的團隊協作環境,使得組織能夠在整個組織內部實現整合、組織、查找和提供 SharePoint站點。 簡單介紹下狀態機工作流,狀態機工作流提供了一系列的狀態。工作流從初始狀態開始,到終止狀態結束。兩個狀態之間定義行為進行過渡。通常情況下,狀態機工作流對事件作出反應,事件的發生將會使狀態發生改變。 1、新建項目,選擇SharePoint解決方案,創建空項目: 2、選擇調試站點,部署為場解決方案,如下圖: 3、添加新項,選擇“Office/SharePoint”下面的“狀態機工作流(僅場解決方案)”: 4、選擇列表工作流,修改工作流名稱為“日常報銷”: 5、選擇調試時使用的列表,并選擇任務列表和歷史記錄列表;如果項目創建完畢,想要修改調試列表,可以在工作流項目上右鍵屬性; 6、選擇工作流的啟動方式,如下圖: 7、修改Feature配置要部署的工作流: 8、然后回到開發界面,準備畫流程圖: 9、添加狀態,并設置一個為“已完成狀態”,同時右鍵重命名各個狀態,如下圖: 10、添加事件驅動并重命名,添加連接線: 11、在狀態上右鍵,添加stateInitialization(用來CreatTask): 12、創建CreatTask,重命名并修改屬性,添加Correlation Token和OwnerActivityName; 13、創建任務ID,如下圖,記得選擇創建字段,點擊確定: 14、同任務ID創建任務屬性,如下圖: 15、雙擊CreatTask進入代碼視圖,給方法添加代碼: createJLTask_TaskId1 = Guid.NewGuid();createJLTask_TaskProperties1.Title = "經理待審批";createJLTask_TaskProperties1.AssignedTo = @"i:0#.w|spli.jing";createJLTask_TaskProperties1.DueDate = DateTime.Now.AddDays(1.0);createJLTask_TaskProperties1.ExtendedProperties.Add("狀態", "已啟動"); 如上面代碼,分別是任務ID、標題、分配人員、有效期和狀態屬性; (createJLTask_MethodInvoking方法代碼截圖) 16、返回到設計視圖,雙擊該狀態的事件驅動,進入事件驅動的視圖: 如下圖,添加OnTaskChanged事件,監視任務變化,重命名;添加After/Before屬性,類似上面任務ID,創建字段;修改Correlation Token和OwnerActivityName,和之前Task的相同即可;修改TaskId,修改為之前任務ID。 17、雙擊OnJLTaskChanged,添加方法代碼: onJLTaskChanged_AfterProperties1 = onJLTaskChanged.AfterProperties;onJLTaskChanged_BeforeProperties1 = onJLTaskChanged.BeforeProperties; (OnJLTaskChanged方法截圖) 18、添加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值,調試可以看到。 19、設置狀態,如下圖: 20、添加狀態字段,如下圖: 21、雙擊SetState創建方法: private void setStateToJL_MethodInvoking(object sender, EventArgs e){} 22、添加xml和擴展狀態代碼: 23、添加狀態的枚舉類型,如下圖: ![]() public enum SPWorkflowStatus{經理待審批 = 0,經理已拒絕 = 1,總經理待審批 = 2,總經理已拒絕 = 3,總裁待審批 = 4,總裁已拒絕 = 5,報銷審批通過 = 6,Max = 15} ![]() 24、完成剛剛創建的setStateToJL_MethodInvoking方法 setStateToJL_State1 = (Int32)SPWorkflowStatus.Max; 25、如此方法創建ZJLstateActivity、ZCstateActivity兩個狀態,在此不一一重復了,配置好的流程圖,附后: 審批流程描述: 普通員工 – 經理審批 – 總經理審批 – 總裁審批; 經理 – 總經理審批 – 總裁審批; 總經理 – 總裁審批; 審批結果: 任意一級拒絕,工作流結束,狀態為該級別拒絕; 審批通過,可以報銷,狀態為審批通過。 流程運行過程 1、新建一條報銷; 2、 啟動新的工作流; 3、查看工作流狀態 4、 經理審批頁面,如下圖: 5、 經理審批后的狀態,如下圖: 6、 總經理審批后,總裁批準,如下圖: 7、 總裁已批準,日常報銷頁面,如下圖: 8、 總經理審批后,總裁批準,如下圖: 9、 總裁已拒絕,日常報銷頁面,如下圖: 結束語 以上,就是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; }} ![]() 結果如下圖: Sharepoint 可以幫助企業用戶輕松完成日常工作。 |
溫馨提示:喜歡本站的話,請收藏一下本站!