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

Acumatica PXProjection使用遇CS1031错误:SO表单新增门标签页求助

问题分析与修复方案

错误原因

你的代码存在几个关键问题导致CS1031错误:

  • 投影类继承关系冗余:外层DoorTab类继承SOLineExt完全没必要,投影类只需实现IBqlTable接口即可。
  • BQL查询逻辑错误:你尝试自连接SOLineExt,但筛选条件里引用了SOLine.inventoryID——SOLineExt是SOLine的扩展字段,正确逻辑应该是从SOLine主表关联其扩展表SOLineExt。
  • BQL语法格式错误:代码里用了转义后的&lt;和&gt;,实际编译时必须用原生的<和>;同时连接条件的写法不符合Acumatica BQL规范。

修复后的代码

using System;

namespace PXProjectionTest
{
    [PXProjection(typeof(SelectFrom<SOLine>
                      .InnerJoin<SOLineExt>.On<SOLine.inventoryID.IsEqual<SOLineExt.inventoryID>>
                      .Where<SOLineExt.usrIsDoor.IsEqual<True>>))]
    public class DoorTab : IBqlTable
    {
        #region UsrIsDoor
        [PXDBBool(IsKey = false, BqlField = typeof(SOLineExt.usrIsDoor))]
        [PXUIField(DisplayName = "Is a Door?")]
        public virtual bool? UsrIsDoor { get; set; }
        #endregion

        // 示例:添加SOLine主表字段,按需扩展
        #region InventoryID
        [PXDBInt(BqlField = typeof(SOLine.inventoryID))]
        [PXUIField(DisplayName = "Inventory ID")]
        public virtual int? InventoryID { get; set; }
        public abstract class inventoryID : PX.Data.BQL.BqlInt.Field<inventoryID> { }
        #endregion
    }
}

关键修改点说明

  • 移除多余的外层继承类,直接将PXProjection特性标记在实现IBqlTable的DoorTab类上。
  • 修正BQL查询:从SOLine主表出发关联扩展表SOLineExt,用Acumatica标准的IsEqual语法替代Equal,用BQL常量True替代原生true。
  • 调整UsrIsDoor的IsKey属性为false,该字段不适合作为投影表主键,主键应复用SOLine的OrderNbr、LineNbr等原有主键字段(可按需添加)。
  • 新增InventoryID字段示例,展示如何在投影类中关联主表字段,你可以根据需求添加更多需要展示的字段。

后续实现建议

  • 为视窗、墙面/天花板面板创建投影类时,只需复制上述结构,修改Where条件中的对应字段(如usrIsWindow、usrIsWallPanel)即可。
  • 在SO表单的Graph中声明投影类视图,示例:
    public PXSelect<DoorTab, Where<DoorTab.orderNbr, Equal<Current<SOOrder.orderNbr>>>> DoorTabView;
    
    之后在ASPX页面添加标签页并绑定该视图即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 22:22:33