Netsuite SSv2如何更新已保存搜索的过滤器

时间:2016-11-23 19:01:02

标签: javascript netsuite

我正在尝试弄清楚如何更新群组保存搜索的过滤器。

我从通用保存的搜索中保存过滤器:

var searchGen = search.load({

            id: 'customsearch_ca_export_detail_search__38'

        });

        var filter = searchGen.filters;

然后我使用循环将过滤器插入搜索:

for (var i = 0; i<selectedMarkets.length; i++){

                var selectedSearchId = marketplaces[selectedMarkets[i]].searchId;

                var searchObj = search.load({id:selectedSearchId});

                var filters = searchObj.filters;

                filters = filter;

                searchObj.save();

            } 

我的所有变量都包含正确的信息。但是将通用保存搜索中的数据推送到我想要更新的搜索不起作用:

filters = filter;

任何帮助?

3 个答案:

答案 0 :(得分:2)

尝试解构过滤器并将其重建为:

for (var i in selectedMarkets){
    var selectedSearchId = marketplaces[selectedMarkets[i]].searchId;
    var searchObj = SEARCHMODULE.load({id:selectedSearchId});
    var oldFilters = searchObj.filters;
    var newFilters = [];

    for (var k in oldFilters) {
        var oldFilter = oldFilters[k];
        var filter = {};
        filter.name = oldFilter.name;
        filter.operator = oldFilter.operator;
        filter.values = oldFilter.values;
        filter.join = oldFilter.join;

        if (typeof(oldFilter.formula) !== 'undefined'){
            filter.formula = oldFilter.formula;
        }

        newFilters.push(SEARCHMODULE.createFilter(filter));
    }

    searchObj.filters = newFilters;
    searchObj.save();
}

注意:您需要调整代码以适用于摘要过滤器。

答案 1 :(得分:0)

超级关闭,尝试:

searchObj.filters = filter;

searchObj.save();

如上所述,您只是将'local'变量filters设置为过滤,而不是实际的搜索对象参数。

这是一个非常可怕的答案,建议极端谨慎,但如果您真的需要在SS2中执行此操作,则可能适用于您的目的。您可以重新创建整个搜索,删除原始,并保存重新创建的搜索:

    var searchObj = search.load({
    id: 'customsearch_test'
});
log.debug('first search', searchObj.filterExpression);

var otherSearch = search.load({
    id: 'customsearch_test_2'
});
log.debug('second search', otherSearch.filterExpression);

var newSearch = search.create({
    type: otherSearch.searchType,
    filters: searchObj.filters, //everything is unchanged but the filters
    columns: otherSearch.columns,
    title: otherSearch.title || "testy test", //apparently the title doesn't come through in search.load()?!?
    id: otherSearch.id,
    isPublic: otherSearch.isPublic
});

search.delete({
    id: 'customsearch_test_2'
});

var id = newSearch.save();

log.debug('result', id);
var otherSearchAgain = search.load({
    id: 'customsearch_test_2'
});
log.debug('second search, after save', otherSearchAgain.filterExpression);

答案 2 :(得分:0)

所以我花了几个星期来回与NetSuite代表进行交流,他们已经确认search.save()存在一个阻止此工作的错误。

他们现在已经提出了一个缺陷。对于其他感兴趣的人来说,仅供参考。