2014-07-24 3 views
3

Workbox에 정리해야 할 항목이 많은 상황이 있습니다. 항목 초안의 상태 또는 승인을 기다리고을 가지고 있으며,이프로그래밍 방식으로 워크 플로로 모든 Sitecore 항목 처리

경우 그들은 (워크 플로 작업을 트리거하지 않고) 워크 플로우 상태를 할당 할 수 있도록

나는이 규칙에 따라 이러한 항목을 처리해야 현재 버전보다 높은 버전을 게시 한 다음 워크 플로 상태를 x worflowstate로 설정합니다.

나는 워크 플로우에 대해 많은 실험을 해본 적이 없으며, 아무도이 코드를 어떻게 구현할 수 있는지에 대한 견본이나 생각이 없습니까?

답변

3

여기에 Changing workflow state of Sitecore items programmatically에 관한 블로그 게시물이 있습니다.

먼저 당신이 선택한 워크 플로우 상태에있는 모든 항목을 찾을 필요가 :

IWorkflow[] workflows = Sitecore.Context.Database.WorkflowProvider.GetWorkflows(); 

IWorkflow chosenWorkflow = workflows[..]; // choose your worfklow 

WorkflowState[] workflowStates = chosenWorkflow.GetStates(); 

foreach (WorkflowState state in workflowStates) 
{ 
    if (!state.FinalState) 
    { 
     DataUri[] itemDataUris = chosenWorkflow.GetItems(state.StateID); 
     foreach (DataUri uri in itemDataUris) 
     { 
      Item item = Sitecore.Context.Database.GetItem(uri); 
      /* check other conditions - newer version exists etc */ 
      ChangeWorkflowState(item, newWorkflowStateId); 
     } 
    } 
} 

새로운 워크 플로우 상태에 관련된 모든 작업을 실행하지 않고 Sitecore 항목의 워크 플로우 상태를 변경하기위한 가장 간단한 코드는 다음과 같습니다

public static WorkflowResult ChangeWorkflowState(Item item, ID workflowStateId) 
{ 
    using (new EditContext(item)) 
    { 
     item[FieldIDs.WorkflowState] = workflowStateId.ToString(); 
    } 

    return new WorkflowResult(true, "OK", workflowStateId); 
} 

public static WorkflowResult ChangeWorkflowState(Item item, string workflowStateName) 
{ 
    IWorkflow workflow = item.Database.WorkflowProvider.GetWorkflow(item); 

    if (workflow == null) 
    { 
     return new WorkflowResult(false, "No workflow assigned to item"); 
    } 

    WorkflowState newState = workflow.GetStates() 
     .FirstOrDefault(state => state.DisplayName == workflowStateName); 

    if (newState == null) 
    { 
     return new WorkflowResult(false, "Cannot find workflow state " + workflowStateName); 
    } 

    return ChangeWorkflowState(item, ID.Parse(newState.StateID)); 
} 
+0

안녕하세요, Marek Musielak. 나는 또한 워크 플로우 관련 task.can에 대한 도움을 얻으려면 귀하의 스카이프 ID를 가지고 일하고 있어요. –