用于项目列表的 Netsuite 搜索过滤器
Netsuite search filter for list of items
我正在尝试在搜索条件中添加过滤器。
我面临的问题是,当我使用 internalid 和 int 1111 时,它工作正常。但是,如果我用字符串替换其他一些列,它就不起作用。它会在客户搜索行中引发错误。
谁能推荐一下?
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;
});
电子邮件字段与 ANYOF 运算符不兼容。尝试以下任一方法:
- 任意
- 是
- 空
- 开始开关
- 包含
- 不是
- 不急躁
- 不开始
- 不包含
如果您需要按多个电子邮件进行过滤,则可以使用表达式添加 "OR"。我建议使用 Chrome 扩展 Netsuite: Search Export 让事情变得更容易。
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']
]
});
您正在使用的 options.filters 可能是:
- 单个 search.Filter 对象
- search.Filter 个对象的数组
- 搜索过滤器表达式
- 一组搜索过滤器表达式
在您的示例中,您创建了 2 个过滤器对象(filterscust1 和 filterscust2)。之后,您 尝试 创建一个搜索过滤器表达式,将两个过滤器对象与 'or' 字符串组合在一起。但这是不正确的:
搜索过滤器表达式是一个包含零个或多个元素的 JavaScript 字符串数组 。每个元素都是以下之一:
- 运算符 - “NOT”、“AND”或“OR”
- 过滤条件
- 嵌套搜索过滤器表达式
所以,等效代码应该是:
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']
]
});
我正在尝试在搜索条件中添加过滤器。
我面临的问题是,当我使用 internalid 和 int 1111 时,它工作正常。但是,如果我用字符串替换其他一些列,它就不起作用。它会在客户搜索行中引发错误。 谁能推荐一下?
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;
});
电子邮件字段与 ANYOF 运算符不兼容。尝试以下任一方法:
- 任意
- 是
- 空
- 开始开关
- 包含
- 不是
- 不急躁
- 不开始
- 不包含
如果您需要按多个电子邮件进行过滤,则可以使用表达式添加 "OR"。我建议使用 Chrome 扩展 Netsuite: Search Export 让事情变得更容易。
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']
]
});
options.filters 可能是:
- 单个 search.Filter 对象
- search.Filter 个对象的数组
- 搜索过滤器表达式
- 一组搜索过滤器表达式
在您的示例中,您创建了 2 个过滤器对象(filterscust1 和 filterscust2)。之后,您 尝试 创建一个搜索过滤器表达式,将两个过滤器对象与 'or' 字符串组合在一起。但这是不正确的:
搜索过滤器表达式是一个包含零个或多个元素的 JavaScript 字符串数组 。每个元素都是以下之一:
- 运算符 - “NOT”、“AND”或“OR”
- 过滤条件
- 嵌套搜索过滤器表达式
所以,等效代码应该是:
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']
]
});