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

Sitecore 如何在代码中执行工作流?,sitecore,sitecore6,sitecore-workflow,Sitecore,Sitecore6,Sitecore Workflow,情景: 用户单击工作流上的命令 工作流自定义操作执行许多检查 工作流自定义操作根据结果在同一工作流上执行另一个命令 到目前为止,我掌握的代码是: Database db = Factory.GetDatabase("master"); if (Request.QueryString["_id"] != null) { var itm = db.GetItem(new ID(Request.QueryString["_id"])); WorkflowCommand[] availabl

情景:

  • 用户单击工作流上的命令
  • 工作流自定义操作执行许多检查
  • 工作流自定义操作根据结果在同一工作流上执行另一个命令
到目前为止,我掌握的代码是:

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行上得到了一个未设置为实例错误的对象,但没有任何有意义的堆栈跟踪或任何内容:(

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

我已经检查了
commandId
是否有效并存在

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

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


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

工作流需要在具有
内容数据库的
SiteContext
中运行并启用工作流。在您的站点中执行此操作的最简单方法是使用
SiteContextSwitcher
更改为“shell”站点

在WeBlog Sitecore模块的代码中可以找到这方面的示例


工作流需要在启用了
ContentDatabase
和工作流的
SiteContextSwitcher
内运行。在站点内执行此操作的最简单方法是使用
SiteContextSwitcher
更改为“shell”站点

在WeBlog Sitecore模块的代码中可以找到这方面的示例


似乎是因为我在aspx页面中运行;调用GetWorkFlowState失败,因为Context.ContentDatabase为空。现在如何排序…似乎是因为我在aspx页面中运行;调用GetWorkFlowState失败,因为Context.ContentDatabase为空。现在如何排序。。。
using (new SiteContextSwitcher(SiteContextFactory.GetSiteContext("shell")))
{
    wf.Execute(Request.QueryString["command"], itm, "Testing working flow new screens", false, new object[] { }); // Execute the workflow step.
}