【问题标题】:Suitescript Saved Search Filter using other saved search resultsSuitescript 保存的搜索过滤器使用其他保存的搜索结果
【发布时间】:2021-03-15 22:00:20
【问题描述】:

我正在尝试使用特定已保存搜索的结果来尝试过滤 suitescript 中的另一个已保存搜索。

基本上,在项目上创建了一个按钮。单击按钮后,我需要获取该特定项目的所有任务,并使用每个任务使用自定义字段过滤交易保存的搜索,并获取有关该已保存搜索的任何信息。

这是我目前所拥有的:

function runScript(context) {
    var record = currentRecord.get();
    var id = record.id;
    var type = record.type;
    var i = 0;
    console.log(id);
    var projectSearch = search.load({id: 'customsearch1532'})
    var billableExpenseSearch = search.load({id: 'customsearch1533'})

    var projectFilter = search.createFilter({
        name:'internalId',
        operator: search.Operator.IS,
        values: id
    });
    projectSearch.filters.push(projectFilter);

    var projectResults = projectSearch.run().getRange(0,1000);

    while(i < projectResults.length){
        var task = projectResults[i].getValue(projectSearch.columns[1]);
        console.log(task);
        var billableExpenseFilter = search.createFilter({
            name:'custcol4',
            operator: search.Operator.ANYOF,
            values: task
        });

        billableExpenseSearch.filters.push(billableExpenseFilter);
        var billableExpenseResults = billableExpenseSearch.run().getRange(0,1000);
        console.log(billableExpenseResults.length);

        for(var j = 0; j< billableExpenseResults.length; j++){
            var testAmount = billableExpenseResults[j].getValue(billableExpenseSearch.columns[3]);
            console.log(testAmount);
        }
        i++;

    }
}

任务的日志是正确的。我正在尝试的项目中有 2 个任务,但是一旦我们进行第二次迭代,billableExpenseSearch 长度显示为 0,而它应该是 1。

我猜我的逻辑不正确,createFilter 函数在创建过滤器后不接受更改。 任何帮助表示赞赏!

编辑:

var billableExpenseSearch = search.load({id: 'customsearch1533'});
        var billableExpenseFilter = search.createFilter({       
            name:'custcol4',
            operator: search.Operator.ANYOF,
            values: task
        });
        billableExpenseSearch.filters.push(billableExpenseFilter);
        var billableExpenseResults = billableExpenseSearch.run().getRange(0,1000);
        console.log(billableExpenseResults.length);
        for(var j = 0; j< billableExpenseResults.length; j++){
            var taskid = billableExpenseResults[j].getValue(billableExpenseSearch.columns[0]);
            console.log(taskid);

谢谢

【问题讨论】:

    标签: filter netsuite suitescript suitescript2.0 saved-searches


    【解决方案1】:

    我认为你的猜测是正确的,你一直在推过滤器

        billableExpenseSearch.filters.push(billableExpenseFilter);
    

    在推送过滤器并提取您需要在添加新过滤器之前删除它的值后,您可以通过 pop() 最后一个来做到这一点:

        billableExpenseSearch.filters.pop();
    

    注意:您可以通过在每次推送过滤器之前重新加载搜索来解决此问题。这将重置您的过滤器,但我不建议这样做,因为加载搜索会消耗更多的 USAGE 并且可能会收到 USAGE_LIMIT_EXCEEDED ERROR。

    我还推荐以下内容:

    1- 在进行第二次搜索之前获取所有任务 ID,一旦你这样做了,你只需要搜索一次。因为如果您有很多记录,您可能会遇到 USAGE_LIMIT_EXCEEDED ERROR。由于您使用的是客户端或 Suitelet 脚本,因此您只有 1000 USAGE。

    编辑:示例可能会对您有所帮助。

    var ids = [];
             var pagedData = projectSearch.runPaged({pageSize : 1000});
             // iterate the pages
             for( var i=0; i < pagedData.pageRanges.length; i++ ) {
             // fetch the current page data
                     var currentPage = pagedData.fetch(i);
                     // and forEach() thru all results
                     currentPage.data.forEach( function(result) {
                     // you have the result row. use it like this....
                        var id = result.getValue(projectSearch.columns[1]);
                         Ids.push(id);
                     });
             }
    

    注意:此搜索将提取所有记录,而不仅仅是前 1000 个。

    然后将数组添加到过滤器

    var billableExpenseFilter = search.createFilter({       
                    name:'custcol4',
                    operator: search.Operator.ANYOF,
                    values: [ids]
                });
    

    2- 不要使用 search.load 使用 search.create 它将使您的脚本更具可读性并且将来更易于维护。

    【讨论】:

    • 感谢您的回答!我能够通过为第二部分创建一个函数并调用该函数而不是在另一个函数中进行搜索来绕过。当您说获取所有ID时,您是否将它们存储在数组中?我以前在 Suitescript 中没有这样做过。任何帮助或指导将不胜感激!
    • 我编辑了答案以添加如何将它们存储在一个数组中,希望对您有所帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-20
    • 2018-05-14
    • 1970-01-01
    • 1970-01-01
    • 2012-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多