Szukaj…


Ustaw stan elementu i wykonuje akcje w tym stanie

public void MoveToStateAndExecuteActions(Item item, ID workflowStateId)
{
    Sitecore.Workflows.IWorkflowProvider workflowProvider = Item.Database.WorkflowProvider;
    Sitecore.Workflows.IWorkflow workflow = workflowProvider.GetWorkflow(item);

    // if item is in any workflow
    if (workflow != null)
    {
        using (new Sitecore.Data.Items.EditContext(item))
        {
            // update item's state to the new one
            item[Sitecore.FieldIDs.WorkflowState] = workflowStateId.ToString();
        }

        Item stateItem = ItemManager.GetItem(workflowStateId, 
            Language.Current, Sitecore.Data.Version.Latest, item.Database, SecurityCheck.Disable);

        // if there are any actions for the new state
        if (!stateItem.HasChildren)
            return;

        WorkflowPipelineArgs workflowPipelineArgs = new WorkflowPipelineArgs(item, null, null);

        // start executing the actions
        Pipeline pipeline = Pipeline.Start(stateItem, workflowPipelineArgs);
        if (pipeline == null)
            return;
        WorkflowCounters.ActionsExecuted.IncrementBy(pipeline.Processors.Count);
    }
}

Dzięki temu wątkowi

Wykonanie polecenia przepływu pracy, aby zmienić stan przepływu pracy

Dzięki temu świetnemu wpisowi

Jeśli chcemy naśladować zachowanie interfejsu użytkownika Sitecore i wykonać polecenie, które zmieni stan przepływu pracy, musimy użyć WorkflowProvider, aby uzyskać instancję przepływu pracy przypisaną do danego elementu i wywołać metodę wykonania z wybranym identyfikatorem polecenia. Spowoduje to uruchomienie wszystkich działań zdefiniowanych w węźle elementu polecenia, zmianę stanu elementu i uruchomienie wszystkich działań automatycznych zdefiniowanych poniżej węzła nowego elementu stanu:

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]);
}


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow