如何通过指向单个DB的多个实例的代码获取Acumatica实例安装ID
我有3个实例,它们都使用一个DB,我想要所有3个实例的安装ID 我试过这个, PXLicenseHelper.InstallationID 但它只返回当前实例的安装ID PXLicenseHelper.InstallationID如何通过指向单个DB的多个实例的代码获取Acumatica实例安装ID,acumatica,acumatica-kb,Acumatica,Acumatica Kb,我有3个实例,它们都使用一个DB,我想要所有3个实例的安装ID 我试过这个, PXLicenseHelper.InstallationID 但它只返回当前实例的安装ID PXLicenseHelper.InstallationID 是否有任何方法可以让我一次获得所有3个实例的安装ID。我认为不可能从代码中获得,因为安装ID是基于站点的 您需要从数据库中获取一些信息。您可以尝试查看InstallationID列中的许可表。我假设有3个许可实例,在这个表中有3个许可条目 如果其他人对此有一些信息,我
是否有任何方法可以让我一次获得所有3个实例的安装ID。我认为不可能从代码中获得,因为安装ID是基于站点的 您需要从数据库中获取一些信息。您可以尝试查看InstallationID列中的
许可
表。我假设有3个许可实例,在这个表中有3个许可条目
如果其他人对此有一些信息,我很乐意听到。在对该安装ID进行了一些研究之后,我得出以下结论:
InstallationIDBase
+PXDatabase.Provider.SchemaCache.DatabaseName
的计算安装ID。这可以从PXDBFeaturedAccessProvider的安装ID属性获取程序(如下所示)中看到
InstallationIDBase
是根据HostName
、userofprocess
、SiteName
和ApplicationVirtualPath
计算的,这部分可以从pxlicenseheloper
的GetBaseInstallationId
方法(如下所示)中找到
//令牌:0x060092DB RID:37595 RVA:0x00290A40文件偏移量:0x0028EC40
内部静态字符串GetBaseInstallationId(Serilog.ILogger记录器,LogEventLevel)
{
字符串hostName=Dns.GetHostName();
字符串userofprocess=PXInstanceHelper.userofprocess;
字符串siteName=HostingEnvironment.siteName;
字符串applicationVirtualPath=HostingEnvironment.applicationVirtualPath;
string installationIdBase=hostName+userofprocess+siteName+applicationVirtualPath;
if(logger!=null&&logger.IsEnabled(级别))
{
logger.ForContext(“DnsHostName”,hostName,false)。ForContext(“WindowsUser”,userofprocess,false)。ForContext(“SiteName”,SiteName,false)。ForContext(“ApplicationVirtualPath”,ApplicationVirtualPath,false)。Write(级别,“基本安装ID为{BaseInstallationId}”,installationIdBase);
}
返回安装数据库;
}
userofprocess
总是会遇到问题。如果您的所有实例都使用同一个用户,那么差异应该只存在于SiteName
和ApplicationVirtualPath
中,它们不是很重要,可以从HostingEnvironment
中找到
我希望或者可以为我的答案添加更多细节,或者如果我找错了Acumatica的部分,请纠正我。谢谢你的意见Brendan。我尝试使用“许可”表,但没有可用的记录,可能是因为我没有应用任何许可证。任何其他建议都将受到高度赞赏。我不认为会有任何其他东西提供给您安装ID。您可以搜索InstallationID的数据库字段名。仅当实例获得许可时,许可表中才会有记录。在使用生产环境之前,您是否可以在表中添加一些许可证记录,以便在测试时进行模拟?但这是我唯一的猜测,因为看会起作用。谢谢Brendan,我会尝试这个解决方法,看看我会得到什么结果。谢谢Samvel的见解,非常感谢你的投入。我会尽量采纳你的建议,看看我能从中得到什么。
// Token: 0x170019A8 RID: 6568
// (get) Token: 0x06008B0D RID: 35597 RVA: 0x0026A52C File Offset: 0x0026872C
public override byte[] InstallationID
{
get
{
return PXCriptoHelper.CalculateSHA(PXLicenseHelper.InstallationIdBase + PXDatabase.Provider.SchemaCache.DatabaseName);
}
}
// Token: 0x060092DB RID: 37595 RVA: 0x00290A40 File Offset: 0x0028EC40
internal static string GetBaseInstallationId(Serilog.ILogger logger, LogEventLevel level)
{
string hostName = Dns.GetHostName();
string userOfTheProcess = PXInstanceHelper.UserOfTheProcess;
string siteName = HostingEnvironment.SiteName;
string applicationVirtualPath = HostingEnvironment.ApplicationVirtualPath;
string installationIdBase = hostName + userOfTheProcess + siteName + applicationVirtualPath;
if (logger != null && logger.IsEnabled(level))
{
logger.ForContext("DnsHostName", hostName, false).ForContext("WindowsUser", userOfTheProcess, false).ForContext("SiteName", siteName, false).ForContext("ApplicationVirtualPath", applicationVirtualPath, false).Write<string>(level, "Base installation ID is {BaseInstallationId}", installationIdBase);
}
return installationIdBase;
}