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

时间:2019-01-23 23:55:40

标签: netsuite suitescript2.0

我在“采购订单”记录上有一个按钮,该按钮对当前记录执行已保存的搜索查询,然后使用http模块通过POST将数据发送到url。然后,该URL发送回发的数据作为成功确认的一部分。保存的搜索的想法是创建一个javascript对象,该对象包含我想要的来自采购订单的所有数据(主记录和带有子记录的项目子列表),然后使用JSON.stringify为http创建JSON负载开机自检我无法使用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

1 个答案:

答案 0 :(得分:4)

我建议您使用两个Chrome扩展程序;

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

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

第一个扩展名很容易获得子列表字段ID。在记录浏览器中保存查找。