执行工作流命令以更改工作流状态
感谢这篇精彩的帖子
如果我们想模仿 Sitecore UI 行为并执行将改变工作流状态的命令,我们需要使用 WorkflowProvider 来获取分配给给定项的工作流实例,并使用选定的命令 ID 调用 Execute 方法。这将触发在命令项节点下定义的所有操作,更改项的状态并触发在新状态项节点下定义的所有自动操作:
public static WorkflowResult ExecuteCommand(Item item, string commandName, string comment)
{
IWorkflow workflow = item.Database.WorkflowProvider.GetWorkflow(item);
if (workflow == null)
{
return new WorkflowResult(false, "No workflow assigned to item");
}
WorkflowCommand command = workflow.GetCommands(item[FieldIDs.WorkflowState])
.FirstOrDefault(c => c.DisplayName == commandName);
if (command == null)
{
return new WorkflowResult(false, "Workflow command not found");
}
return workflow.Execute(command.CommandID, item, comment, false, new object[0]);
}