2012-07-27 32 views
2

我正在为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错误消息框中出现此错误。

对象引用不设置到对象

回答

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?

+1

VersionedItem也将包含模板。而不是EventPhases.Initiated使用EventPhases.Processed。还要将null检查添加到component.CheckOutUser。 – Bappi 2012-07-27 12:33:42

+0

我想在结帐时提供页面和组件的警告消息。如果同一个修改者签出页面/组件,那么不会有问题,如果修改者和签出用户不相同,那么我必须显示警告消息。为了实现这一点,我需要订阅组件和页面的权利?或者有没有办法在单订阅中做到这一点?或者有没有更好的办法? – user1428019 2012-07-27 12:51:25

+0

VersionedItem将覆盖页面,组件?我可以使用subscribe()吗?并正在VersionedItem vitem = session.GetObject(page.Id)作为VersionedItem; vitem.Revisor.Title;它仅给出当前签出的用户详细信息。对于当前签出的用户,我尝试了page.CheckOutUser.Title,但两者都给出相同的输出 – user1428019 2012-07-27 12:58:55

相关问题