1

设想:

  • 用户单击工作流上的命令
  • 工作流自定义操作执行多项检查
  • 工作流自定义操作根据结果在同一工作流上执行另一个命令

我到目前为止的代码是:

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 not set to an instance error - 但没有有意义的堆栈跟踪或任何东西:(

wf.GetCommands在行中只是为了检查事情是否真的在我期望的地方,并且availableCommands填充了一个很好的现有命令列表。

我检查了commandId它是否有效并且存在。

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

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

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

4

1 回答 1

4

工作流需要在启用了工作流的 a 中SiteContext运行ContentDatabase。在您的站点中执行此操作的最简单方法是使用 aSiteContextSwitcher更改为“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

于 2012-08-03T16:29:57.313 回答