6

在 Tridion 2011 SP1 中,我正在尝试实现一个事件,该事件将在编辑器按下保存并关闭(但不是保存)时自动发布项目。

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

在 COM 事件中,我们有一个标志 (doneEditing) 来告诉我们编辑器是否按下了保存和关闭与保存。我似乎无法在 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 的选项,但没有找到任何可以为我提供此信息的东西。有小费吗?

4

3 回答 3

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
于 2012-04-12T20:03:59.647 回答
2

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

我的想法是有一个 GUI 扩展来拦截 Save 并因此为该项目编写一个 AppData 条目,说明它是 Save 或 SaveClose。然后您的事件系统将读取 AppData 并采取相应措施。

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

于 2012-04-11T20:14:21.023 回答
-1

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

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

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

private static void FinishProcessHandler(Process process, FinishProcessEventArgs e, EventPhases phase)
{
   foreach (var itemInWorkflow in process.Subjects)
   {
      //publish
   }
}
于 2012-04-12T08:02:29.550 回答