【问题标题】:Invoke SharePoint Workflow after EventReceiver在 EventReceiver 之后调用 SharePoint 工作流
【发布时间】:2010-12-19 14:47:25
【问题描述】:
我有一个关于共享点工作流程和事件接收器的问题。我有一个在元素上设置元数据的事件接收器。之后,我使用工作流将项目元数据复制到列表中。不幸的是,工作流不会复制事件接收器设置的元数据。我想是因为它是在事件接收器之前执行的。是否有可能更改顺序,以便在事件接收者之后执行工作流?接收者以同步方式绑定到 ItemAdded 和 ItemUpdated 事件。
感谢您的帮助!
帕特里克
【问题讨论】:
标签:
event-handling
sharepoint-2010
sharepoint-workflow
eventreceiver
【解决方案1】:
您可以使用 SPWorkFlowAssociation 来运行与 List 或 Content Type 关联的工作流。
示例(添加项目后运行工作流)
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
【解决方案2】:
SPListItem:
“同步”事件(-ing 结尾,如 ItemAdd*ing*),总是在工作流之前执行。
“异步”事件(-ed 结尾,如 ItemAdd*ed*),总是在工作流执行之后执行。
因此,您必须将 Elements.xml 文件的“同步”属性设置为“同步”,并且工作流将始终在事件接收器之后执行。
注意:添加和更新的事件默认异步运行,因此您必须在 Elements.xml 中进行更改。