Events Tridion 2009-确定谁发布了一个页面

Events Tridion 2009-确定谁发布了一个页面,events,system,publishing,tridion,Events,System,Publishing,Tridion,我们需要确定是谁触发了Tridion2009页面的发布:编辑器还是代码 请举例说明: 出版物A 从A继承的发布B 现在,当我们使用“在子出版物中也发布/取消发布”在出版物a中发布页面时,将为中的页面触发事件系统 出版物A和出版物B中的页面 在这种情况下,我们只希望在出版物A的页面上使用事件系统 比如: public override void OnPageSetPublishedToPost(Page page, string publicationTarget, bool published,

我们需要确定是谁触发了Tridion2009页面的发布:编辑器还是代码

请举例说明: 出版物A 从A继承的发布B

现在,当我们使用“在子出版物中也发布/取消发布”在出版物a中发布页面时,将为中的页面触发事件系统 出版物A和出版物B中的页面

在这种情况下,我们只希望在出版物A的页面上使用事件系统

比如:

public override void OnPageSetPublishedToPost(Page page, string publicationTarget, bool published, string user)
{
  if (!page.IsTriggeredByParent)
  {
  // do stuff
  }
}
问题是我们不知道如何确定“IsTriggeredByParent”的值


感谢您在SDL Tridion 2009中花费的时间

这是不可能的,基于COM的事件系统无法识别事件的来源


在SDL Tridion 2011.NET事件系统中,您可以访问事件堆栈。这意味着您可以检测某个操作是否作为另一个操作的一部分执行。例如,在VersionedItem上保存参数为true时,也会检入该项,并作为保存事件的一部分引发该事件。因此,为了完成任务,我认为您需要升级。

您可以指定您正在使用的Tridion版本,以及您尝试使用的事件处理程序/触发器。我们使用的是Tridion 2009。该事件是:public override void onPageSetPublishedToposPage页面、string publicationTarget、bool published、页面发布后调用的string user。在内部,我们需要确定发布行为是否由父级发布触发。如果不进行大量挖掘,我不相信您尝试的操作仅使用OnPageSetPublishedToPost触发器是可能的。有什么方法可以使用OnPageResolvePre事件吗?也许你可以解释一下你在代码中想要实现什么,这样我们就可以提出另一个创造性的解决方案。我认为要解决这个问题,你必须告诉我们更多关于它的信息。您已经确定了使用OnPageSetPublishedToPost的一种技术,但只是对问题域给出了隐晦的提示。那么,为什么你想以不同的方式对待这两种情况,以及这些东西意味着什么呢。也许从更广阔的角度来看,我们可以帮助得更好。谢谢你,巴特。这至少澄清了问题。2009年没有直接的解决方案。我们正在尝试一种不同的方法。在发布事件中,我们希望将父页面排队,当排队页面的子页面到达时,我们可以选择忽略该事件。该解决方案明确假设,当发布页面时,asyncevents设置为false的Tridion首先调用父页面1的事件,然后调用其子页面,然后传递到父页面2。你认为这可以工作吗?如果内存正确,基于COM的事件系统将不会触发基于其他事件的事件。所以不确定你所说的是否有效。如果以编程方式将父级添加到发布队列中,将作为不同的发布事务处理,并且它将有自己的事件。这些事件已在工作。基本上,OnPageSetPublishedToPre现在会为A页调用,然后为A的每个子页调用。这实际上就是问题所在。我们计划在OnPageSetPublishedToPre中对父页面的某些调用进行排队,并跳过在父页面之后立即处理的子页面的方法的标准代码。为此,我们需要Tridion始终以明确的方式调用事件:父级a、子级A1、子级A2、父级B……这应该发生,当您从事件中排队发布操作时,它们将在事件之后触发,但实际顺序仍取决于处理发布事务的实际顺序。如果您有一个发布者线程,它与您在队列中看到的完全相同,如果您有多个线程,OnPageSetPublishedToPre的顺序可能会有所不同,这与先提交哪些线程有关。我仍然认为您在SDL Tridion 2011中会有更好的选择,因为这样事件系统将能够告诉您更多信息,并且您可以在传递给其他事件的事件参数中设置上下文变量由该项目触发。