【问题标题】:Annoying issue with sitecore workflows and standard value inheritanceSitecore 工作流程和标准值继承的烦人问题
【发布时间】:2012-06-20 19:43:27
【问题描述】:

现在我遇到了 sitecore 工作流程的问题。问题如下:

我的模板标准值已设置工作流和默认工作流字段集。工作流状态设置为草稿。但是,每次我从这个模板创建一个项目时,它都不会继承工作流部分字段,它们都是空的

如果我为项目手动设置工作流和工作流状态,它会按预期工作直到最终状态。但是,如果内容作者编辑该项目,则会创建一个新版本,但仅保留工作流字段值,而工作流状态再次为空。

我做错了什么?为什么会这样?我正在使用 sitecore 6.5.0

【问题讨论】:

    标签: sitecore sitecore6 sitecore-workflow


    【解决方案1】:

    模板的__Standard Values 应该只设置Default workflow 字段;不要在__Standard Values 项目上设置Workflow 字段,因为这暗示__Standard Values 项目本身就在工作流程中!同样,不要在__Standard Values 项上设置State 字段,因为这表示__Standard Values 项处于该状态!

    您的工作流项目上有一个 Initial State 字段,用于定义项目将处于的初始状态(假设项目使用该工作流)。

    当您创建一个项目,并且该项目在 Default Workflow 字段中有一个带有工作流的 __Standard Value 时,该项目的 Workflow 字段将与其@987654334 的 Default Workflow 字段设置相同@。项目所处的状态将是上述工作流程中定义的Initial State

    【讨论】:

    • 我们正在这样做,并且看到了一些我们无法弄清楚的事情:从 UI 创建一个项目,这正如您所描述的那样工作,但是从代码创建它(item.Add 指定模板有其 __Standard Values 默认工作流集,其中 item 是内容文件夹),不会在工作流中设置创建的项目(工作流字段保持为空)。我们不知道是什么原因造成的,有什么想法吗?
    【解决方案2】:

    当您通过 API 创建项目时,您似乎必须明确设置工作流程和状态:

    Item myItem = parentItem.Add("New item", myTemplate);
    myItem.Editing.BeginEdit();
    // set any other fields you want here
    ...
    // Now explicitly set the workflow and state here on your new item
    // (make sure you get the correct GUIDs by viewing raw values on your workflow and workflow state items)...
    myItem[FieldIDs.Workflow] = "{212BCCCB-8197-45C0-81CC-621E0553C25F}";
    myItem[FieldIDs.WorkflowState] = "{E8228D86-D780-4F34-B372-6A4D29B67AF9}";
    myItem.Editing.EndEdit(); 
    

    我假设当您通过 UI 执行此操作时,会在使用内容编辑器等时为您处理一些额外的管道,您可以使用 API 绕过这些管道。

    其实这里有一篇关于SDN的相关帖子: http://sdn.sitecore.net/Forum/ShowPost.aspx?PostID=45991

    【讨论】:

    • 不要将这种方式与硬编码的 Guid 一起使用,请查看此页面并查看 jRobbins 关于如何正确设置的答案。 stackoverflow.com/questions/13528431/…
    • @Martin 你没抓住重点。该代码并非旨在为生产做好准备 - 它纯粹是为了演示的目的。同意当然不要在产品代码中硬编码 ID 等!事实仍然是,当您通过 UI 执行此操作时,会处理一些额外的管道,在使用内容编辑器等时为您执行此操作。几乎不认为值得反对
    • 关于在stackoverflow.com/questions/13528431/… 设置工作流的“正确”方式:我不认为建议的过于复杂的代码与 4(!) 嵌套 if 语句应该是“正确”的方式某物。此外,似乎没有回答这个问题:如何将工作流和随机工作流状态分配给项目。相反,如果下一个状态恰好是所需状态,它基本上会将项目移动到下一个工作流状态
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多