SharePoint 2013 狀態機工做流之平常報銷示例

  簡單介紹下狀態機工做流,狀態機工做流提供了一系列的狀態。工做流從初始狀態開始,到終止狀態結束。兩個狀態之間定義行爲進行過渡。一般狀況下,狀態機工做流對事件做出反應,事件的發生將會使狀態發生改變。學習

一、新建項目,選擇SharePoint解決方案,建立空項目:ui

clip_image001

二、選擇調試站點,部署爲場解決方案,以下圖:spa

clip_image002

三、添加新項,選擇「Office/SharePoint」下面的「狀態機工做流(僅場解決方案)」:.net

clip_image003

四、選擇列表工做流,修改工做流名稱爲「平常報銷」:設計

clip_image004

五、選擇調試時使用的列表,並選擇任務列表和歷史記錄列表;若是項目建立完畢,想要修改調試列表,能夠在工做流項目上右鍵屬性;3d

clip_image005

六、選擇工做流的啓動方式,以下圖:調試

clip_image006

七、修改Feature配置要部署的工做流:code

clip_image007

八、而後回到開發界面,準備畫流程圖:視頻

clip_image008

九、添加狀態,並設置一個爲「已完成狀態」,同時右鍵重命名各個狀態,以下圖:xml

clip_image009

十、添加事件驅動並重命名,添加鏈接線:

clip_image010

十一、在狀態上右鍵,添加stateInitialization(用來CreatTask):

clip_image011

十二、建立CreatTask,重命名並修改屬性,添加Correlation Token和OwnerActivityName;

clip_image012

1三、建立任務ID,以下圖,記得選擇建立字段,點擊肯定:

clip_image013

1四、同任務ID建立任務屬性,以下圖:

clip_image014

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、標題、分配人員、有效期和狀態屬性;

clip_image015

createJLTask_MethodInvoking方法代碼截圖)

1六、返回到設計視圖,雙擊該狀態的事件驅動,進入事件驅動的視圖:

  以下圖,添加OnTaskChanged事件,監視任務變化,重命名;添加After/Before屬性,相似上面任務ID,建立字段;修改Correlation Token和OwnerActivityName,和以前Task的相同便可;修改TaskId,修改成以前任務ID。

clip_image016

1七、雙擊OnJLTaskChanged,添加方法代碼:

onJLTaskChanged_AfterProperties1 = onJLTaskChanged.AfterProperties;
onJLTaskChanged_BeforeProperties1 = onJLTaskChanged.BeforeProperties;

clip_image017

OnJLTaskChanged方法截圖)

1八、添加IF…ELSE…,以下圖:

clip_image018

添加分支判斷的代碼條件,併爲方法添加方法體:

方法以下,若是審批經過則走左側分支,不然右側分支;

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九、設置狀態,以下圖:

clip_image019

20、添加狀態字段,以下圖:

clip_image020

2一、雙擊SetState建立方法:

private void setStateToJL_MethodInvoking(object sender, EventArgs e)

{

}

2二、添加xml和擴展狀態代碼:

clip_image021

2三、添加狀態的枚舉類型,以下圖:

public enum SPWorkflowStatus

{

經理待審批 = 0,

經理已拒絕 = 1,

總經理待審批 = 2,

總經理已拒絕 = 3,

總裁待審批 = 4,

總裁已拒絕 = 5,

報銷審批經過 = 6,

Max = 15

}

2四、完成剛剛建立的setStateToJL_MethodInvoking方法

setStateToJL_State1 = (Int32)SPWorkflowStatus.Max;

clip_image022

2五、如此方法建立ZJLstateActivity、ZCstateActivity兩個狀態,在此不一一重複了,配置好的流程圖,附後:

clip_image023

審批流程描述:

普通員工 – 經理審批 – 總經理審批 – 總裁審批;

經理 – 總經理審批 – 總裁審批;

總經理 – 總裁審批;

審批結果:

任意一級拒絕,工做流結束,狀態爲該級別拒絕;

審批經過,能夠報銷,狀態爲審批經過。

流程運行過程

一、新建一條報銷;

clip_image024

二、 啓動新的工做流;

clip_image025

三、查看工做流狀態

clip_image026

clip_image027

四、 經理審批頁面,以下圖:

clip_image028

五、 經理審批後的狀態,以下圖:

clip_image029

六、 總經理審批後,總裁批准,以下圖:

clip_image030

七、 總裁已批准,平常報銷頁面,以下圖:

clip_image031

八、 總經理審批後,總裁批准,以下圖:

clip_image032

九、 總裁已拒絕,平常報銷頁面,以下圖:

clip_image033

結束語

  以上,就是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;
    }
}

   結果以下圖:

  代碼下載SPStateMechineWorkFlow.rar~~

相關文章
相關標籤/搜索