事件系统:如何知道编辑器是否点击了Save或Save&关?

时间:2012-04-11 20:04:47

标签: tridion

在Tridion 2011 SP1中,我试图实现一个事件,当编辑器按下Save&关闭(但不保存)。

在正常情况下,这可以在CheckIn事件中处理,但因为此项可能在工作流中,所以还没有CheckIn事件。

在COM Events中,我们有一个标志(doneEditing)告诉我们编辑器是否按下了save&关闭vs保存。我似乎无法在TOM.NET Events中找到类似的选项。

供参考 - 这是迄今为止的代码:

[TcmExtension("Publish to Wip Events")]
public class PublishToWip : TcmExtension
{
    public PublishToWip()
    {
        EventSystem.SubscribeAsync<VersionedItem, SaveEventArgs>(PublishItemToWip, EventPhases.TransactionCommitted);
    }
    private void PublishItemToWip(VersionedItem item, SaveEventArgs args, EventPhases phases)
    {
       // Magic goes here
    }
}

我查看了SaveEventArgs的选项,但没有找到任何可以提供这些信息的内容。有什么提示吗?

3 个答案:

答案 0 :(得分:5)

好的,在CM团队的帮助下,我得到了正确答案。

使用CheckInEvent代替保存。即使该项目在工作流程中,当您单击“保存并”时,它仍会调用此事件。关闭(如果单击“保存并关闭”,则,而不是单击“保存”时)。

这样的事情会让我开始:

[TcmExtension("Publish to Wip Events")]
public class PublishToWip : TcmExtension
{
    public PublishToWip()
    {
        EventSystem.Subscribe<VersionedItem, CheckInEventArgs>
            (PublishItemToWip, EventPhases.Processed);
    }
    private void PublishItemToWip(VersionedItem item, 
        CheckInEventArgs args, EventPhases phases)
    {

        if (!item.LockType.HasFlag(LockType.InWorkflow)) return;

        if (!item.IsCheckedOut) return;
        // do something now

答案 1 :(得分:2)

我过去一直在看这个,但我找不到合适的解决方案。最后我放弃了。

我的想法是有一个GUI扩展来拦截Save,因此为该项写了一个AppData条目,说它是Save或SaveClose。然后你的事件系统会读取AppData并采取相应的行动。

不要忘记在事件代码中清理AppData。

答案 2 :(得分:-1)

为了捕获项目完成的工作流程,您需要在Process上订阅FinishProcess事件,而不是在组件上:

EventSystem.SubscribeAsync<Process, FinishProcessEventArgs>(FinishProcessHandler, EventPhases.TransactionCommitted, EventSubscriptionOrder.Late);

在事件处理程序中,Process实例将包含具有版本化项目完成工作流程的Subjects列表 - 您要发布的那个:

private static void FinishProcessHandler(Process process, FinishProcessEventArgs e, EventPhases phase)
{
   foreach (var itemInWorkflow in process.Subjects)
   {
      //publish
   }
}