0

DynamicsAX内でInfologがどのように機能するかを理解しようとしています。次のコードで情報ログウィンドウにテキストが表示されることを理解しています。

info( "Hello World!");

infoGlobalクラスの静的メソッドであるため、実際に指定せずに名前を呼び出すだけでメソッドを呼び出すことができることを認識しています。Global::

Globalクラスのメソッド情報を調べていると、が呼び出されることに気付きました。右クリックしてオプションを選択すると、クラスInfoのメソッドaddに移動します。infolog.addaddLookup Definition

メソッドaddが存在するクラスの名前がInfoの場合、 InfologGlobal::info()という名前で内部からどのように呼び出されますか?

私が到達できる唯一の論理的な結論は、InfologがクラスInfoのエイリアスであるということです。それが正しければ、このエイリアスはAOT(アプリケーションオブジェクトツリー)のどこで定義されていますか?

AOTを検索しましたが、Infologという用語への複数の参照が見つかりましたが、 ApplicationまたはSystemクラスに直接関連するものは見つかりませんでした。

4

2 に答える 2

1

Microsoft Dynamicsコミュニティフォーラムに投稿した同じ質問への回答は、コードをよりよく理解するのに役立ちました。

InfologはクラスInfoのエイリアスですか?-MicrosoftDynamicsCommunityフォーラムでの回答

以下に示すコードは、静的メソッドからのものGlobal::info()です。addオブジェクトを使用したメソッドの呼び出しinfologが実際にはインスタンスメソッドであり、静的ではないことに気づきませんでした。

client server static Exception info(
    SysInfoLogStr txt, 
    URL helpUrl = '', 
    SysInfoAction _sysInfoAction = null)
{
    return infolog.add(Exception::Info, 
        getPrefix()+txt, 
        helpUrl, 
        _sysInfoAction, false);
}

つまり、infologはクラスのインスタンスですInfoクラスInfoを調べた後、メソッドを見つけましたstartup。コードをデバッグするためにブレークポイントを保持しましたが、AXクライアントが開かれるたびにこのメソッドが呼び出されることがわかりました。このメソッドは、。という名前の別のメソッドを呼び出しますinitBrowserinitBrowser内で、次のコードはWindowsハンドルを使用してInfologのグローバルインスタンスを初期化するようです。

this.initializeInfolog(this.browser().hWnd());

上記の方法は、Infoの親クラスであるinitializeInfologSystemクラスに存在します。xInfoクラスxInfoInfoを調べることができないので、ここで名前を持つクラスのインスタンスinfologが作成されていると思います。

于 2012-11-08T20:03:20.613 に答える
1

エイリアスではないと思います。カーネルレベルで定義されたグローバル変数だと思います。

編集:あなたは私がそれに答えている間にあなたの質問に答えました...

于 2012-11-08T20:09:21.593 に答える