如何在代码中执行工作流程?

时间:2012-08-03 12:34:23

标签: sitecore sitecore6 sitecore-workflow

情景:

  • 用户点击工作流程上的命令
  • 工作流程自定义操作执行多项检查
  • 工作流程自定义操作在依赖于结果的同一工作流程上执行另一个命令

我到目前为止的代码是:

Database db = Factory.GetDatabase("master");
if (Request.QueryString["_id"] != null)
{
  var itm = db.GetItem(new ID(Request.QueryString["_id"]));
  WorkflowCommand[] availableCommands = wf.GetCommands(itm.Fields["__Workflow state"].Value);   
  wf.Execute(Request.QueryString["command"], itm, "Testing working flow new screens", false, new object[] { }); // Execute the workflow step.
}

但是,我在wf.Execute行上得到一个没有设置为实例错误的Object - 但是没有有意义的堆栈跟踪或任何东西:(

我已经放入wf.GetCommands行只是为了检查事情实际上是我期望它们,并且availableCommands填充了一个很好的命令列表。

我已检查commandId是否有效,是否存在。

Itm不为空,并且是工作流与之关联的Content Item(我希望工作流在上下文中运行)。

我已检查过用户上下文等是否有效,并且没有权限问题。

唯一的区别是我在sitecore中执行的.aspx页面中运行此代码 - 希望我不会预期这会导致问题,除非有一个不是的上下文项正确设置。

1 个答案:

答案 0 :(得分:4)

工作流程需要在SiteContext内启用ContentDatabase并启用工作流程。在您的网站中执行此操作的最简单方法是使用SiteContextSwitcher更改为“shell”网站。

using (new SiteContextSwitcher(SiteContextFactory.GetSiteContext("shell")))
{
    wf.Execute(Request.QueryString["command"], itm, "Testing working flow new screens", false, new object[] { }); // Execute the workflow step.
}

可以在WeBlog Sitecore模块的代码中找到此示例。

http://svn.sitecore.net/WeBlog/Trunk/Website/Pipelines/CreateComment/WorkflowSubmit.cs