在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的选项,但没有找到任何可以提供这些信息的内容。有什么提示吗?
答案 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
}
}