编辑-不确定我是否表达得很好,所以想总结一下:

我使用变量作为保存的搜索筛选器的值,但是这些变量不一定总是有值,在这些情况下,我希望忽略该筛选器.

谢谢

多亏了BK Knight的一篇很棒的帖子,我正在使用一个客户端脚本将值从一个Suitlet表单传递到另一个Suitlet

客户端脚本片段:

var output = url.resolveScript({
      scriptId: 'customscript1691',
      deploymentId: 'customdeploy1',
      params : {
                    customscript1691_theItem : itemId, 
                    customscript1691_manufacturer : manufacturer,
                    customscript1691_category : category,
                }

正在接收Suitlet片段

var passedItem = request.parameters.customscript1691_theItem;
var passedManufacturer = request.parameters.customscript1691_manufacturer;
var passedCategory = request.parameters.customscript1691_category;

这一切都运行得很好,我可以在日志(log)中看到值.我遇到的问题是,我需要将这些值用作另一个保存的搜索的筛选器,我正在加载到接收Suitlet上.

无论我try 什么配置的过滤器,它都不起作用.

如果Item字段中没有项目,但我 Select 了制造商,则搜索返回空白,因为它正在查找空白项目.

如何对其进行配置,以便如果通过的字段中没有任何内容,则筛选器为空,并且它只使用中包含内容的筛选器?

下面是我try 过的一些代码:

               search.createFilter({
                    name:'name',
                    operator: search.Operator.ANYOF,
                    values:[checkedpassedItem]
                }),
                search.createFilter({
                    name:'custitem_pro_manf',
                    operator: search.Operator.IS,
                    values:[checkedpassedManufacturer]
                }),
                
                search.createFilter({
                    name:'inventorylocation',
                    operator: search.Operator.IS,
                    values:[14]
                }),

我try 在传递的字段上执行if判断,如果它们为空,则不输入任何内容,但这也不返回任何内容.

任何帮助都不胜感激.

谢谢

推荐答案

首先创建您的搜索,不使用与您传递的参数匹配的过滤器.

var theSearch = search.create({
    type: {searchType},
    columns: [
        {columm1},
        {column2},
        {etc}
    ]
});

然后,根据相应参数中的值或缺少值,有条件地为参数创建过滤器.

var itemFilter;
if (passedItem) {
    itemFilter = search.createFilter({
        name:'name',
        operator: search.Operator.ANYOF,
        values:[checkedpassedItem]
    });
} else {
    itemFilter = search.createFilter({
        name:'name',
        operator: search.Operator.ANY
    });
}

然后将过滤器添加到您的搜索中.

theSearch.filters.push(itemFilter);

您还可以采用另一种方法,仅在存在值时创建和添加过滤器. (使用ANY操作符的过滤器和不使用过滤器的效果应该是相同的,但是您可能使用的搜索在初始搜索定义中包含"默认"过滤器,或者从您的帐户加载现有搜索,在这种情况下,您需要考虑是否在脚本中覆盖它).

if (passedItem) {
    theSearch.filters.push(
        search.createFilter({
            name:'name',
            operator: search.Operator.ANYOF,
            values:[checkedpassedItem]
        })
    );
}

Javascript相关问答推荐

我的glb文件没有加载到我的three.js文件中

确定MutationRecord中removedNodes的索引

如何从Intl.DateTimeFormat中仅获取时区名称?

为什么Mutations 观察器用微任务队列而不是macrotask队列处理?

如何使onPaste事件与可拖动的HTML元素一起工作?

Angular 订阅部分相互依赖并返回数组多个异步Http调用

如何强制Sphinx中的自定义js/css文件始终加载更改而不缓存?

第二次更新文本输入字段后,Reaction崩溃

使用js构造一个html<;ath&>元素并不能使其正确呈现

如何在DYGRAPS中更改鼠标事件和键盘输入

Phaserjs-创建带有层纹理的精灵层以自定义外观

为列表中的项目设置动画

我不知道如何纠正这一点.

不协调嵌入图片

按特定顺序将4个数组组合在一起,按ID分组

设置复选框根据选中状态输入选中值

Chrome上的印度时区名S有问题吗?

计算对象数组中属性的滚动增量

Firebase函数中的FireStore WHERE子句无法执行

为什么我的Reaction组件不能使用createBrowserRouter呈现?