用SPD設計無代碼工作流比較簡單實用,這裡就來探讨一下如何用SPD設計以下流程的工作流。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0NXYFhGd192UvwVe0lmdhJ3ZvwFM38CXlZHbvN3cpR2Lc1TPB10QGtWUCpEMJ9CXsxWam9CXwADNvwVZ6l2c052bm9CXUJDT1wkNhVzLcRnbvZ2Lcl3Y6h1aW12Yth3VZZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39DM0YzMwkjM5ATOxgDMzEDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
要求: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個,沒有報錯。