search - 过滤器上的运算符 'and' & 'or' SuiteScript 2.0 (NetSuite)
问题描述
我需要在搜索中对过滤器设置条件。我浏览了很多论坛,但没有找到实用的解决方案。经过多次不确定的测试,我来向您寻求帮助。我的代码:
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;
}
以下是在我的搜索的“过滤器”参数上尝试的所有语法:
subsidiaryIdFilter, 'and', [addressFilter, 'or', zipFilter]
[subsidiaryIdFilter, 'and', [addressFilter, 'or', zipFilter]]
subsidiaryIdFilter, 'and', (addressFilter, 'or', zipFilter)
subsidiaryIdFilter && (addressFilter, 'or', zipFilter)
subsidiaryIdFilter && (addressFilter || zipFilter)
我当然在 SuiteScript 文档中进行了搜索,但没有提到这个主题。谢谢您的帮助。
解决方案
感谢插件(https://chrome.google.com/webstore/detail/netsuite-search-export/gglbgdfbkaelbjpjkiepdmfaihdokglp),我找到了在我的过滤器之间放置 AND 和 OR 的语法:
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]
]
});
推荐阅读
- python - Pandas-创建差异矩阵的数量
- angular - Angular Service:加载 Apple 脚本后未定义 AppleID
- python - 如何访问MongoDB中集合下的文档?
- javascript - 使用 Yargs 进行 Fs 操作
- c# - 如何在 XmlDocument 中的所有 XmlElements 中强制使用前缀?
- javascript - 为什么 myObj[`${this.isTrueOrFalse?'a' : 'b'}`] 给未定义?
- flutter - 如何添加我购物车中所有商品的总数而不是商品*数量,还添加运费和折扣以使其总计?
- swiftui - 全屏日期选择器
- python - 如何获取或初始化我想要的变量?
- c++ - 终止调用递归 C++ 多线程