2013-09-19 4 views
2

Мне было интересно, можно ли выполнять действия рабочего процесса Sitecore через API. Я не могу использовать этот подход здесь: http://sdn.sitecore.net/Snippets/Workflow/Change%20the%20Workflow%20State%20on%20an%20Item%20via%20API.aspx (выполнить команду, которая вызовет изменение состояния).Выполнение действий рабочего процесса Sitecore с использованием API

Что я хочу - это программно создать элемент, а затем установить состояние рабочего процесса на «Ожидание утверждения», например, даже если нет команды, для которой установлен «Следующий шаг».

В идеале, было бы что-то вроде

foreach (var action in awaitingForApprovalState.Actions) 
{ 
    action.Execute(); 
} 
+1

Почему вы не можете использовать этот подход ? Он делает именно то, что вы хотите. – bzlm

ответ

6

Ниже приведен код, который устанавливается состояние элемента и выполняет действия, которые находятся в этом состоянии:

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); 
    } 
} 
+0

Право, что мне нужно, спасибо! –

+0

будет работать над версией 8? – Tony

+0

@ Тони Это должно сработать. Вы можете использовать 'item.Editing.BeginEdit()' и 'EndEdit()' вместо 'EditContext()'. Остальная часть кода должна быть одинаковой. Попробуйте и сообщите нам. –

Смежные вопросы