0

我试图了解Infolog在 Dynamics AX 中的工作方式。我了解以下代码将在信息日志窗口中显示文本。

info("你好世界!");

我知道infoGlobal类的静态方法,因此可以通过简单地调用名称来调用该方法,而无需实际指定Global::

在查看Global类中的方法信息时,我注意到它调用了. 右键单击并选择该选项将我带到类Info中的方法添加infolog.addaddLookup Definition

如果add方法所在的类被命名为Info,它是如何从Global::info()名为Infolog的内部调用的?

我能得出的唯一合乎逻辑的结论是Infolog是类Info的别名。如果这是正确的,这个别名在 AOT(应用程序对象树)中定义在哪里?

我搜索了 AOT,但发现了多个对Infolog一词的引用,但我找不到任何与应用程序系统类直接相关的内容。

4

2 回答 2

1

对我在 Microsoft Dynamics 社区论坛上发布的同一问题的回答帮助我更好地理解了代码。

Infolog 是 Info 类的别名吗?- Microsoft Dynamics 社区论坛上的回复

下面显示的代码来自静态方法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 客户端时都会调用此方法。该方法又调用另一个名为 的方法initBrowser。在initBrowser中,以下代码似乎使用 Windows 句柄初始化 Infolog 的全局实例。

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

上面的方法initializeInfolog存在于 System 类xInfo中,它是 Info 的父类。由于我无法查看类xInfo,我假设这是创建Info具有名称的类实例的位置infolog

于 2012-11-08T20:03:20.613 回答
1

我不认为这是一个别名。我认为这是在内核级别定义的全局变量。

编辑:当我回答时你回答了你的问题......

于 2012-11-08T20:09:21.593 回答