Acumatica 23 R1及以上版本运行时获取已发布自定义项目列表
在Acumatica 23 R1及以上版本获取已发布自定义项目列表的方法
一、数据库层面查询
Acumatica 23R1版本中,已发布的项目信息存储在dbo.SiteMapProject和dbo.SiteMapProjectItem表中,替代了旧版本的CustPublishProject表。
1. 获取所有已发布项目
SELECT * FROM dbo.SiteMapProject WHERE IsPublished = 1
2. 关联自定义项目(如CustProject)查询已发布的自定义项
如果需要筛选出已发布的CustProject自定义项,可以通过关联SiteMapProjectItem表(记录项目与具体实体的关联关系)实现:
SELECT c.* FROM dbo.CustProject c INNER JOIN dbo.SiteMapProjectItem spi ON spi.EntityID = c.ProjID AND spi.EntityType = 'CustProject' -- 指定实体类型 INNER JOIN dbo.SiteMapProject p ON p.ProjectID = spi.ProjectID AND p.IsPublished = 1
二、Acumatica运行时代码获取
在自定义代码中,可以通过PXSelect查询已发布项目,示例如下:
1. 获取所有已发布项目
using PX.Data; // 在Graph类中执行查询 var publishedProjects = PXSelect<SiteMapProject, Where<SiteMapProject.isPublished, Equal<True>>>.Select(this);
2. 获取已发布的CustProject自定义项
using PX.Data; var publishedCustProjects = PXSelectJoin<CustProject, InnerJoin<SiteMapProjectItem, On<SiteMapProjectItem.entityID, Equal<CustProject.projID>, And<SiteMapProjectItem.entityType, Equal<Required<SiteMapProjectItem.entityType>>>>, InnerJoin<SiteMapProject, On<SiteMapProject.projectID, Equal<SiteMapProjectItem.projectID>, And<SiteMapProject.isPublished, Equal<True>>>>>, Where<SiteMapProjectItem.entityType, Equal<Required<SiteMapProjectItem.entityType>>>> .Select(this, "CustProject", "CustProject");
说明
Acumatica在2021R2及后续版本(包含23R1)重构了发布项目的存储机制,将原有的项目发布表统一替换为SiteMapProject(记录项目基本信息)和SiteMapProjectItem(记录项目包含的具体实体/项),因此旧代码中的CustPublishProject表不再存在。
内容的提问来源于stack exchange,提问作者user2803805
相关产品推荐
相关产品推荐

