javascript - 我需要交易字段的文本作为通过 portlet 构建的 NetSuite 保存搜索中的变量

标签 javascript arrays variables netsuite suitescript2.0

我正在我的客户中心环境中添加一个自定义列表 portlet,它使用一个自定义字段,该字段包含一个值,该值表示客户已购买的所有项目的内部 ID。该值将用作保存的搜索中的过滤器,其数据将填充列表 portlet。

该字段的文本看起来像“123”、“456”等。

我可以通过我的调试器成功检索字段文本,但是当我将字段的值作为变量传递给我的过滤器时,它会产生一条错误消息:

Filter expecting numeric value was removed, as non-numeric value ... was provided.

使用 NetSuite 搜索导出重新创建我正在寻找的非动态生成以下代码:

var customrecord_vcc_documentsSearchObj = search.create({
   type: "customrecord_vcc_documents",
   filters:
   [
     [["custrecord_vcc_customer_docs","anyof","@CURRENT@"],"AND",["custrecord_vcc_doc_type","noneof","1"]],
      "OR", 
      ["custrecord_vcc_doc_type","anyof","5"],
      "OR", 
      [["custrecord_vcc_doc_type","anyof","2","3","4","6","7"],"AND",["custrecord_vcc_doc_item","anyof","2291","3546","2279","1976"]]
   ],
   columns:
   [
      search.createColumn({
         name: "name",
         sort: search.Sort.ASC,
         label: "Name"
      }),
      search.createColumn({name: "custrecord_vcc_doc_type", label: "Type"}),
      search.createColumn({
         name: "formulatext",
         formula: "'<a href='||{custrecord_vcc_link_to_file}||'>Open</a>'",
         label: "Link"
      })
   ]
});

当我尝试替换时:

["custrecord_vcc_doc_item","anyof","2291","3546","2279","1976"]

为了替换固定 ID,我使用了以下代码:


var transactionSearchObj = search.create({
   type: "transaction",
   filters:
   [
      ["name","anyof","@CURRENT@"]
   ],
   columns:
   [
      search.createColumn({
         name: "custbody_vcc_item_array_fixed",
         summary: "MAX",
         label: "Item Array Fixed"
      })
   ]
});

var itemarray=[];

transactionSearchObj.run().each(function(result){
    var itemarray1 = result.getValue({
        name: "custbody_vcc_item_array_fixed",
        summary: search.Summary.MAX
    });
    itemarray.push(itemarray1);
    log.debug({
        title: "Items",
        details: itemarray1
    });
    //return true;
});

var itemarraytext = itemarray.toString();

log.debug({
    title: "Item Array String",
    details: itemarraytext
});

log.debug({
    title: "Item Array ",
    details: itemarray
});

并在固定 ID 的位置输入 itemarraytext。每个调试器的 itemarraytext 值是:

"2191","2046","1209","1209","1988","2092","295","1214","1988",...

但错误消息仍然存在并且未应用过滤器。

这是在 NetSuite 的客户中心运行的,所以我无法访问客户记录,因为客户中心 Angular 色没有访问客户列表的权限。出于同样的原因,我也无法使用 {item.internalid} 通过保存的搜索直接访问项目内部 ID:许可。

变通方法是设置一个静态字段的动态字段,我正在通过交易搜索对其进行搜索,静态字段文本应该是过滤器的文本。

理想情况下,变量 itemarraytext 将通过并根据每个客户的购买历史过滤我正在搜索的可用文档。

最佳答案

如果我没理解错的话,你正在构建一个由逗号分隔的项目组成的字符串数组:

[
    '"2191","2046","1209"',
    '"1209","1988","2092"',
    '"295","1214","1988"'
]

然后调用toString方法创建:

'"2191","2046","1209","1209","1988","2092","295","1214","1988"'

并将该字符串传递给您的搜索过滤器:

["custrecord_vcc_doc_item","anyof",'"2191","2046","1209","1209","1988","2092","295","1214","1988"']

过滤器无法识别 '"2191","2046","1209","1209","1988","2092","295","1214","1988"' 作为一个数字。

相反,您需要替换双引号并在逗号处拆分 itemarraytext 变量:

["custrecord_vcc_doc_item","anyof",itemarraytext.replace(/"/g,'').split(',')];

这应该相当于:

["custrecord_vcc_doc_item","anyof",["2191","2046","1209","1209","1988","2092","295","1214","1988"]]

关于javascript - 我需要交易字段的文本作为通过 portlet 构建的 NetSuite 保存搜索中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56675492/

相关文章:

c++ - 找不到无限循环发生的地方

bash - osascript使用带空格的bash变量

javascript - Phonegap & Javascript -- Div 的动态调整大小

javascript settimeout 在递归函数中不起作用

PHP数组mysql检索每条记录

java - 我收到错误 : posible loss of of precision and i have tried to change it but I can fix it, 请帮助我

variables - 如何在NetLogo中本地一次设置一只海龟的概率等变量

javascript - AngularJS fullCalendar 方法 GetDate

javascript - 用node.js创建自己的mvc结构,表达并使用restful api

java - 如何使用方法从数组中返回随机字符串?