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

I need the text of a transaction field to act as a variable in a NetSuite saved search that is being built via a portlet

我正在我的客户中心环境中添加一个自定义列表 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的客户中心,所以我无法访问客户记录,因为客户中心角色没有访问客户列表的权限。出于同样的原因,我也无法使用 {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"]]

回到 post 我最终使用的另一个解决方案。

我能够通过将脚本部署 "Run As" 角色字段从当前角色更改为 "Administrator" 来解决权限错误。这使我能够简单地从搜索中访问项目 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]]
   ],