EventHander启动工作流

不多说 ,代码如下
正需要注意的是 你用ItemUpdated方法启用工作流后会再次调用ItemUpdated方法 ,
通过检查 item的 是否启动工作流 的域,来确定是否启动工作流



using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Workflow;

public class Meeting : SPItemEventReceiver
{

    public string startWFString = string.Empty;

    public override void ItemAdded(SPItemEventProperties properties) //重载ItemAdded函数,监控新建列表条目事件
    {

    }



    public override void ItemUpdated(SPItemEventProperties properties)
    {
        //阻止其他事件被调用
        this.DisableEventFiring();
        //获取当前项
        SPListItem item = properties.ListItem;

        //检查item运行的工作流中,其模板是否已经有 “二级审批工作流”
        for (int i = 0; i < item.Workflows.Count; i++)
        {
            if (item.Workflows[i].ParentAssociation.BaseTemplate.Name.ToString().Equals("二级审批工作流"))
            {
                return;
            }
        }
        //用此方法模拟管理员账户运行此事件处理程序
        SPSecurity.RunWithElevatedPrivileges(delegate()
       {

           try
           {
               //检查item是否选中启动工作流
               if (item["是否启动工作流"].ToString().Contains("是"))
               {
                   //在当前list的WorkflowAssociations中找到要 启动的工作流  SPWorkflowAssociation
                   foreach (SPWorkflowAssociation wfAssoc in properties.OpenWeb().Lists[properties.ListId].WorkflowAssociations)
                   {
                       // search workflowassociation by name
                       if ((wfAssoc.BaseTemplate.Name.ToString().Equals("二级审批工作流")))
                       {
                           //启动工作流
                           item.Web.Site.WorkflowManager.StartWorkflow(item, wfAssoc, wfAssoc.AssociationData, true);
                           break;

                       }
                   }
               }
           }
           catch (Exception ex)
           {

               properties.ErrorMessage = ex.Message;

           }
       });

    }


}

你可能感兴趣的:(event)