Javascript 我需要事务字段的文本作为通过portlet构建的NetSuite保存的搜索中的变量

Javascript 我需要事务字段的文本作为通过portlet构建的NetSuite保存的搜索中的变量,javascript,arrays,variables,netsuite,suitescript2.0,Javascript,Arrays,Variables,Netsuite,Suitescript2.0,我正在我的客户中心环境中添加一个自定义列表portlet,它使用一个自定义字段,该字段包含一个值,该值表示客户购买的所有项目的内部ID。此值将用作已保存搜索中的过滤器,该搜索的数据将填充列表portlet 字段的文本看起来像“123”、“456”等 我可以通过我的调试器成功检索字段文本,但当我将字段值作为变量传递给过滤器时,它会生成一条错误消息: Filter expecting numeric value was removed, as non-numeric value ... was pr

我正在我的客户中心环境中添加一个自定义列表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"
      })
   ]
});

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,我使用了以下代码:

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"
      })
   ]
});

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的客户中心运行的,因此我无法访问客户记录,因为客户中心角色无权访问客户列表。我也无法通过使用{item.internalid}保存的搜索直接访问项目内部ID,原因与re:permission相同

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


理想情况下,变量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"]]

循环返回以发布我最终使用的不同解决方案

通过将脚本部署“运行方式”角色字段从当前角色更改为“管理员”,我能够解决许可错误。这使我能够从搜索中简单地访问条目ID,并将它们作为数组传递给另一个过滤器

最后的代码是:

var transactionSearchObj = search.create({
   type: "transaction",
   filters:
   [
      ["name","anyof","@CURRENT@"], 
      "AND", 
      ["item.type","anyof","InvtPart"]
   ],
   columns:
   [
      search.createColumn({
         name: "item",
         sort: search.Sort.ASC,
          summary: "GROUP",
         label: "Item"
      })
   ]
});




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





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







 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",itemarray]]
   ],

我无法获取项目ID数组,因为客户中心角色无法访问项目记录。结果是一个许可错误。我提出的解决方法是将ID存储在一个字段中,尝试重新创建NetSuite搜索导出扩展输出的文本输入,然后将其推送到数组中,并通过.toString()方法尝试重新创建文本输入。当我仅使用数组变量itemarray运行脚本时,我得到了相同的错误:错误搜索筛选器已删除预期数值的筛选器已删除,与非数值“2191”、“2046”相同“,…非常感谢,它像一个符咒。它仍然会产生一些错误,但最终的结果正是我想要做的!这最终在以后的测试中不起作用,但我最终找到了一个更简单的解决方案,就在眼前。我无法通过搜索将项目ID作为常规数组访问的原因是权限问题,因此我将脚本部署更改为作为管理员角色而不是“当前角色”运行。这允许我访问所需的项目ID,并将其作为数组传递。