gpt4 book ai didi

c# - 使用工作流以编程方式处理所有 Sitecore 项目

转载 作者:行者123 更新时间:2023-11-30 16:11:00 25 4
gpt4 key购买 nike

我遇到的情况是,Workbox 中有很多项目需要清除。

我需要处理这些项目,以便根据此规则为它们分配工作流状态(不触发工作流操作):

如果项目处于草稿或等待批准状态,并且有比当前版本更高的发布版本,则将工作流状态设置为 x worflowstate。

我没有对工作流做过太多试验,所以有人有任何代码示例或关于如何实现此目的的想法吗?

最佳答案

这是一篇关于 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));
}

关于c# - 使用工作流以编程方式处理所有 Sitecore 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24931232/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com