NetSuite SuiteScript 2.0 如何在N/search create API中指定字段、子列表字段或子记录字段

NetSuite SuiteScript 2.0 How to specify field, sublist field or subrecord field in N/search create API

我在采购订单记录上有一个按钮,用于对当前记录执行保存的搜索查询,然后使用 http 模块通过 POST 将该数据发送到 url。 url 然后发送回发回的数据作为成功确认的一部分。保存搜索的想法是创建一个 javascript 对象,其中包含我想要从采购订单中获取的所有数据(主记录和带有子记录的项目子列表),然后使用 JSON.stringify 创建一个 JSON http POST 的负载。我无法使用 currentRecord 执行此操作,因为如果您检查它,它只包含内部 ID。这也可以防止我不得不花很多时间编写大量代码来从 currentRecord.

手动构建 JSON 字符串

不幸的是,我不太明白如何在动态创建的已保存搜索中指定列名。有时在我看来列名是来自 NetSuite 记录浏览器的列名,有时如果我使用来自 NetSuite 记录浏览器的列名(例如 currencysymbol),脚本会给出错误(未找到列)。

我也不确定如何指定出现在子列表或子列表中的子记录中的列。我尝试使用 item.itemtype 但这给了我一个未找到列的错误。只是 item 成功完成,但我不确定这是否真的成功,因为在 JSON.stringify 之后很难解码返回的结果(它添加了很多反斜杠)。使用 console.log(出于某种原因,我使用 NetSuite log.audit 没有得到任何结果)也非常困难,尽管它看起来像是返回一个包含 5 行的数组。所以使用 item 可能会成功。我说是因为我有 3 个项目行,它返回 5 个数组行。

所以基本上我想知道在哪里可以找到要在 NetSuite 中用于保存搜索的列的名称;以及如何在保存的搜索中指定子列表列名称和子列表子记录列名称。

/**
 * @NApiVersion 2.0
 * @NScriptType ClientScript
 * @NModuleScope SameAccount
 */
define(['N/ui/dialog', 'N/currentRecord', 'N/record', 'N/url', 'N/http', 'N/search'], function (dialog, rec, record, url, http, s) {

   function pageInit(context) {
      // All client scripts need at least one dummy function.
   }   // pageInit

   function onButtonClick() {

      var currentRecord = rec.get();

      // Create a saved search dynamically.
      var rs = s.create({
         type: s.Type.PURCHASE_ORDER,
         filters: [
            ["mainline", s.Operator.IS, "F"], "and",
            ["internalid", s.Operator.IS, currentRecord.id]
         ],
         columns: [
            "internalid",
            "currency",
            {
                name: "item",
                sort: s.Sort.ASC   // DESC
            }
         ]
      });

      var myPostDataObj = rs.run().getRange(0, 1000);
      console.log(myPostDataObj);
      var headers = {
         'Content-Type': 'application/json; charset=utf-8',
      };
      http.post.promise({
         url: 'http://httpbin.org:80/post',
         body: JSON.stringify(myPostDataObj),
         headers: headers
      })
      .then(function(response){
         console.log('SUCCESS: ' + JSON.stringify(response));
      })
      .catch(function onRejected(reason) {
         console.log('ERROR: ' + JSON.stringify(reason));
      })

   }

   return {
      pageInit: pageInit,
      onButtonClick: onButtonClick
   };

});   // Define

我建议您获得两个 Chrome 扩展;

  1. NetSuite Field Explorer。此扩展程序将向您显示 NetSuite 记录中所有字段的 ID(和值)。
  2. NetSuite Search Export。此扩展程序将 convert/export 将搜索保存到 SuiteScript。

对于您正在做的事情,我会在 UI 中创建您保存的搜索,然后使用保存的搜索导出扩展将其导出,将其粘贴到您的代码中(其中 s.create 是),然后从那里开始工作。

第一个扩展很适合获取子列表字段 ID。在记录浏览器中保存查找。