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

Tridion 添加事件处理程序后无法签出组件或页面,tridion,tridion-2011,Tridion,Tridion 2011,我正在为CheckOutEventArgs添加事件处理程序,并尝试获取签出用户详细信息。下面是我的代码 public void Subscribe() { EventSystem.Subscribe(PageCheckOutWarning, 事件阶段(已启动); EventSystem.Subscribe(组件检查预警, 事件阶段(已启动); } 私有void组件CheckOutWarning(组件, CheckOutEventArgs参数,事件阶段(阶段) { 日志详细信息(“签出用户-->

我正在为CheckOutEventArgs添加事件处理程序,并尝试获取签出用户详细信息。下面是我的代码

public void Subscribe()
{
EventSystem.Subscribe(PageCheckOutWarning,
事件阶段(已启动);
EventSystem.Subscribe(组件检查预警,
事件阶段(已启动);
} 
私有void组件CheckOutWarning(组件,
CheckOutEventArgs参数,事件阶段(阶段)
{
日志详细信息(“签出用户-->”+组件.CheckOutUser.Title.ToString());
}
当我尝试签出组件/页面时,在Tridion Explorer错误消息框中会出现此错误

对象引用未设置为对象的实例


您已订阅
已启动
阶段,在此phse中,项目尚未签出,因此没有
签出用户
。您应该订阅后面的一些阶段

此外,我不知道你的代码在做什么,但是你可以考虑订阅一些泛型类,比如“代码> VersionedItem < /Cult>,其中包含组件和Page。 同样,我不知道你的想法,但如果你想得到一个警告,可以看看SubscribeAsync方法。这样它将执行得更快

如果您仍想了解处于启动阶段的用户,可以从会话中获取:
component.Session.User.Title

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

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

您是想发出警告,还是想阻止签出?

VersionedItem也将包含模板。而不是EventPhases.Initiated使用EventPhases.Processed。还向component.CheckOutUser添加空检查。我想在签出时给出页面和组件的警告消息。如果页面/组件中签出了相同的修订者,则没有问题,如果修订者和签出用户不相同,则我必须显示警告消息。要完成这个,我需要订阅组件和页面,对吗?或者有没有办法在单一订阅中实现这一点?或者有更好的方法吗?VersionedItem将覆盖页面,组件?我可以使用subscribe()吗?我正在尝试VersionedItem vitem=session.GetObject(page.Id)作为VersionedItem;vitem.Revisor.Title;它仅提供当前已签出的用户详细信息。对于当前checkedout用户,我尝试了page.CheckOutUser.Title,但两者都给出了相同的关于订阅的输出,我将同时订阅页面和组件,并调用通用方法CheckOutWarning(VersionedItem、CheckOutEventTargets args、EventPhase),这样,您就不会重复代码,也不会对VersionedItem的所有签出事件触发代码。您已经在其他问题中询问了Revisor vs CheckOutUser。如果您只想发出警告-使用
SubscrybeAsync
,如果您想在用户不正常时阻止签出-使用
Subscrybe
。VersionedItem将涵盖模式、组件、页面和模板。你可以通过我在回答中提供的代码来解决这个问题,或者更好地遵循巴特的建议