如何获得tcmid当前登录用户的外表套上?(How to get tcmid of currentl

2019-08-07 14:48发布

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

    }

我上面的代码写在外表套上服务器添加的组件配置文件,但没有控制台窗口是在用户的登录到来

Answer 1:

您最初订阅该事件与任何其行动的任何辨识物体的处理阶段,将基本触发每一笔交易在支持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在例如ContextVariablesEventStackFormerLoadStateLoadFlags

编辑:

请注意,事件系统是支持SDL Tridion核心内运行,所以你永远不会看到从任何地方一个控制台窗口弹出。 如果要记录的信息,您可以包括以下using语句:

using Tridion.Logging;

增加了一个引用后Tridion.Logging.dll ,你可以在你找到..\Tridion\bin\client目录。 然后你就可以在代码中使用以下日志记录语句:

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

你将找回你的外表套上事件日志(前提是你已经设置日志记录级别,以显示信息消息太)。

但也许这里最好的选择是仅调试事件系统,这样你就可以直接检查你的对象时,该事件被触发。 在这里你可以找到一个很好的博客文章有关事件系统如何安装调试。



Answer 2:

如果你想获得当前用户的TCM URI,您可以通过多种方式这样做。

我会建议其中之一:

  1. 使用核心服务,请致电GetCurrentUser并读取Id属性。
  2. 使用TOM.NET,阅读User.Id当前的财产Session

它看起来像你在这种情况下想要#2你的代码是在事件系统。



文章来源: How to get tcmid of currently logged user in Tridion?