Как передать имя пользователя в расписании сценария в шаблон PDF с использованием SS 2.0? - PullRequest
1 голос
/ 23 октября 2019

Я сделал запланированный скрипт, который отправляет PDF, хотя email.send() Я получил фильтры в виде параметров из 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
    };
  });

1 Ответ

2 голосов
/ 23 октября 2019

В запланированном сценарии нет пользователя, поэтому runtime.getCurrentUser() не вернет значение. Вам нужно будет извлечь пользователя с помощью этого метода в Suitelet (при условии, что он не является анонимным внешним Suitelet).

Оттуда вы можете добавить параметр Script в Scheduled Script для хранения пользователя, а затем вашЗапланированный сценарий может прочитать параметр и добавить значение в качестве другого источника данных в шаблон.

...