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

PriceDiscAdm窗体添加EcoResProduct字段触发异常新建记录问题

D365FO PriceDiscAdm窗体加EcoResProduct字段触发自动建产品记录修复方案

问题根因

问题出在新增关联数据源的属性和关联类型配置错误:新增InventTable、EcoResProduct作为关联展示用数据源时,保留了数据源默认的可写配置,系统识别关联链路后,会在主数据源PriceDiscAdmTrans新建记录时,顺着关联关系给上层关联的数据源初始化新记录缓冲区,最终触发EcoResProduct的插入逻辑,本质是把只读关联的展示数据源当成了和主表联动的业务数据源。

修复步骤

  • 打开PriceDiscAdm窗体设计器,定位到你新增的InventTable、EcoResProduct两个数据源
  • 逐个修改两个数据源的核心属性:
    • AllowCreate:设为No
    • AllowEdit:设为No
    • AllowDelete:设为No
    • InsertIfEmpty:设为No
    • ReadOnly:设为Yes
  • 校验关联链路配置:

    关联链路必须遵循外键逻辑:PriceDiscAdmTrans(主数据源) -> InventTable -> EcoResProduct,所有层级关联的LinkType统一设为OuterJoin,禁止使用会触发跨数据源记录联动的关联类型

    • InventTable数据源的JoinSource绑定到PriceDiscAdmTrans,关联字段为PriceDiscAdmTrans.ItemId == InventTable.ItemId
    • EcoResProduct数据源的JoinSource绑定到InventTable,直接使用表原生的InventTable.Product == EcoResProduct.RecId关联关系即可
  • 兜底校验(属性配置完仍有问题时使用):给两个新增数据源重写write、initValue方法,直接阻断写入逻辑:
    public void initValue()
    {
        // 只读展示数据源无需初始化新记录
        return;
    }
    
    public void write()
    {
        // 只读展示数据源禁止写入操作
        return;
    }
    
  • 保存修改后重新编译、同步数据库,清空客户端缓存后验证:新建PriceDiscAdmTrans记录时不会再触发EcoResProduct新建,网格中绑定的EcoResProduct字段可正常展示已有产品的对应信息。

避坑提示

不要跳过InventTable直接给PriceDiscAdmTrans加EcoResProduct引用数据源,PriceDiscAdmTrans的外键是通过ItemId关联InventTable,没有直接关联EcoResProduct的RecId字段,跨层直接关联会被系统识别为主数据新建场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 21:57:25