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

为Portal DAC InventoryLines扩展PXCacheExtension后PXProjection字段不填充排障

问题分析与修正方案

你遇到的新字段无法填充数据,核心问题有三个:

1. PXProjection特性误用

你把[PXProjection]特性加在了**缓存扩展类(InventoryLinesExt)**上,但PXProjection是用来定义主DAC的投影查询的,不能直接加在扩展类上。原InventoryLines已经是PXProjection类型的DAC,扩展类只需扩展字段,不需要重复定义投影——重复定义会覆盖原查询逻辑,导致新字段无法关联到正确的数据源。

2. 字段未绑定到基础表对应字段

新增的StkItem和ItemClassID字段仅用了[PXDBBool]、[PXDBInt]属性,未指定它们对应的基础表字段。在投影DAC的扩展中,必须显式指定字段来自原投影查询中的表(比如InventoryItem),否则系统无法识别数据来源。

3. PXDefault中的字段上下文错误

ItemClassID的PXDefault逻辑里用了stkItem.FromCurrent,这里的stkItem是你在扩展类中定义的抽象字段,实际应该引用原InventoryItem表的stkItem字段,否则默认值逻辑无法获取正确的上下文数据。


修正后的代码

namespace SP.Objects.IN
{
    public class InventoryLinesExt : PXCacheExtension<InventoryLines>
    {
        #region StkItem
        // 显式绑定到InventoryItem表的stkItem字段
        [PXDBBool(typeof(InventoryItem.stkItem))]
        [PXUIField(DisplayName = "Stock Item")]
        public virtual Boolean? StkItem { get; set; }
        public abstract class stkItem : BqlBool.Field<stkItem> { }
        #endregion

        #region ItemClassID
        // 显式绑定到InventoryItem表的itemClassID字段
        [PXDBInt(typeof(InventoryItem.itemClassID))]
        [PXUIField(DisplayName = "Item Class", Visibility = PXUIVisibility.SelectorVisible)]
        [PXDimensionSelector(INItemClass.Dimension, typeof(Search<INItemClass.itemClassID>), typeof(INItemClass.itemClassCD), DescriptionField = typeof(INItemClass.descr), CacheGlobal = true)]
        // 修正PXDefault中的字段引用,使用InventoryItem的stkItem
        [PXDefault(typeof(
            Search2<INItemClass.itemClassID, InnerJoin<INSetup,
                On<InventoryItem.stkItem.FromCurrent.IsEqual<False>.And<INSetup.dfltNonStkItemClassID.IsEqual<INItemClass.itemClassID>>.
                Or<InventoryItem.stkItem.FromCurrent.IsEqual<True>.And<INSetup.dfltStkItemClassID.IsEqual<INItemClass.itemClassID>>>>>>>>))]
        [PXUIRequired(typeof(INItemClass.stkItem))]
        public virtual int? ItemClassID { get; set; }
        public abstract class itemClassID : BqlInt.Field<itemClassID> { }
        #endregion
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 11:05:55