您最初订阅的事件是任何可识别对象及其任何操作的处理阶段,基本上会在 SDL Tridion CMS 中发生的每个事务上触发,因此它不会向您提供用户登录时间的任何指示(这基本上是一直发生的一切)。
用户登录后发生的第一件事可能是读取其用户信息和应用程序数据。所以你应该尝试的是:
private void Subscribe()
{
EventSystem.Subscribe<User, LoadEventArgs>(GetInfo, EventPhases.Initiated);
}
public void GetInfo(User user, LoadEventArgs args, EventPhases phase)
{
TcmUri id = user.Id;
string name = user.Title;
}
但请记住,这也会由其他操作触发,例如查看历史记录、检查发布事务等等。我不知道如何区分此操作是用户登录的一部分,因为没有专门为此触发的事件。
您可能想检查是否可以在中找到特定于登录的任何内容LoadEventArgs
例如在其ContextVariables
, EventStack
, FormerLoadState
or LoadFlags
.
Edit:
请注意,事件系统在 SDL Tridion 核心内部运行,因此您在任何地方都不会看到控制台窗口弹出。如果要记录信息,可以包含以下 using 语句:
using Tridion.Logging;
添加引用后Tridion.Logging.dll
您可以在您的..\Tridion\bin\client
目录。然后您可以在代码中使用以下日志记录语句:
Logger.Write("message", "name", LoggingCategory.General, TraceEventType.Information);
您可以在 Tridion 事件日志中找到该信息(前提是您已将日志记录级别设置为显示信息消息)。
但这里最好的选择可能是调试事件系统,这样您就可以在事件触发时直接检查对象。Here http://yatb.mitza.net/2012/03/debugging-tridion-2011-event-system.html你可以找到一个不错的博客文章 http://yatb.mitza.net/2012/03/debugging-tridion-2011-event-system.html关于如何设置事件系统的调试。