여기에 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));
}
안녕하세요, Marek Musielak. 나는 또한 워크 플로우 관련 task.can에 대한 도움을 얻으려면 귀하의 스카이프 ID를 가지고 일하고 있어요. –