search - 过滤器 SuiteScript 2.0 (NetSuite) 上的运算符 'and' 和 'or'

标签 search filter netsuite suitescript suitescript2.0

我需要在搜索中为过滤器设置条件。我浏览了很多论坛,但没有找到功能性的解决方案。经过多次不确定的测试后,我向您寻求帮助。 我的代码:

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]
        ]
    ]

});

关于search - 过滤器 SuiteScript 2.0 (NetSuite) 上的运算符 'and' 和 'or',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64386555/

相关文章:

mongodb - InvalidPipelineOperator用于使用golang在mongodb中进行聚合和过滤

mapreduce - Suitescript 2.0 MapReduce 脚本

NetSuite SS2.0 - 创建一个选中 "addtimestamptourl"的文件

netsuite - 如何在 Suitescript 中访问/公开库存项目位置子列表字段

java - solr 按范围搜索( double )

dictionary - Clojure - 在最内层过滤嵌套映射

Java GUI 搜索目录文件

eclipse - 如何用Java创建Eclipse文件夹资源过滤器

java - Lucene 搜索查询中的嵌套禁止/要求运算符

Python:使用模块或正则表达式从列表中提取列表