在EventReceiver之后调用SharePoint Workflow

时间:2010-12-19 14:47:25

标签: event-handling sharepoint-2010 sharepoint-workflow eventreceiver

我有一个关于sharepoint工作流程和事件接收器的问题。我有一个事件接收器,它在元素上设置元数据。之后,我使用工作流将项目元数据复制到列表中。遗憾的是,工作流程不会复制事件接收器设置的元数据。我认为因为它是在事件接收者之前执行的。是否有可能更改顺序,以便工作流程将在事件接收器之后执行?接收器以同步的方式绑定到ItemAdded和ItemUpdated事件。

感谢您的帮助! 帕特里克

2 个答案:

答案 0 :(得分:2)

您可以使用SPWorkFlowAssociation运行与列表或内容类型关联的工作流。 示例(添加项目后运行工作流程)

public override void ItemAdded(SPItemEventProperties properties)  
{  

    SPList parentList = properties.ListItem.ParentList;  
    SPWorkflowAssociation associationTemplate =         
      parentList.WorkflowAssociations.GetAssociationByName("Your Workflow Name",   
      new CultureInfo  
        (Convert.ToInt32(parentList.ParentWeb.RegionalSettings.LocaleId)));  
    SPSite siteCollection = properties.ListItem.ParentList.ParentWeb.Site;  
      siteCollection.WorkflowManager.StartWorkflow(properties.ListItem,  
      associationTemplate, String.Empty);  

}  

有关SPWorkflowAssociation的更多信息请查看以下链接

http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.workflow.spworkflowassociation.aspx

答案 1 :(得分:0)

SPListItem:

“Synchronous”事件(以ItemAdd * ing *结尾)始终在工作流程之前执行。

“Asynchronous”事件(-ed结束如ItemAdd * ed *)总是在执行工作流后执行。

因此,您必须将Elements.xml文件的“Synchronization”属性设置为“Synchronous”,并且工作流将始终在事件接收器之后执行。

注意:默认情况下,添加和更新的事件是异步运行的,因此您必须在Elements.xml中进行更改。