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

如何为Acumatica现有视图添加带OR的额外WHERE条件?

解决Acumatica中添加带OR的筛选条件的BQL编译错误

问题描述

在为Release Production Orders页面添加SOOrderNbr筛选字段时,修改视图的BQL代码出现编译错误。现有视图代码及修改后的错误代码如下:

现有视图代码

public PXProcessingJoin<AMProdItem,
                        InnerJoin<Branch,
                            On<AMProdItem.branchID, Equal<Branch.branchID>>>,
       Where<AMProdItem.released, Equal<False>,
       And<AMProdItem.lastOperationID, IsNotNull,
       And<AMProdItem.hold, Equal<False>,
       And<Branch.baseCuryID, Equal<Current<AccessInfo.baseCuryID>>,
       And<Where<AMProdItem.function, Equal<OrderTypeFunction.regular>,
            Or<AMProdItem.function, Equal<OrderTypeFunction.disassemble>>>>>>>> PlannedOrds;

错误的修改代码

public PXProcessingJoin<AMProdItem,
                        InnerJoin<Branch,
                            On<AMProdItem.branchID, Equal<Branch.branchID>>>,
       Where<AMProdItem.released, Equal<False>,
       And<AMProdItem.lastOperationID, IsNotNull,
       And<AMProdItem.hold, Equal<False>,
       And<Branch.baseCuryID, Equal<Current<AccessInfo.baseCuryID>>,
       And<Where<AMProdItem.function, Equal<OrderTypeFunction.regular>,
            Or<AMProdItem.function, Equal<OrderTypeFunction.disassemble>>>,
       And<Where<Current<PlannedOrdsFilter.sOOrderNbr>, IsNull,
            Or<AMProdItem.ordNbr, Equal<Current<PlannedOrdsFilter.sOOrderNbr>>>>>>>>>>> PlannedOrds;

错误原因

  1. 多余的Where嵌套:在已有的Where块内,不需要额外嵌套Where来包裹Or条件,Acumatica BQL允许直接在And连接的条件中使用Or组合子条件。
  2. 语法括号不匹配:添加的代码片段未正确闭合泛型参数的尖括号,导致编译失败。

正确的实现代码

将筛选条件直接作为And的一个子条件,用Or组合“筛选字段为空”和“订单号匹配”两个逻辑,无需额外Where:

public PXProcessingJoin<AMProdItem,
                        InnerJoin<Branch,
                            On<AMProdItem.branchID, Equal<Branch.branchID>>>,
       Where<AMProdItem.released, Equal<False>,
       And<AMProdItem.lastOperationID, IsNotNull,
       And<AMProdItem.hold, Equal<False>,
       And<Branch.baseCuryID, Equal<Current<AccessInfo.baseCuryID>>,
       And<AMProdItem.function, Equal<OrderTypeFunction.regular>,
            Or<AMProdItem.function, Equal<OrderTypeFunction.disassemble>>,
       And<Current<PlannedOrdsFilter.sOOrderNbr>, IsNull,
            Or<AMProdItem.ordNbr, Equal<Current<PlannedOrdsFilter.sOOrderNbr>>>>>>>> PlannedOrds;

关键说明

  • 当需要添加“可选筛选”(即筛选字段为空时显示全部,不为空时匹配对应值)的逻辑,直接在And后添加Or组合的两个条件即可,无需嵌套Where。
  • 确保所有泛型尖括号<>正确闭合,每个BQL操作符(And/Or/Equal等)的参数都完整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 14:40:05