Umbraco7-ContentService.save和publishwith status VS ContentService.SendToPublication

Umbraco7-ContentService.save和publishwith status VS ContentService.SendToPublication,umbraco,umbraco7,umbraco6,Umbraco,Umbraco7,Umbraco6,我有一个应用程序,它使用ContentService.Saved和ContentService.Saving的组合来扩展Umbraco以管理内容 我在一个Umbraco安装中有两个网站,我正在使用这些方法使树的不同部分的内容保持最新 到目前为止,我已经按照我想要的方式工作了 现在,我想添加一个功能:根据哪个Umbraco用户登录,将发布内容或发送内容供审批 因此,我更改了以下代码行: cs.SaveAndPublishWithStatus(savedNode, 0, false) 为此: cs

我有一个应用程序,它使用ContentService.Saved和ContentService.Saving的组合来扩展Umbraco以管理内容

我在一个Umbraco安装中有两个网站,我正在使用这些方法使树的不同部分的内容保持最新

到目前为止,我已经按照我想要的方式工作了

现在,我想添加一个功能:根据哪个Umbraco用户登录,将发布内容或发送内容供审批

因此,我更改了以下代码行:

cs.SaveAndPublishWithStatus(savedNode, 0, false)
为此:

cs.SendToPublication(savedNode);
现在我发现的问题是,与SaveAndPublishWithStatus()方法不同,cs.SendToPublication()方法没有传递false的选项,因此不会引发保存事件。所以我进入了一个无限循环

当我附加调试器并在无限循环第一次调用cs.SendToPublication(savedNode)时手动停止无限循环
我得到了我想要的行为


有没有办法解决这个问题?有没有其他我应该使用的方法

您的说法是正确的,在将项目发送到出版物时,当前不可能将
raiseEvents
设置为false,这是一个问题。 我在v中添加了过载。7.6()

但是,考虑到您现在需要这样做,一个临时解决方案是,您可以确保代码在被
.Saved
/
.Saving
事件触发时只运行一次


一种方法是检查代码中上次保存的日期(
UpdateDate
)。如果内容是在当前保存操作的最后一秒钟内保存的,则您知道这是由SendToPublication操作中发生的保存触发的保存事件。然后,您还知道该项目已经发送到发布,并且不需要再次执行此操作,从而防止无休止的循环发生。

您说的没错,在发送项目到发布时,当前不可能将
raiseEvents
设置为false,这是一个问题。 我在v中添加了过载。7.6()

但是,考虑到您现在需要这样做,一个临时解决方案是,您可以确保代码在被
.Saved
/
.Saving
事件触发时只运行一次


一种方法是检查代码中上次保存的日期(
UpdateDate
)。如果内容是在当前保存操作的最后一秒钟内保存的,则您知道这是由SendToPublication操作中发生的保存触发的保存事件。然后,您还知道该项目已发送到出版物,无需再次发送,从而防止了无休止的循环发生。

您这样做的原因是代码而不是基于用户角色吗?是的,此Umbraco安装正在驱动两个网站。当用户更新站点1中的内容时,此更改会反映在站点2中(自动),但在它实际发布到站点2之前,需要得到站点2经理的授权。啊,我明白了,我没有答案,但如果您查找ContentService的代码,您可能会找到答案。您这样做的原因是代码,而不是基于用户角色吗?是的,这个Umbraco安装驱动了两个网站。当用户更新站点1中的内容时,此更改会反映在站点2中(自动),但在它实际发布到站点2之前,需要得到站点2经理的授权。啊,我明白了,我没有答案给你,但如果你查找ContentService的代码,你可能会找到答案