2

在 Sitecore 中,当非管理员用户选择项目的锁定和编辑选项时,我们正在创建一个新版本并将其工作流状态更改为以前版本的状态。这是使用项目锁定事件完成的。此外,当用户在新版本中单击保存按钮时,如果它处于某个工作流状态(状态 X),它应该转移到另一个状态(状态 Y)。我们使用 OnItemSaving 事件完成了这项工作。但是这种方法存在一个问题,在使用以下代码更改新版本的工作流状态时,在项目锁定事件处理程序中

using (new Sitecore.SecurityModel.SecurityDisabler())
{
      latestVersion.Editing.BeginEdit();
      latestVersion.Fields["__workflow state"].Value = previousVersion.Fields["__workflow state"].Value;
      latestVersion.Editing.EndEdit();
}

由于 EndEdit() 函数,它会立即触发项目保存事件。因此,如果项目更改为状态 X,它会立即更改为状态 Y,这是我们不希望发生的事情。

我们需要做的是从一般的项目保存中清楚地识别用户单击保存按钮。这是可能的事情吗?

4

1 回答 1

4

您可以将自己的处理器添加到saveUI管道而不是使用OnItemSaving,例如在处理器之后:

<saveUI>
    ...
    ...
    <processor mode="on" type="Sitecore.Pipelines.Save.Save, Sitecore.Kernel" />

正如 John West 在博客文章中解释的那样,使用 Sitecore 访问 saveUI 管道处理器中的字段值

Sitecore 仅在用户保存项目时调用 saveUI 管道,而不是在您使用 API 更新项目时调用。

所以看起来这正是你想要实现的。

于 2013-09-03T06:51:23.567 回答