You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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. 发布配置与验证

代码调整完成后,按以下步骤操作确保系统加载最新配置:

  1. 重新发布自定义项目,发布时确认勾选Reload Control Classes选项,强制系统重新编译加载所有自定义代码。
  2. 发布完成后进入系统缓存清理页面,清空全量缓存,SaaS实例应用域刷新存在延迟,手动清缓存可避免旧配置干扰。
  3. 等待1-2分钟后打开GI设计界面,在添加关联表的搜索框中输入你设置的PXCacheName或者DAC类名vGFCINItemClassSeg,即可搜到对应的自定义表。
  4. 关联INItemClass表时,若你加了PXParent特性系统会自动填充关联条件,否则手动选择两个表的ItemClassID字段做等值关联即可,关联完成后即可在GI、报表中正常调用视图字段。

常见问题排查

  • 如果发布后仍然搜不到DAC:检查命名空间和类名是否有重名、是否至少标记了一个IsKey字段,数据库视图是否在应用库中真实存在。
  • 如果查询时报对象不存在:检查自定义项目中的数据库脚本是否做了存在性判断,避免脚本执行失败导致视图未创建,脚本开头建议添加如下判断:
    IF NOT EXISTS (SELECT * FROM sys.views WHERE name = 'vGFCINItemClassSeg')
    BEGIN
        -- 这里写你的CREATE VIEW语句
    END
    
  • 如果关联时提示字段类型不匹配:检查关联字段的数据类型、长度是否和主表对应字段完全一致。

内容的提问来源于stack exchange,提问作者SQL Learner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 01:15:37