我正在为 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/