代码之家  ›  专栏  ›  技术社区  ›  Superdooperhero

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

  •  0
  • Superdooperhero  · 技术社区  · 7 年前

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

    不幸的是,我并不真正理解如何在动态创建的保存搜索中指定列名。有时,在我看来,列名是来自NetSuite记录浏览器的,而在其他时候,如果我使用来自NetSuite记录浏览器的列名(例如,列未找到),脚本会给出错误信息 currencysymbol )

    我也不知道如何指定出现在子列表中的列或子列表中的子记录。我试着用 item.itemtype 但这给了我一个列找不到错误。只是 item 成功完成,但我不确定这是否真的成功,因为在 JSON (它增加了很多反斜杠)。使用 console.log (出于某种原因,我无法使用NetSuite取回任何东西 log.audit )这也相当困难,尽管看起来它返回的是一个具有5行的数组。所以使用 项目 可能会成功。我这样说是因为我有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 回复  |  直到 7 年前
        1
  •  4
  •   ehcanadian    7 年前

    我建议你有两个铬合金扩展;

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

    对于您正在执行的操作,我将在用户界面中创建保存的搜索,然后使用保存的搜索导出扩展名导出,将其粘贴到代码中(其中 s.create 从那里开始工作。

    第一个扩展可以很好地获得子列表字段ID。在记录浏览器中保存查找。

    推荐文章