使用编程的方式来启动SharePoint的工作流
2011-11-24 15:15
423 查看
工作流是SharePoint很重要的一部分。我写的这篇文章是通过编程的方式启动工作流。一共分两个部分:启动无参数和有参数的工作流。
参考示例:http://www.sharepointkings.com/2008/09/how-to-pass-parameters-to-workflow.html
首先,通过SharePoint Designer 2010针对一个文档库设计两个工作流:
首先看一下无参数工作流。
这个比较简单,直接使用SPWorkflowManager.StartWorkflow Method(http://msdn.microsoft.com/en-us/library/ms467505.aspx)来启动工作流,代码如下:
接下来看一下启动带参数的工作流。这里唯一一个注意的地方就是这个参数是需要我们进行序列化的。
我们需要定义一个参数类:
然后我们来传递这个参数给SPWorkflowAssociation.AssociationData
代码如下:
我们如果跟踪SPWorkflowAssociation.AssociationData这个参数,会发现是一个XML格式的字符串。如下:
代码比较简单,没有加特别的说明。
拓展:在工作中,有时候我们会需要根据某一列的值发生变化时来启动工作流,这个时候的解决方案是通过Event Handler的方式来做逻辑的判断,然后启动工作流。这种时候,我们只需要在ItemUpdated等事件来添加以上代码。
参考示例:http://www.sharepointkings.com/2008/09/how-to-pass-parameters-to-workflow.html
首先,通过SharePoint Designer 2010针对一个文档库设计两个工作流:
Name | Description |
MyWorkflow | 没有参数 |
MyInitialDataWF | 三个参数:YourName(string); YourAge(Int); YourDate(DateTime) |
这个比较简单,直接使用SPWorkflowManager.StartWorkflow Method(http://msdn.microsoft.com/en-us/library/ms467505.aspx)来启动工作流,代码如下:
public void StartWorkflow(SPWeb web) { SPList testDocLib = web.GetList("TestDocLib"); SPListItem wfItem = testDocLib.GetItemById(2); SPWorkflowAssociationCollection wfAssociationColls = testDocLib.WorkflowAssociations; CultureInfo ci=CultureInfo.CurrentCulture; SPWorkflowAssociation spWFAss = wfAssociationColls.GetAssociationByName("MyWorkflow", ci); Console.WriteLine(spWFAss.Name); web.Site.WorkflowManager.StartWorkflow(wfItem, spWFAss, spWFAss.AssociationData, true); }
接下来看一下启动带参数的工作流。这里唯一一个注意的地方就是这个参数是需要我们进行序列化的。
我们需要定义一个参数类:
[Serializable()] public class WFParameters { public string YourName { get;set;} public int YourAge{get;set;} public DateTime YourDate { get; set; } public string GetInitXmlString(WFParameters objParameters) { WFParameters wfData = new WFParameters(); wfData.YourName = objParameters.YourName; wfData.YourAge = objParameters.YourAge; wfData.YourDate = objParameters.YourDate; using (MemoryStream stream = new MemoryStream()) { XmlSerializer serializer = new XmlSerializer( typeof(WFParameters)); serializer.Serialize(stream, wfData); stream.Position = 0; byte[] bytes = new byte [stream.Length]; stream.Read(bytes, 0, bytes.Length); return Encoding.UTF8.GetString(bytes); } } }
然后我们来传递这个参数给SPWorkflowAssociation.AssociationData
代码如下:
public void StartWorkflow(SPWeb web) { SPList testDocLib = web.GetList("TestDocLib"); SPListItem wfItem = testDocLib.GetItemById(2); SPWorkflowAssociationCollection wfAssociationColls = testDocLib.WorkflowAssociations; CultureInfo ci=CultureInfo.CurrentCulture; SPWorkflowAssociation spWFInitialAss = wfAssociationColls.GetAssociationByName("MyInitialDataWF", ci); WFParameters objParameters = new WFParameters(); objParameters.YourName = "Jim"; objParameters.YourAge = 20; objParameters.YourDate = DateTime.Parse("6/1/2009"); string serializedParameters = objParameters.GetInitXmlString(objParameters); Console.WriteLine(serializedParameters); spWFInitialAss.AssociationData=serializedParameters; web.Site.WorkflowManager.StartWorkflow( wfItem, spWFInitialAss, spWFInitialAss.AssociationData, true); }
我们如果跟踪SPWorkflowAssociation.AssociationData这个参数,会发现是一个XML格式的字符串。如下:
<?xml version="1.0"?> <WFParameters xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="h ttp://www.w3.org/2001/XMLSchema"> <YourName>Jim</YourName> <YourAge>20</YourAge> <YourDate>2009-06-01T00:00:00</YourDate> </WFParameters>
代码比较简单,没有加特别的说明。
拓展:在工作中,有时候我们会需要根据某一列的值发生变化时来启动工作流,这个时候的解决方案是通过Event Handler的方式来做逻辑的判断,然后启动工作流。这种时候,我们只需要在ItemUpdated等事件来添加以上代码。
相关文章推荐
- 使用编程的方式来启动SharePoint的工作流
- 使用编程的方式来启动SharePoint的工作流 并传入参数
- 使用编程的方式来启动SharePoint的工作流
- Sharepoint 复制备份系列--使用编程方式复制列表2(Copy a SharePoint List or site ,web Programmatically)
- Sharepoint 复制备份系列--使用编程方式复制列表1(Copy a SharePoint List Programmatically)
- golang实战使用gin+xorm搭建go语言web框架restgo详解6.4 推荐编程方式
- 以编程方式使用 Word 中的内置对话框
- 编程实现木马的ActiveX启动和注入IE的启动方式
- sharepoint 2010 启动工作流时,该表单无法显示,可能是由于Microsoft SharePoint Server State Service 配置不当.
- 基于visual c++之windows核心编程代码分析(52)使用WMI 获取进程启动参数
- spring使用编程的方式进行事物处理_普通方式和jdbctemplate方式
- linux系统下使用service方式启动Tomcat
- SharePoint 2007工作流开发点滴(5) : "启动时失败"的查错方法
- 3.Spark SQL:使用反射方式、编程方式,将RDD转换为DataFrame
- 4.Spark SQL:数据源Parquet之使用编程方式加载数据
- VISTA或WIN7下使用立体声混音作为录音来源时,如何通过编程方式去除或加入麦克风的输入
- Android 编程下帧动画在 Activity 启动时自动运行的几种方式
- Android 编程下帧动画在 Activity 启动时自动运行的几种方式
- json的使用 前后台统一以对象的方式编程 (转)
- 如何在运行 Windows XP Service Pack 2 的系统上使用脚本以编程方式打开端口供 SQL Server 使用