我正在为 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错误消息框中收到此错误。
对象引用未设置为对象的实例
答案 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?