AX 2012 - 在 X++ 中获取实例名称而不是服务器名称
AX 2012 - Get Instance Name not Server Name in X++
是否可以在 X++ 中获取 实例名称 而不是 服务器名称?
附件图片显示了我要查找的字段:
当我使用 xSession.AOSName();
时,它 return 是服务器名称,当我使用 sysServerSessions..Instance_Name;
时,它是 return 空字符串。 Instance_Name 字段在数据库中只有“01”,因此如果它 return 是一个值,它仍然是不正确的。
Instance name (optional)
,我相信只是文件夹名称和服务显示名称。因此,当您创建多个实例时,它会创建一个文件夹 C:\Program Files\Microsoft Dynamics AX\Server\[InstanceName]\
,然后是一个具有该实例显示名称的 AOS 服务。
如果您真的需要它,您可以枚举文件夹并使用正则表达式或任何其他方法对其进行解析。要枚举文件夹,请在某处创建此 server 静态方法并调用它:
static server FilenameOpen pathServer()
{
return xInfo::directory(DirectoryType::Bin);
}
还有一个ServerId
,我觉得和Instance Name
不一样,但是在SysServerConfig
table:
while select sysServerConfig
{
info(strFmt("%1", sysServerConfig.ServerId));
}
而ServerId
是从AOSId和名称等派生出来的值。你可以在这个方法中看到它是如何派生的:
\Data Dictionary\Tables\SysServerConfig\Methods\delete
下面是 Alex 获取实例名称的答案中添加的逻辑。
static server str getAOSInstanceName()
{
str serverPath;
str instanceName;
int fullPathLen;
int serverNameEnd;
int instanceNameStart;
//Get the full path of the AOS Server install.
serverPath = xInfo::directory(DirectoryType::Bin);
fullPathLen = strLen(serverPath);
//Get the location of where the Instance Names Ends. "-5" represents "\bin\" in the full path.
serverNameEnd = fullPathLen - 5;
//Get the location where the Instance Name Starts - 1.
instanceNameStart = strFind(serverPath, @"\", serverNameEnd, - fullPathLen);
//Get the Instance Name.
instanceName = subStr(serverPath, instanceNameStart + 1, serverNameEnd - serverNameStart);
return instanceName;
}
是否可以在 X++ 中获取 实例名称 而不是 服务器名称?
附件图片显示了我要查找的字段:
当我使用 xSession.AOSName();
时,它 return 是服务器名称,当我使用 sysServerSessions..Instance_Name;
时,它是 return 空字符串。 Instance_Name 字段在数据库中只有“01”,因此如果它 return 是一个值,它仍然是不正确的。
Instance name (optional)
,我相信只是文件夹名称和服务显示名称。因此,当您创建多个实例时,它会创建一个文件夹 C:\Program Files\Microsoft Dynamics AX\Server\[InstanceName]\
,然后是一个具有该实例显示名称的 AOS 服务。
如果您真的需要它,您可以枚举文件夹并使用正则表达式或任何其他方法对其进行解析。要枚举文件夹,请在某处创建此 server 静态方法并调用它:
static server FilenameOpen pathServer()
{
return xInfo::directory(DirectoryType::Bin);
}
还有一个ServerId
,我觉得和Instance Name
不一样,但是在SysServerConfig
table:
while select sysServerConfig
{
info(strFmt("%1", sysServerConfig.ServerId));
}
而ServerId
是从AOSId和名称等派生出来的值。你可以在这个方法中看到它是如何派生的:
\Data Dictionary\Tables\SysServerConfig\Methods\delete
下面是 Alex 获取实例名称的答案中添加的逻辑。
static server str getAOSInstanceName()
{
str serverPath;
str instanceName;
int fullPathLen;
int serverNameEnd;
int instanceNameStart;
//Get the full path of the AOS Server install.
serverPath = xInfo::directory(DirectoryType::Bin);
fullPathLen = strLen(serverPath);
//Get the location of where the Instance Names Ends. "-5" represents "\bin\" in the full path.
serverNameEnd = fullPathLen - 5;
//Get the location where the Instance Name Starts - 1.
instanceNameStart = strFind(serverPath, @"\", serverNameEnd, - fullPathLen);
//Get the Instance Name.
instanceName = subStr(serverPath, instanceNameStart + 1, serverNameEnd - serverNameStart);
return instanceName;
}