含双Where多Or条件的BQL语法正确性咨询
BQL语法正确性排查:多Or条件添加后报错问题
我想确认以下BQL语法是否正确:
public PXProcessing<ABONNEMENT, Where<ABONNEMENT.abodatenextgeneration, GreaterEqual<Current<aboFilter.usrdatedeb>>, And<ABONNEMENT.abodatenextgeneration, LessEqual<Current<aboFilter.usrdatefin>>, And<Where<Current<aboFilter.usrClient>, IsNull, Or<ABONNEMENT.aboclt, Equal<Current<aboFilter.usrClient>>>>>, And<Where<Current<aboFilter.usrAnalytique>,IsNull,Or<ABONNEMENT.aboanalytique, Equal<Current<aboFilter.usrAnalytique>>>>>>>> AbonnementList;
仅包含一个带Or的Where条件时该语法可正常运行,但添加第二个后出现问题。单条件可运行的代码示例如下:
public PXProcessing<ABONNEMENT, Where<ABONNEMENT.abodatenextgeneration, GreaterEqual<Current<aboFilter.usrdatedeb>>, And<ABONNEMENT.abodatenextgeneration, LessEqual<Current<aboFilter.usrdatefin>>, And<Where<Current<aboFilter.usrClient>, IsNull, Or<ABONNEMENT.aboclt, Equal<Current<aboFilter.usrClient>>>>>>>> AbonnementList;
问题分析与修正
你的多条件BQL语法核心问题是泛型尖括号层级不匹配,导致逻辑结构解析错误。Acumatica的BQL对嵌套逻辑的括号闭合要求严格,添加第二个带Or的Where条件时,外层And的嵌套层级和括号数量没有对应上。
修正后的正确代码
public PXProcessing<ABONNEMENT, Where<ABONNEMENT.abodatenextgeneration, GreaterEqual<Current<aboFilter.usrdatedeb>>, And<ABONNEMENT.abodatenextgeneration, LessEqual<Current<aboFilter.usrdatefin>>, And<Where<Current<aboFilter.usrClient>, IsNull, Or<ABONNEMENT.aboclt, Equal<Current<aboFilter.usrClient>>>>, And<Where<Current<aboFilter.usrAnalytique>, IsNull, Or<ABONNEMENT.aboanalytique, Equal<Current<aboFilter.usrAnalytique>>>>>>>> AbonnementList;
关键修正点
- 确保每个带Or的过滤逻辑(客户端、分析维度)都作为同级的
And子句,逻辑上表示:日期范围满足,且(无客户端过滤条件或客户端匹配),且(无分析维度过滤条件或分析维度匹配) - 检查所有尖括号的闭合数量,每个
Where/And的泛型参数都需要对应数量的闭合尖括号 - 嵌套逻辑的层级要清晰,避免因括号缺失导致的语法解析失败
内容的提问来源于stack exchange,提问作者Xavier LARTEM
相关产品推荐
相关产品推荐

