Search 操作员';和'&';或';关于过滤器SuiteScript 2.0(NetSuite)
我需要在搜索中对过滤器设置条件。我浏览了很多论坛,但没有找到实用的解决方案。经过许多不确定的测试,我来找你寻求帮助。 我的代码:Search 操作员';和'&';或';关于过滤器SuiteScript 2.0(NetSuite),search,filter,netsuite,suitescript,suitescript2.0,Search,Filter,Netsuite,Suitescript,Suitescript2.0,我需要在搜索中对过滤器设置条件。我浏览了很多论坛,但没有找到实用的解决方案。经过许多不确定的测试,我来找你寻求帮助。 我的代码: function retrieveVendor(vendorValues){ var subsidiaryIdFilter = SEARCHMODULE.createFilter({ name: 'internalid', join: 'subsidiary', operator: SE
function retrieveVendor(vendorValues){
var subsidiaryIdFilter = SEARCHMODULE.createFilter({
name: 'internalid',
join: 'subsidiary',
operator: SEARCHMODULE.Operator.ANYOF,
values: vendorValues.companyCode
});
var addressFilter = SEARCHMODULE.createFilter({
name: 'address',
join: 'vendor',
operator: SEARCHMODULE.Operator.CONTAINS,
values: vendorValues.street
});
var cityFilter = SEARCHMODULE.createFilter({
name: 'city',
join: 'vendor',
operator: SEARCHMODULE.Operator.CONTAINS,
values: vendorValues.city
});
var zipFilter = SEARCHMODULE.createFilter({
name: 'zipcode',
join: 'vendor',
operator: SEARCHMODULE.Operator.CONTAINS,
values: vendorValues.postalCode
});
var vendorIdTest = SEARCHMODULE.create({
type: SEARCHMODULE.Type.VENDOR_SUBSIDIARY_RELATIONSHIP,
columns: [
SEARCHMODULE.createColumn({name:'entityid', join: 'vendor'}),
SEARCHMODULE.createColumn({name:'internalid', join: 'subsidiary'}),
SEARCHMODULE.createColumn({name:'address', join: 'vendor'})
],
filters: [
subsidiaryIdFilter, 'and', [addressFilter, 'or', zipFilter]
]
});
var nbOfResults = vendorIdTest.runPaged().count;
var resultArray = [];
var aa = vendorIdTest.run().each(function(result){
var obj ={};
obj['vendorName'] = result.getValue({
name: 'entityid',
join: 'vendor'
});
obj['idOfSubsidiary'] = result.getValue({
name: 'internalid',
join: 'subsidiary'
});
obj['vendorAddress'] = result.getValue({
name: 'address',
join: 'vendor'
});
resultArray.push(obj);
return true;
});
var result = nbOfResults + ' : ' + JSON.stringify(resultArray);
return result;
}
以下是我在搜索的“filters”参数上尝试的所有语法:
subsidiaryIdFilter, 'and', [addressFilter, 'or', zipFilter]
[subsidiaryIdFilter, 'and', [addressFilter, 'or', zipFilter]]
subsidiaryIdFilter, 'and', (addressFilter, 'or', zipFilter)
subsidiaryIdFilter && (addressFilter, 'or', zipFilter)
subsidiaryIdFilter && (addressFilter || zipFilter)
当然,我已经在SuiteScript文档中搜索过了,但是没有提到这个主题。谢谢你的帮助。那样真的不行。使用search.createFilter创建的筛选器都隐式地与一起 您需要的是具有不同语法的筛选器表达式。不能混合使用筛选器和筛选器表达式,因此:
var vendorIdTest = SEARCHMODULE.create({
type: SEARCHMODULE.Type.VENDOR_SUBSIDIARY_RELATIONSHIP,
columns: [
SEARCHMODULE.createColumn({name:'entityid', join: 'vendor'}),
SEARCHMODULE.createColumn({name:'internalid', join: 'subsidiary'}),
SEARCHMODULE.createColumn({name:'address', join: 'vendor'})
],
filters: [
['subsidiary', 'anyof', vendorValues.companyCode], 'AND',
[
[
['vendor.address', 'contains', vendorValues.street ], 'AND',
['vendor.city', 'is', vendorValues.city] // i'm guessing you meant to include this
], 'OR',
['vendor.zipcode', 'contains', vendorValues.postalCode]
]
]
});
多亏了这个插件(),我找到了在带有连接的过滤器之间放置和或的语法:
var subsidiaryIdFilter = ["subsidiary.internalid", "anyof", vendorValues.companyCode];
var addressFilter = ["vendor.addresslabel", "contains", vendorValues.street];
var cityFilter = ["vendor.city", "contains", vendorValues.city];
var vendorNameFilter = ["vendor.entityid", "contains", vendorValues.name];
var zipFilter = ["vendor.zipcode", "contains", vendorValues.postalCode];
var addressSearch = SEARCHMODULE.create({
type: SEARCHMODULE.Type.VENDOR_SUBSIDIARY_RELATIONSHIP,
columns: [
SEARCHMODULE.createColumn({name:'entityid', join: 'vendor', sort : SEARCHMODULE.Sort.ASC})
],
filters: [
subsidiaryIdFilter, "AND", [zipFilter, "OR", cityFilter, "OR", addressFilter]
]
});
可以使用浏览器插件将NetSuite保存的搜索显示为脚本。查看语法和编写代码以匹配现有搜索都有帮助。对于Chrome,它是:NetSuite:Search Export,提供者:David Smith非常感谢Brian,感谢插件我能够找到正确的语法