1

由于有很多关于它的帖子和线程,以编程方式启动工作流不再是问题。肯定的答案是使用下面的方法和适当的参数。

SPWorkflowManager.StartWorkflow(...)

每次我们使用上述方法时,工作流都会在项目上运行而没有任何问题。进入工作流历史页面(在列表视图中点击工作流状态),可以看到工作流发起者设置为系统账户(Initiator:System Account)。现在,问题是您可以使用上述方法启动工作流并作为特定用户执行吗?

4

1 回答 1

1

您必须模拟用户凭据:

通过使用令牌:

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/

于 2013-07-23T05:54:32.023 回答