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 错误消息框中收到此错误。

你调用的对象是空的

4

1 回答 1

8

您已订阅Initiated阶段,在此阶段项目尚未签出,因此没有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?

于 2012-07-27T12:26:31.277 回答