zoukankan      html  css  js  c++  java
  • 使用编程的方式来启动SharePoint的工作流

    工作流是SharePoint很重要的一部分。我写的这篇文章是通过编程的方式启动工作流。一共分两个部分:启动无参数和有参数的工作流。

    参考示例: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等事件来添加以上代码。

    http://www.cnblogs.com/fanwenxuan/archive/2011/06/09/2076829.html

  • 相关阅读:
    spring ApplicationListener接口
    spring提供的几个常用可实现的接口
    dubbo源码解析(三) DubboInvoker
    Java生日计算年龄工具
    css实现右尖括号样式
    微信小程序支付开发之申请退款
    微信小程序picker组件
    java 获取用户ip
    spring boot 添加拦截器的简单实例(springBoot 2.x版本,添加拦截器,静态资源不可访问解决方法)
    JVM 组成以及各部分作用
  • 原文地址:https://www.cnblogs.com/Areas/p/2269490.html
Copyright © 2011-2022 走看看