情景:
我到目前为止的代码是:
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
页面中运行此代码 - 希望我不会预期这会导致问题,除非有一个不是的上下文项正确设置。
答案 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