javascript - 如何使用 SS 2.0 将计划脚本中的用户名传递给 PDF 模板?

标签 javascript javascript-objects netsuite suitescript2.0

我已经制作了一个预定脚本,它通过 email.send() 发送 PDF 我从 Suitelet 获得了过滤器作为参数。我想获取用户名(来自 runtime.getCurrentUser)并将其传递给我的 PDF。我只是对如何传递它们以及该 API 是否会在 Suitelet 或 Sched 脚本中使用感到困惑。 谁能帮我处理代码?

这是我的预定脚本代码:

/**
 * @NApiVersion 2.x
 * @NScriptType scheduledscript
 */
define(['N/ui/serverWidget', 'N/search', 'N/render', 'N/runtime', 'N/file', 'N/email'],
  function (ui, search, render, runtime, file, email) {

    function execute() {
      try {
        generateReport();
      }
      catch (e) {
        log.error('generateReport ERROR', e);
      }
    }

    function generateReport() {

      var slfilters = runtime.getCurrentScript().getParameter({ name: 'custscript_searchfilter_report' });
      log.debug('slfilters', slfilters);

      if (!!slfilters) {
        slfilters = JSON.parse(slfilters);
      }
      log.debug('slfilters2', slfilters);

      var user = runtime.getCurrentUser();//Need this user to be passed to my xml template

      var gender = slfilters.gender;//getting this from Suitelet
      log.debug('gender', gender);
      var item = slfilters.item;//getting this from Suitelet
      log.debug('item', item);

      var item_ = getItems(item, gender);
      log.debug('getItems(item, gender)', item_);
      //return item;

      var xmlTemplateFile = file.load(3918);
      //var template = script.getParameter({ name: 'custscript_template' });
      var renderer = render.create();
      renderer.templateContent = xmlTemplateFile.getContents();
      var customSources = {
        alias: 'searchdata',
        format: render.DataSource.JSON,
        data: JSON.stringify({
          value: item_,
        })
      };
      renderer.addCustomDataSource(customSources);

      var xml = renderer.renderAsString();
      var pdf = render.xmlToPdf({
        "xmlString": xml
      });

      email.send({
        author: 317,
        recipients: 'aniswtf@gmail.com',
        subject: 'Item Report',
        body: 'Report Generated: ',
        attachments: [pdf]
      });
    }

    //
    // ─── GET RESULTS ───────────────────────────────────────────────────
    //
    const getResults = function (set) {
      var results = [];
      var i = 0;
      while (true) {
        var result = set.getRange({
          "start": i,
          "end": i + 1000
        });
        if (!result) break;
        results = results.concat(result);
        if (result.length < 1000) break;
        i += 1000;
      }
      return results;
    };

    //
    // ─── GET ITEMS ───────────────────────────────────────────────────
    //
    function getItems(item, gender,user) {

      try {
        log.error('getItems Function started');
        var itemSearch = search.load({
          id: 'customsearch_mx_itemsearch'

        });
        var defaultFilters = itemSearch.filters;

        itemSearch.filters.push(
          search.createFilter({
            name: "custitem5",
            operator: 'anyof',
            values: gender
          }),
          search.createFilter({
            name: "internalid",
            operator: 'anyof',
            values: item
          })
        );

        //defaultFilters = arrFilters;
        //defaultFilters = defaultFilters.concat(arrFilters);
        //log.error('Updated Filters', defaultFilters)

        log.error('itemSearch', itemSearch);

        //return defaultFilters;
        var results = itemSearch.run().getRange({
          start: 0,
          end: 150
        });

        var result2 = results.map(function (x) {
          // var results = getResults(itemSearch.run()).map(function (x) {
          return {

            'category': x.getText({
              name: "custitem10",
              join: "parent"
            }),
            'season': x.getValue({
              name: "custitem11",
              join: "parent"
            }),
            'riselabel': x.getText({
              name: "custitem_itemriselabel",
              join: "parent"
            }),
            'fit': x.getText({
              name: "custitem9",
              join: "parent"
            }),
            'name': x.getText({ //sku
              name: "itemid",
              join: "parent"
            }),
            'style': x.getText({
              name: "custitem8",
              join: "parent"
            }),
            'inseam': x.getText({
              name: "custitem7",
              join: "parent"
            }),
            'wash': x.getText({
              name: "custitem_washname",
              join: "parent"
            }),
          };
        });

        log.debug('Results', results.length);
        log.debug('results', results);
        log.debug('result2', result2);

       // return results;//nabeeel's
        return result2;//mine

      } catch (e) {
        log.error('error in getItems', e)
      }

    }
    return {
      execute: execute
    };
  });

最佳答案

预定脚本中没有用户,因此 runtime.getCurrentUser() 不会返回值。您将需要通过 Suitelet 中的该方法检索用户(假设它不是匿名的外部 Suitelet)。

从那里您可以将脚本参数添加到预定脚本以保存用户,然后您的预定脚本可以读取该参数并将值作为另一个数据源添加到您的模板上。

关于javascript - 如何使用 SS 2.0 将计划脚本中的用户名传递给 PDF 模板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58522173/

相关文章:

javascript - "Obect has no method"从回调函数中调用其他函数时

javascript - prototype.constructor 和 object of itself 有什么区别?

javascript - 使用属性名称在 javascript 中查找对象的索引

Javascript - 从数组创建深层对象

netsuite - 查看客户时如何使用 Suitescript 获取当前在 Netsuite 中登录的员工详细信息?

javascript - 如何遍历 node.js 中的一系列 promise ?

javascript - 在 AJAX 调用完成之前如何隐藏页面元素?

web-services - 添加 Netsuite 销售订单项目

javascript - 如何访问另一个数组中的对象数组中的 ID 或名称?

azure - 通过 ADF 将 Netsuite 数据引入 ADLS