-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で発生するすべてのトランザクションでトリガーされるため、ユーザーがいつログインしたかはわかりません。 (基本的には常に発生するすべてです)。

おそらく、ユーザーがログインした後に最初に発生することの1つは、ユーザー情報とアプリケーションデータが読み取られることです。したがって、試してみる必要があるのは、次のようなものです。

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に固有の何かを見つけることができるかどうかを確認することをお勧めします。FormerLoadStateLoadFlags

編集:

イベントシステムはSDLTridionコア内で実行されているため、どこからでもコンソールウィンドウのポップアップが表示されないことに注意してください。情報をログに記録する場合は、次の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

現在のユーザーのTCMURIを取得する場合は、さまざまな方法で取得できます。

私はこれらの1つをお勧めします:

  1. コアサービスを使用してGetCurrentUser、プロパティを呼び出して読み取りIdます。
  2. TOM.NETを使用しUser.Idて、現在ののプロパティを読み取りますSession

コードがイベントシステムにあるため、この場合は#2が必要なようです。

于 2013-01-21T12:51:54.983 に答える