由于有很多关于它的帖子和线程,以编程方式启动工作流不再是问题。肯定的答案是使用下面的方法和适当的参数。
SPWorkflowManager.StartWorkflow(...)
每次我们使用上述方法时,工作流都会在项目上运行而没有任何问题。进入工作流历史页面(在列表视图中点击工作流状态),可以看到工作流发起者设置为系统账户(Initiator:System Account)。现在,问题是您可以使用上述方法启动工作流并作为特定用户执行吗?
由于有很多关于它的帖子和线程,以编程方式启动工作流不再是问题。肯定的答案是使用下面的方法和适当的参数。
SPWorkflowManager.StartWorkflow(...)
每次我们使用上述方法时,工作流都会在项目上运行而没有任何问题。进入工作流历史页面(在列表视图中点击工作流状态),可以看到工作流发起者设置为系统账户(Initiator:System Account)。现在,问题是您可以使用上述方法启动工作流并作为特定用户执行吗?
您必须模拟用户凭据:
通过使用令牌:
SPWeb oWeb = SPContext.Current.Web;
SPUserToken token = oWeb.AllUsers[@"SHAREPOINTSYSTEM"].UserToken;
using (SPSite elevatedSite = new SPSite(oWeb.Site.ID, token))
{
using (SPWeb elevatedweb = site.OpenWeb())
{
// your code
}
}
http://extreme-sharepoint.com/2012/05/30/impersonation-elevation-of-privileges/
或使用 Win32 模拟: http ://wayneye.wordpress.com/2010/10/22/a-complete-impersonation-demo-in-c-net/