SuiteScript已保存搜索筛选:勾选复选框显示含指定项的发票全条目
解决SuiteScript已保存搜索的发票筛选逻辑问题
你的问题核心是:勾选复选框时,要返回包含指定物料的整张发票的所有条目,而非仅该物料的条目;未勾选时只返回发票中匹配指定物料的条目。原代码的问题在于,勾选时的筛选逻辑完全错误,["item", "anyof", "item"]是无效写法,既没关联到指定物料,也没实现“找整张发票”的逻辑。
正确实现思路
当复选框为true时,需要分两步:
- 先通过子搜索找出所有包含指定物料的发票内部ID
- 主搜索筛选出这些发票ID对应的所有行条目
未勾选时,直接筛选物料等于指定ID的行即可,这部分原逻辑是对的,只需保留。
完整代码示例
// 假设你已经有一个初始化的filter数组 let filter = []; if (checkbox === true) { if (itemId[0] && itemId[0] !== "") { // 子搜索:获取包含指定物料的所有发票ID const invoiceIdsSearch = search.create({ type: search.Type.INVOICE, filters: [ ["item", "anyof", itemId] ], columns: ["internalid"] }); // 执行子搜索并提取发票ID数组 const invoiceIds = invoiceIdsSearch.run().map(result => result.getValue("internalid")); if (invoiceIds.length > 0) { // 主搜索筛选:发票ID在子搜索结果中,即返回这些发票的所有行 filter.push( "AND", ["internalid", "anyof", invoiceIds] ); } } } else { if (itemId[0] && itemId[0] !== "") { // 未勾选时:仅返回匹配指定物料的行 filter.push( "AND", ["item", "anyof", itemId] ); } }
代码说明
- 子搜索专门针对发票主记录,筛选出包含指定物料的发票ID,确保我们拿到所有符合条件的发票
- 主搜索通过发票ID筛选,就能返回这些发票的全部行条目,不管行里的物料是什么
- 未勾选的逻辑和你原来的一致,只保留匹配指定物料的行
内容的提问来源于stack exchange,提问作者antechf11
相关产品推荐
相关产品推荐

