Axapta 在AX中使用环境变量

Axapta 在AX中使用环境变量,axapta,dynamics-ax-2009,Axapta,Dynamics Ax 2009,是否有可能在AX中使用windows环境变量 示例: 属性NormalImage位于MenuItem上。我想使用%USERNAME%之类的东西,而不是显式的用户名。例如,在类中,我可以使用WINAPI宏并引用用户文件夹变量,例如CSIDL\u MYPICTURES,以访问每个用户的路径。在AOT对象属性中,无法引用宏 有什么办法可以做到这一点 不,您不能在AOT上执行此操作。您可以通过X++代码在运行时更改某些属性,但据我所知,您无法动态更改菜单项上的图像 您可以使某些菜单项可见/不可见。可以通

是否有可能在AX中使用windows环境变量

示例

属性
NormalImage
位于
MenuItem
上。我想使用%USERNAME%之类的东西,而不是显式的用户名。例如,在类中,我可以使用
WINAPI
宏并引用用户文件夹变量,例如
CSIDL\u MYPICTURES
,以访问每个用户的路径。在AOT对象属性中,无法引用宏


有什么办法可以做到这一点

不,您不能在AOT上执行此操作。您可以通过X++代码在运行时更改某些属性,但据我所知,您无法动态更改菜单项上的图像


您可以使某些菜单项可见/不可见。可以通过这种方式模拟您试图执行的操作,尽管这与AX设计模式不太一致。

是的,您可以使用.Net framework获取环境变量,也可以使用内置AX函数。请参见我键入的示例:

static void Job85(Args _args)
{
    System.String   systemString;
    str             marshalString;
    ;

    // Built in AX function
    info(strfmt("%1, %2, %3", xUserInfo::find().networkAlias, xUserInfo::find().networkDomain, xUserInfo::find().name));

    // .Net Framework
    systemString = System.Environment::GetEnvironmentVariable('username');
    marshalString = systemString; // Marshal it
    info(strfmt("%1", marshalString));
}

请参见获取客户端名称和计算机名称的示例

static void testGetClientMachineName(Args _args)
{
    str localClientname, terminalServerName;
    ;
    localClientname = System.Environment::GetEnvironmentVariable('CLIENTNAME') ;
    info(localClientname);

    terminalServerName = System.Environment::get_MachineName();
    info(terminalServerName);

}

您可以更改菜单项上的图像(基本上是我这样做的),但用户名在文件夹中是不包含的,因此它只适用于当前登录的用户…)对不起,我的拼写错误,我想说的是你不能随意更改图像。当然,您可以在AOT上更改它。我个人并没有尝试过这个特定的案例,但可能是您可以使用类似的方法将映像部署到每个客户端上的固定路径,所以问题:。它适用于客户端使用的其他图像,因此可能会起到作用。这正是我所采用的方法。但是使用用户文件夹,属性路径设置为C:\users\user1\。。例如,它不适用于user2、user3等。因此,我想用%username%之类的东西来代替user1,就像windows那样。。!好的,我知道了。。。据我所知,你无法控制这条路,所以如果你真的想要,你必须找到某种“创造性”的解决办法。正如我所说,axui设计遵循一个简单的设计模式,这不是这个公式的一部分。如果你发现关于这个主题的更多信息,请随时通知我们,我对此很感兴趣。