tridion - 添加事件处理程序后无法 checkout 组件或页面

标签 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());
}

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

Object Reference not set to an instance of an object

最佳答案

您已订阅Initiated阶段,在此阶段项目尚未 checkout ,因此没有CheckOutUser。您应该订阅一些后续阶段。

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

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

如果您仍然想了解启动阶段的用户 - 您可以从 session 中获取它: component.Session.User.Title

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

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

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

关于tridion - 添加事件处理程序后无法 checkout 组件或页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11687651/

相关文章:

tridion - 连接到 SDL Tridion 2011 (GA) CME 时出错

c# - 如何在 C# TBB(C# 代码片段)中添加用户定义的方法?

tridion - SDL Tridion 2011 中 MultiLineText 字段的 MaxLength 限制

tridion - 存档管理器如何检查未更改的内容与已更改的内容?

tridion - 如何自动更新通讯组列表扩展字段值?

Tridion UI - siteedit - 添加现有内容未使用正确的组件模板

excel - 如何将 Tridion 中的关键字提取为 Excel 格式?

tridion - 部署准备提交阶段失败,无法准备事务

tridion - 自定义元中关键字的值不正确