-2
    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);

    }

我编写了上面的代码并将程序集添加到 Tridion 服务器的配置文件中,但是在用户登录时没有控制台窗口出现

4

2 回答 2

3

您最初订阅的事件是任何可识别对象及其任何操作的处理阶段,基本上会在 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;
}

但请记住,这也将由其他操作触发,例如查看历史记录、检查发布交易等等。我不知道您如何将此操作区分为用户登录的一部分,因为没有专门为此触发的事件。

您可能想检查是否可以LoadEventArgsContextVariables、或EventStack中找到特定于登录的任何内容。FormerLoadStateLoadFlags

编辑:

请注意,事件系统在 SDL Tridion 核心内运行,因此您不会从任何地方看到控制台窗口弹出。如果要记录信息,可以包含以下 using 语句:

using Tridion.Logging;

添加对Tridion.Logging.dll您可以在..\Tridion\bin\client目录中找到的引用后。然后,您可以在代码中使用以下日志记录语句:

Logger.Write("message", "name", LoggingCategory.General, TraceEventType.Information); 

您可以在 Tridion 事件日志中找到它(前提是您也设置了日志级别以显示信息消息)。

但这里最好的选择可能是调试您的事件系统,这样您就可以在触发事件时直接检查您的对象。在这里,您可以找到一篇关于如何设置事件系统调试的不错的博客文章。

于 2013-01-21T10:55:25.733 回答
1

如果要获取当前用户的 TCM URI,可以通过多种方式进行。

我会推荐其中之一:

  1. 使用核心服务,调用GetCurrentUser并读取Id属性。
  2. 使用 TOM.NET,读取User.Id当前Session.

在这种情况下,您似乎想要#2,因为您的代码位于事件系统中。

于 2013-01-21T12:51:54.983 回答