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;
Console.WriteLine(id.ToString());
Console.WriteLine(name);
}
我上面的代码写在外表套上服务器添加的组件配置文件,但没有控制台窗口是在用户的登录到来
您最初订阅该事件与任何其行动的任何辨识物体的处理阶段,将基本触发每一笔交易在支持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
或LoadFlags
。
编辑:
请注意,事件系统是支持SDL Tridion核心内运行,所以你永远不会看到从任何地方一个控制台窗口弹出。 如果要记录的信息,您可以包括以下using语句:
using Tridion.Logging;
增加了一个引用后Tridion.Logging.dll
,你可以在你找到..\Tridion\bin\client
目录。 然后你就可以在代码中使用以下日志记录语句:
Logger.Write("message", "name", LoggingCategory.General, TraceEventType.Information);
你将找回你的外表套上事件日志(前提是你已经设置日志记录级别,以显示信息消息太)。
但也许这里最好的选择是仅调试事件系统,这样你就可以直接检查你的对象时,该事件被触发。 在这里你可以找到一个很好的博客文章有关事件系统如何安装调试。
如果你想获得当前用户的TCM URI,您可以通过多种方式这样做。
我会建议其中之一:
- 使用核心服务,请致电
GetCurrentUser
并读取Id
属性。 - 使用TOM.NET,阅读
User.Id
当前的财产Session
。
它看起来像你在这种情况下想要#2你的代码是在事件系统。