執行工作流命令以更改工作流狀態

感謝這篇精彩的帖子

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