Netsuite搜索过滤项目列表

时间:2017-07-05 16:52:49

标签: javascript netsuite

我正在尝试在搜索条件中添加过滤器。

我面临的问题是,当我使用internalid和int 1111时,它工作正常。但是如果我用字符串替换其他一些列则不起作用。它会在cust搜索行中抛出错误。 有人可以建议吗?

        var custSearch = search.create({
        type : record.Type.CUSTOMER,
        columns : searchColumn,           
        filters: [
                 'email', 'ANYOF', ["abanks@acera.com","3m@3m.com"]]
                 //'internalid', 'ANYOF', ["1397","1251"]] // Works fine

        });
        custSearch.run().each(function(result) { // throw errors
            log.debug("Found !",result);
            return true;
        });

3 个答案:

答案 0 :(得分:4)

电子邮件字段与ANYOF运算符不兼容。请尝试以下任何一种方法:

  • ANY
  • IS
  • 的isEmpty
  • STARTSWITH
  • 包含
  • 状态并没有
  • ISNOTEMPTY
  • DOESNOTSTARTWITH
  • DOESNOTCONTAIN

如果您需要通过多封电子邮件进行过滤,那么您可以使用表达式添加" OR" s。我建议您使用Chrome扩展程序Netsuite: Search Export来简化操作。

答案 1 :(得分:1)

function stringFieldAnyOf(fieldId, listOfValues) {
  var result = [];
  if (listOfValues.length > 0) {
    for (var i = 0; i < listOfValues.length; i++) {
      result.push([fieldId, 'startswith', listOfValues[i]]);
      result.push('or');
    }
    result.pop(); // remove the last 'or'
  }
  return result;
}

// usage: (two more filters added just to illustrate how to combine with other filters)
var custSearch = search.create({
  type: record.Type.CUSTOMER,
  columns: searchColumn,
  filters: [
    ['companyname', 'startswith', 'A'], 'and',
    stringFieldAnyOf('email', ['abanks@acera.com', '3m@3m.com']), 'and', 
    ['companyname', 'contains', 'b']
  ]

});

答案 2 :(得分:1)

您正在使用的

options.filters 可以是:

  • 单个search.Filter对象
  • search.Filter对象
  • 的数组
  • 搜索过滤器表达式
  • 一系列搜索过滤器表达式

在您的示例中,您创建了2个过滤器对象(filterscust1和filterscust2)。之后,您尝试创建一个搜索过滤器表达式,将两个过滤器对象与'或'字符串组合在一起。但这不正确:

搜索过滤器表达式是零<或多个元素的JavaScript 字符串数组。每个元素都是以下之一:

  • 操作员 - “不”,“和”或“或”
  • 过滤条件
  • 嵌套搜索过滤器表达式

因此,等效代码应为:

filterscust1 = ['email', 'contains', '3m@3m.com'];

filterscust2 = ['email', 'contains', 'abanks@acera.com'];

var filtersExp = [ filterscust1, 'or', filterscust2 ];

var custSearch = search.create({
  type: record.Type.CUSTOMER,
  columns: searchColumn,
  filters: [filtersExp]

});

或直接:

var custSearch = search.create({
  type: record.Type.CUSTOMER,
  columns: searchColumn,
  filters: [ ['email', 'contains', '3m@3m.com'], 'or', 
             ['email', 'contains', 'abanks@acera.com']
           ]

});