如何在SuiteScript 2.0的createFilter方法中添加带括号的过滤条件
SuiteScript 2.0 使用createFilter实现带括号分组过滤条件的方案
实现原理
在SuiteScript 2.0中,带括号的过滤条件本质是逻辑分组优先级,通过嵌套数组的结构即可实现,不需要额外的特殊方法,
search.createFilter可配合分组逻辑共同使用。
具体实现步骤
以下用实现(类型 = 销售订单 AND 状态 = 已批准) OR (类型 = 发票 AND 状态 = 已付款)的带括号逻辑为例:
- 步骤1:定义每个括号内的分组过滤条件
require(['N/search'], function(search) { // 第一组括号内的条件 const group1 = [ search.createFilter({ name: 'type', operator: search.Operator.ANYOF, values: ['SalesOrd'] }), 'AND', search.createFilter({ name: 'status', operator: search.Operator.ANYOF, values: ['SalesOrd:A'] }) ]; // 第二组括号内的条件 const group2 = [ search.createFilter({ name: 'type', operator: search.Operator.ANYOF, values: ['CustInvc'] }), 'AND', search.createFilter({ name: 'status', operator: search.Operator.ANYOF, values: ['CustInvc:B'] }) ];
- 步骤2:拼接分组条件传入搜索
// 最终过滤条件等价于 (group1) OR (group2),数组嵌套结构会被自动识别为括号优先级 const finalFilters = [group1, 'OR', group2]; // 创建搜索时直接传入即可生效 const transactionSearch = search.create({ type: search.Type.TRANSACTION, filters: finalFilters, columns: ['tranid', 'trandate', 'amount'] }); });
注意事项
- 支持多层嵌套实现多层级括号逻辑,例如
((A AND B) OR (C AND D)) AND E只要对应做多层数组嵌套即可 - 逻辑运算符
AND/OR需大写,放置在两个条件/分组之间 - 不需要额外添加括号标识,数组的嵌套结构会被NetSuite自动解析为带优先级的分组过滤
内容的提问来源于stack exchange,提问作者Kory Conley
相关产品推荐
相关产品推荐

