执行工作流命令以更改工作流状态

感谢这篇精彩的帖子

如果我们想模仿 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]);
}