用SPD設計無代碼工作流比較簡單實用,這裏就來探討一下如何用SPD設計以下流程的工作流。
要求:1.部門內部流程分爲兩級:辦事員審批、部門經理審批。
2.如果審批不通過,下次再次開啓工作流,則通過的部門不需要再進行審批。
3.可將審覈情況的數據通過接口發送郵件到sharepoint外部。
分析:1.企業信息錄入系統,啓動工作流,可在Sharepoint中建立list工作流,將其啓動模式設置爲添加新Item時自動啓動。
2. 四個部門並行審覈,部門內部串行審覈(辦事員--部門經理),部門審覈全部通過之後副總再審覈。
3.通過的部門以後工作流啓動不需要再次進行審覈,通知只需要發送到審覈未通過的部門,這裏就需要將審批流程的參與者以參數的形式來表示,方便控制。
4.外部郵件的發送我們採用編寫代碼來爲Sharepoint添加這個Feature。
分析完畢,我們開始看看大概步驟:
1.列表建立:
企業申請表列:
這裏有3張列表,第一張企業申請表記錄企業內容,同時建立了4個字段來保存各部門審覈情況,方便下次進行工作流時進行參與者參數設定。
任務列表是自動建立的,用來讓參與者接受相應任務。
郵件內容列表用來保存要發送的郵件內容。
2.工作流編寫:
(1)設置參與者參數:
四個啓動參數:first,second,third,forth代表了參與人員。
@10表示 部門辦事員通過,部門經理沒通過。@11表示 部門全部通過。 以此類推。
(2)部門審批:
這裏建立了四個並行運行的各部門審批流程,每一個審批流程又是串行執行的。爲了控制相應的值的變化,我們需要在審批流程中相應地方加上一些操作,以方便改變參數,或者寫郵件內容,向外部發送郵件。
例如發送郵件:我需要在審批批准或者拒絕之後向外部發送郵件,則我應該先在審批拒絕或者批准之後向 郵件內容列表 添加一條內容,同時利用Sharepoint EventHandler, ItemAdded事件,在添加完成之後向外部發送郵件內容。下面看看我們是在哪裏向郵件內容添加一條數據的。
進入一個審批流程--更改單個任務的行爲:
如果@11,則表示該部門都通過審批,則爲郵件內容表創建新項。
爲了靈活控制審批工作流,還有很多地方需要設置,這裏我就不一一說明,需要稍微學習一下審批流程如何工作的才能靈活的在各個地方加上需要的操作。 ”更改單個任務行爲“ 表示 把串行的”參與人“分成一個一個單個任務,”更改總體任務流程行爲“表示控制整個審批流程。
(3)最後部門副總審批。
3.編寫EventHandler發送郵件:
打開VS--建立Sharepoint空白網站--添加項--EventReciever--建立ItemAdded。
在生成的CS文件中編寫代碼,最後部署到Sharepoint網站。
Code:
using System;
using System.Security.Permissions;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Security;
using Microsoft.SharePoint.Utilities;
using Microsoft.SharePoint.Workflow;
using System.Net;
using System.Net.Mail;
using System.Net.Mime;
using System.Text;
namespace SharePointProject4.EventReceiver1
{
/// <summary>
/// 列表項事件
/// </summary>
public class EventReceiver1 : SPItemEventReceiver
{
/// <summary>
/// 已添加項.
/// </summary>
public override void ItemAdded(SPItemEventProperties properties)
{
base.ItemAdded(properties);
string mailTitle = "";
string mailContent = "";
string address = "";
if (properties.ListTitle == "郵件內容")
{
SPListItem item = properties.ListItem;
mailTitle = item["標題"].ToString();
mailContent = item["郵件內容"].ToString();
address = item["郵件地址"].ToString();
}
SendEmail(mailTitle, mailContent, address);
}
public void SendEmail(string title, string content, string address)
{
try
{
Encoding encoding = Encoding.GetEncoding(936);
MailMessage Message = new MailMessage(
//from
new MailAddress("[email protected]", "發件人姓名", encoding),
//to
new MailAddress(address));
Message.SubjectEncoding = encoding;
Message.Subject = title;
Message.BodyEncoding = encoding;
Message.Body = content;
//Message.Attachments.Add(new Attachment(null));
SmtpClient smtpClient = new SmtpClient("smtp.qq.com");
smtpClient.Credentials = new NetworkCredential("2313626895", "password");
smtpClient.Timeout = 20000;
smtpClient.Send(Message);
}
catch (Exception ex)
{
}
}
}
}
大致步驟是這樣,中間有些細節沒寫出來。
還有在做的時候發現一個問題,用SPD建審批工作流的時候,一個工作流裏面只能有5個審批流程,多了一個就會報錯。不知道什麼原因。
我上面剛好用到5個,沒有報錯。