无法在添加事件处理程序后签出组件或页面
问题描述:
我正在为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错误消息框中出现此错误。
对象引用不设置到对象
答
您已经订阅了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?
VersionedItem也将包含模板。而不是EventPhases.Initiated使用EventPhases.Processed。还要将null检查添加到component.CheckOutUser。 – Bappi 2012-07-27 12:33:42
我想在结帐时提供页面和组件的警告消息。如果同一个修改者签出页面/组件,那么不会有问题,如果修改者和签出用户不相同,那么我必须显示警告消息。为了实现这一点,我需要订阅组件和页面的权利?或者有没有办法在单订阅中做到这一点?或者有没有更好的办法? – user1428019 2012-07-27 12:51:25
VersionedItem将覆盖页面,组件?我可以使用subscribe()吗?并正在VersionedItem vitem = session.GetObject(page.Id)作为VersionedItem; vitem.Revisor.Title;它仅给出当前签出的用户详细信息。对于当前签出的用户,我尝试了page.CheckOutUser.Title,但两者都给出相同的输出 – user1428019 2012-07-27 12:58:55