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

SuiteScript已保存搜索筛选:勾选复选框显示含指定项的发票全条目

解决SuiteScript已保存搜索的发票筛选逻辑问题

你的问题核心是:勾选复选框时,要返回包含指定物料的整张发票的所有条目,而非仅该物料的条目;未勾选时只返回发票中匹配指定物料的条目。原代码的问题在于,勾选时的筛选逻辑完全错误,["item", "anyof", "item"]是无效写法,既没关联到指定物料,也没实现“找整张发票”的逻辑。

正确实现思路

当复选框为true时,需要分两步:

  1. 先通过子搜索找出所有包含指定物料的发票内部ID
  2. 主搜索筛选出这些发票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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 10:23:14