我有一个自定义模块,该模块使用Kentico API(DocumentHelper)更新我的文档的某些字段,然后发布,但我不希望它触发链接到我的文档页面类型的事件处理程序。我尝试向.Publish(“ admin_edit”)添加注释,希望可以从WorkflowEventargs参数中捕获它,但是VersionComment属性始终返回null。在Kentico中有没有办法做到这一点?
更新字段:
var document = DocumentHelper.GetDocument(documentID, tree);
var workflowManager = WorkflowManager.GetInstance(tree);
var workflow = workflowManager.GetNodeWorkflow(document);
if (workflow != null)
{
document.CheckOut();
document.SetValue("SomeFIeld", "some value");
document.Update(true);
document.CheckIn();
document.Publish("admin_edit");
}
事件处理程序:
public override void Init()
{
WorkflowEvents.Publish.After += Publish_After;
}
private void Publish_After(object sender, WorkflowEventArgs e)
{
if (!string.IsNullOrEmpty(e.VersionComment) &&
e.VersionComment.Contains("admin_edit"))
return;
}
答案 0 :(得分:0)
对于版本信息,您总是会得到null,因为这与“ 页面版本控制”事件有关,特别是对于“ SaveVersion ”事件。您可以在此link上找到有关此内容的更多信息。如果展开“属性”,则将看到为特定事件填充了哪些属性。对于您的情况,您可以尝试类似的操作,添加消息的最新版本,然后在“ Publish_After ”事件中检查该注释,请参见下面的代码:
var document = DocumentHelper.GetDocument(documentID, tree);
var workflowManager = WorkflowManager.GetInstance(tree);
var workflow = workflowManager.GetNodeWorkflow(document);
if (workflow != null)
{
document.CheckOut();
document.SetValue("SomeFIeld", "some value");
document.Update(true);
document.CheckIn(versionComment: "admin_edit");
document.Publish();
}
,然后在事件处理程序中,获取最新版本并检查注释,如下所示:
if (e.PublishedDocument?.VersionHistory?.Count > 0)
{
var lastVersion = e.PublishedDocument.VersionHistory[0] as VersionHistoryInfo;
if (lastVersion.VersionComment.Equals("admin_edit"))
{
return;
}
}
注意::如果您有很多并发的内容编辑器,则您的最后一个版本可能不是API的版本(有人更改了内容并在API调用后立即将其保存了)更改)。这样做的机会很小,但是仍然可能。如果这是您经常使用的东西,则必须加以考虑。此代码已针对 Kentico 11 进行了测试。