SharePoint Designer2010 设计多级审批工作流。

      


       用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("117738414@qq.com", "发件人姓名", 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个,没有报错。

 


展开阅读全文

没有更多推荐了,返回首页