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

问题描述 投票:0回答:1

我制作了一个计划脚本,该脚本通过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: '[email protected]',
        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
    };
  });
javascript javascript-objects netsuite suitescript2.0
1个回答
0
投票

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

从那里您可以将脚本参数添加到计划脚本中以容纳用户,然后您的计划脚本可以读取该参数并将值添加为模板上的另一个数据源。

© www.soinside.com 2019 - 2024. All rights reserved.