首页 > 解决方案 > SuiteScript 2.0 search.createFilter 公式不起作用

问题描述

我正在尝试根据给定的电子邮件和手机过滤客户。这些客户必须在两者上都匹配。我的搜索是

function getCustomerByCriteria(data)
{
    var search = data.modules.search;
    var filters = data.filters;

    var crit = search.create({
        type: search.Type.CUSTOMER,
        filters:filters
    });

    /*var crit = search.load({
        id: 'customsearch1112'
    });*/
    log.debug({
        title: "Data Criteria",
        details: JSON.stringify(crit)
    });

    var results = crit.run().getRange({
        start : 0,
        end : 1000
    });

    return results;
}

var customerList = customerService.getCustomerByCriteria({
        filters : [
            search.createFilter({
                name : 'email',
                operator : search.Operator.IS,
                values : email,
                isor: false
            }),
            search.createFilter({
                name : 'formulanumeric',
                operator : search.Operator.IS,
                values : [1],
                formula : "CASE WHEN {mobilephone} ='"+mobile+"' THEN 1 ELSE 0 END",
            })
        ],
        modules : {
            search : search
        }
    });

它目前过滤给所有具有给定电子邮件地址的客户,但不根据手机进行过滤。我不明白为什么第一个过滤器上的 isor 是错误的,所以这应该是一组过滤器。

标签: suitescript2.0

解决方案


作为formulanumeric搜索过滤器,您的搜索运算符应该是equalto(search.Operator.EQUALTO),因为您的返回值将是数字,而您可以将formulatext搜索过滤器与is(search.Operator.IS) 一起使用。

如需进一步阅读,请查看NetSuite 的 Search Operator


推荐阅读