添加事件处理程序后无法检出组件或页面

时间:2012-07-27 12:20:33

标签: tridion tridion-2011

我正在为 CheckOutEventArgs 添加事件处理程序,并且我正在尝试获取结帐用户详细信息。以下是我的代码。

public void Subscribe()
{
    EventSystem.Subscribe<Page, CheckOutEventArgs>(PageCheckOutWarning,
                                                   EventPhases.Initiated);
    EventSystem.Subscribe<Component, CheckOutEventArgs>(ComponentCheckOutWarning,
                                                        EventPhases.Initiated);
} 

private void ComponentCheckOutWarning(Component component, 
                                      CheckOutEventArgs args, EventPhases phase)
{
    logdetails("Checkout User-->" + component.CheckOutUser.Title.ToString());
}

当我尝试签出组件/页面时,我在Tridion Explorer错误消息框中收到此错误。

  

对象引用未设置为对象的实例

1 个答案:

答案 0 :(得分:8)

您订阅了Initiated阶段,此phse项目尚未签出,因此没有CheckOutUser。您应该订阅一些后期阶段。

另外,我不知道您的代码在做什么,但您可能会考虑订阅一些通用类,例如包含组件和页面的VersionedItem

同样,不知道您的想法,但如果您想要警告,请查看SubscribeAsync方法。这样它的执行速度会更快。

如果您仍想在启动阶段了解用户 - 您可以从会话中获取该用户: component.Session.User.Title

您可以订阅VersionedItem,然后在事件处理程序中执行:

private void CheckOutWarning(VersionedItem item, CheckOutEventArgs args, EventPhases phase)
{
    if (item.GetType().Name == "Component" || item.GetType().Name == "Page")
    {
    }
}

您想要发出警告,还是想阻止CheckOut?