gpt4 book ai didi

c# - Sitecore:以编程方式将工作流分配给项目

转载 作者:太空狗 更新时间:2023-10-29 22:08:17 25 4
gpt4 key购买 nike

我已经配置了一个工作流,像往常一样从“草稿”状态开始。我已经为模板的标准值配置了工作流程。它在内容编辑器中完美运行。(当我使用内容编辑器创建项目时,一旦我创建了项目,工作流就会分配给该项目并且它的状态变为“草稿”。)

但是当我在上述模板下以编程方式创建项目时,它不会分配工作流。我应该如何分配工作流?如果有,请分享任何代码示例。

谢谢。

Sitecore.Data.Items.TemplateItem template = this.MasterDatabase.GetItem("/sitecore/templates/user defined/sample types");
Sitecore.Data.Items.Item parent = this.MasterDatabase.GetItem(parentId);

Sitecore.Data.Items.Item newItem;
// Create new item and retrieve it
newItem = template.CreateItemFrom("sampleName", parent);

newItem.Editing.BeginEdit();

newItem.Name = StringFormatter.CreateItemNameFromID(this.newItem);
newItem.Fields["Title"].Value = "Sample Title"

newItem.Editing.EndEdit();

最佳答案

我不会使用 Dhanuka777 的答案,因为它没有使用 Sitecore 的工作流状态命令和它附带的有用功能,例如电子邮件生成。它还需要对 Guid 进行硬编码。

以下代码的好处:

  • 利用 Sitecore 的状态命令及其出色的功能有例如生成电子邮件以提醒用户等
  • 不要在解决方案中存储状态和命令的 Guid
  • 独立于 Sitecore 的上下文
  • 抽象,以便它可以用于 Sitecore 中的所有工作流程。
    public bool UpdateWorkflow(WorkflowState newWorkflowState, Item item)
{
Assert.ArgumentNotNull(newWorkflowState, "The new WorkflowState can not be null");
Assert.ArgumentNotNull(item, "Item can not be null");

bool successful = false;

WorkflowState currentWorkflowState = GetWorkflowStateForItem(item);

if (currentWorkflowState != newWorkflowState)
{
IWorkflow workflow = GetWorkflowOfItem(item);

if (workflow != null)
{
List<WorkflowCommand> applicableWorkflowCommands = workflow.GetCommands(currentWorkflowState.StateID).ToList();

foreach (var applicableWorkflowCommand in applicableWorkflowCommands)
{
Item commandItem = _database.GetItem(applicableWorkflowCommand.CommandID);

string nextStateId = commandItem["Next state"];

if (nextStateId == newWorkflowState.StateID)
{
WorkflowResult workflowResult = workflow.Execute(applicableWorkflowCommand.CommandID, item, "", false);
successful = workflowResult.Succeeded;
break;
}
}
}
}
else
{
successful = true;
}

return successful;
}

public WorkflowState GetWorkflowStateForItem(Item item)
{
var workflow = GetWorkflowOfItem(item);
return workflow != null ? workflow.GetState(item) : null;
}

public IWorkflow GetWorkflowOfItem(Item item)
{
return _database.WorkflowProvider.GetWorkflow(item);
}

private Database _database
{
get
{
return Sitecore.Data.Database.GetDatabase("master");
}
}

关于c# - Sitecore:以编程方式将工作流分配给项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13528431/

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