在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,这是我们不希望发生的事情。
我们需要做的是清楚地识别用户点击一般项目保存中的保存按钮。这可能是一件事吗?
答案 0 :(得分:4)
您可以将自己的处理器添加到saveUI
管道,而不是使用OnItemSaving
,例如处理器之后:
<saveUI>
...
...
<processor mode="on" type="Sitecore.Pipelines.Save.Save, Sitecore.Kernel" />
John West在博客文章Access field values in saveUI pipeline processors with Sitecore
中解释道Sitecore仅在用户保存项目时调用saveUI管道,而不是 当您使用API更新项目时。
所以看起来这正是你想要实现的目标。