Acumatica创建SQL视图后如何正确配置DAC供GI及报表使用
Acumatica 自定义SQL视图DAC配置方法
你的推测是正确的,当前空DAC类没有字段、没有主键定义,系统根本无法识别其结构,自然不会出现在通用查询(GI)的关联表列表中。按以下步骤配置即可正常使用:
1. 补全DAC字段与主键定义
你当前的DAC类是空实现,没有任何字段映射到数据库视图的列,也没有定义主键,Acumatica不会将其识别为可查询的有效数据访问类。
可以通过两种方式补全字段:
- 自动生成:在自定义项目代码编辑器中打开该DAC文件,右键选择Generate Members from Database(从数据库生成成员),选中已创建的
vGFCINItemClassSeg视图,系统会自动拉取视图所有列,生成对应类型的字段代码,之后手动给唯一标识行的字段添加IsKey = true标记为主键即可。 - 手动编写:按照视图的列结构逐一定义字段,每个字段需要匹配对应的数据类型,且必须至少指定一个字段为主键。
以下是适配关联INItemClass表的DAC参考代码:
using System; using PX.Data; using PX.Objects.IN; // 注意:不要直接用视图名作为命名空间,建议使用自定义统一命名空间,避免引用冲突 namespace YourCompany.Customization { [Serializable] [PXCacheName("商品分类分段视图")] // GI、报表中显示的表名称 public class vGFCINItemClassSeg : IBqlTable { #region ItemClassID // BQL字段声明,用于系统识别字段做查询关联 public abstract class itemClassID : PX.Data.BQL.BqlInt.Field<itemClassID> { } // 标记为数据库整型字段、设为主键,和INItemClass表的ItemClassID字段类型保持一致 [PXDBInt(IsKey = true)] [PXUIField(DisplayName = "商品分类ID")] // 可选:添加父表关联特性,GI添加关联时会自动带出和INItemClass的关联条件 [PXParent(typeof(Select<INItemClass, Where<INItemClass.itemClassID, Equal<Current<vGFCINItemClassSeg.itemClassID>>>>))] public virtual int? ItemClassID { get; set; } #endregion // 其余视图返回的字段按相同规则补全即可,示例: #region SegValue public abstract class segValue : PX.Data.BQL.BqlString.Field<segValue> { } [PXDBString(30, IsUnicode = true)] [PXUIField(DisplayName = "分段值")] public virtual string SegValue { get; set; } #endregion } }
注意:绑定原生SQL视图的DAC不要加
[PXProjection]特性,该特性仅用于内存投影类,加了会导致数据库查询逻辑异常。
2. 发布配置与验证
代码调整完成后,按以下步骤操作确保系统加载最新配置:
- 重新发布自定义项目,发布时确认勾选Reload Control Classes选项,强制系统重新编译加载所有自定义代码。
- 发布完成后进入系统缓存清理页面,清空全量缓存,SaaS实例应用域刷新存在延迟,手动清缓存可避免旧配置干扰。
- 等待1-2分钟后打开GI设计界面,在添加关联表的搜索框中输入你设置的PXCacheName或者DAC类名
vGFCINItemClassSeg,即可搜到对应的自定义表。 - 关联INItemClass表时,若你加了PXParent特性系统会自动填充关联条件,否则手动选择两个表的
ItemClassID字段做等值关联即可,关联完成后即可在GI、报表中正常调用视图字段。
常见问题排查
- 如果发布后仍然搜不到DAC:检查命名空间和类名是否有重名、是否至少标记了一个IsKey字段,数据库视图是否在应用库中真实存在。
- 如果查询时报对象不存在:检查自定义项目中的数据库脚本是否做了存在性判断,避免脚本执行失败导致视图未创建,脚本开头建议添加如下判断:
IF NOT EXISTS (SELECT * FROM sys.views WHERE name = 'vGFCINItemClassSeg') BEGIN -- 这里写你的CREATE VIEW语句 END - 如果关联时提示字段类型不匹配:检查关联字段的数据类型、长度是否和主表对应字段完全一致。
内容的提问来源于stack exchange,提问作者SQL Learner
相关产品推荐
相关产品推荐

