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

use*_*019 2 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());
}
Run Code Online (Sandbox Code Playgroud)

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

你调用的对象是空的

And*_*huk 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")
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

你想要警告,还是想要阻止CheckOut?

  • 关于订阅,我会订阅Page和Component并调用泛型方法CheckOutWarning(VersionedItem item,CheckOutEventArgs args,EventPhases阶段),这样你就不会重复代码,也不会在所有Check Out事件中激活你的代码. VersionedItem. (2认同)