开发SharePoint中的定制流程动作

上一篇文章里面,我发布了一个SharePointWorkflow引擎。其中提到了用户可以根据自己的要求,自己定制需要的流程动作,并插入到流程定义文件中。这篇文章演示了如何开发定制的流程动作:给一个指定的Email地址发送一封邮件,告知有新的报告来了

 

打开VS.NET,新建一个“类库”项目,在项目中加入两个Assembly的引用:Kaneboy.SPSWorkflow.dllMicrosoft.SharePoint.dll

 

编写自定义流程动作,其实就是创建一个从Kaneboy.SPSWorkflow.Actions.ActionBase继承下来的类,并override继承的DoAction()方法。

 

Kaneboy.SPSWorkflow.Actions.ActionBase提供了多个protected的属性,这些属性公开了与这个流程动作相关的一些信息:

Web : 当前的SPS站点

List : 当前这个文件所在的文档库

User : 执行这个动作的用户

File : 当前的文件

ListItem : 当前文件相关的列表项

Parameter : 从流程定义文件中传入的参数的值,比如流程定义文件中对于这个动作的定义是“<action ns="Tencent" prefix="st1" Assembly="”C:/SPSWorkflowActionSample.dll” Type=”SPSWorkflowActionSample.SendEmail” Parameter=”kaneboy@kaneboy.com” />”,那么这里的Parameter属性值就是“kaneboy@kaneboy.com”

 

现在开始创建这个流程动作类:

public class SendEmail : Kaneboy.SPSWorkflow.Actions.ActionBase

 

然后重写父类的DoAction()方法:

public override Microsoft.SharePoint.SPFile DoAction()

{

MailMessage mailMsg = new MailMessage();

// 邮件的发件信箱就是当前用户的Email,这个EmailSPS站点用户的信箱

mailMsg.From = this.User.Email;

// 邮件的收件信箱从动作参数中获得

mailMsg.To = this.Parameter;

// 邮件的主题和正文从当前用户和当前文件中获得相应信息

mailMsg.Subject = this.User.Name + "提交了一篇新的报告:" + this.File.Name;

mailMsg.Body = mailMsg.Subject;

 

try

{

       // 这个例子假设可以在本机通过CDOSYS发送邮件

SmtpMail.SmtpServer = "127.0.0.1";

SmtpMail.Send(mailMsg);

}

finally

{

}

 

       // 除非对当前文件做了移动操作,否则返回null即可。

return null;

}

 

编译,得到一个dll文件,然后将dll文件放置到SPS服务器的某个位置。参看这个流程定义文件,如果我们要在报告移到部门经理报告库后自动发送一封邮件给经理,那么在

 

<action Assembly="" Roman?? New ?Times mso-hansi-font-family: Roman?; mso-ascii-font-family: 宋体; FONT-FAMILY: Parameter="

<Action Assembly="" Type="Kaneboy.SPSWorkflow.Actions.Move" Parameter="部门经理报告库" />

 

的后面再添加一行:

 

<action Assembly="C:/SPSWorkflowAction

<Action Assembly="C:/SPSWorkflowActionSample.dll" Type="SPSWorkflowActionSample.SendEmail" Parameter="receiver@mail.com" />

 

Assembly属性的值就是编译得到的dll文件的绝对路径,Type属性的值是动作类的名称,Parameter属性的值就是收件人的信箱。

完整的项目源码点击这里下载。

原文地址:https://www.cnblogs.com/kaneboy/p/2436761.html