从Suitescript 2.0中的Suitelet表单脚本运行预定脚本时出错?

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

我是套件脚本的新手。我制作了一个带有3个字段的Suitelet Form脚本,它将作为计划脚本的过滤器。从我保存的搜索中过滤出西装的3个值之后,将PDF文件发送到特定电子邮件中的计划脚本。当我点击Suitelet表单上的按钮时,输入字段后,计划的脚本将继续处理1小时,然后失败。我认为我在计划脚本中加载已保存的搜索时放置了错误的过滤器。保存的搜索(customsearch_mx_itemsearch)没有任何过滤器或条件。如果有人知道,请帮助。谢谢

我的Suitelet表单脚本:

define(['N/ui/serverWidget', 'N/search', 'N/render', 'N/runtime', 'N/file', 'N/task'],
  function (ui, search, render, runtime, file, task) {
    /**
     * main function for suitelet
     * @param {object} ctx
     */

    function onRequest(ctx) {

      var req = ctx.request;
      var res = ctx.response;
      var param = req.parameters;
      /**
       * create form is creating the UI for report generation
       */
      if (req.method === 'GET') {
        // createForm(req, res, param);
        createForm(req, res, param);
      } else {
        generateReport(req, res, param);
      }
    }

    // R E Q U E S T
    function createForm(req, res, param) {

      if (req.method === 'GET') {
        var form = ui.createForm({
          title: 'Generate Item Report'
        });

        var item = form.addField({
          id: 'custpage_selectitem',
          type: ui.FieldType.SELECT,
          label: 'Select Item',
          source: 'item'
        });
        item.isMandatory = true;

        var gender = form.addField({
          id: 'custpage_selectgender',
          type: ui.FieldType.SELECT,
          label: 'Select Gender',
          source: 'customrecord6'
        });
        gender.isMandatory = true;

        var fromDate = form.addField({
          id: 'custpage_selectdate',
          // type: ui.FieldType.DATETIME,
          type: ui.FieldType.DATE,
          label: 'Select Date/Time',
        });


        form.addSubmitButton({
          label: 'Generate Report'
        });

        res.writePage(form);
      }
    }

    // R E S P O N C E
    function generateReport(req, res, param) {
      var param = req.parameters;
      log.debug('parameters', param);
      var script = runtime.getCurrentScript();

      var filters = {
        'isgender': param.custpage_selectgender,
        'isItem': param.custpage_selectitem,
        'fromDate': param.custpage_selectdate
      };

      log.debug('filters', filters);

      var scriptTask = task.create({ taskType: task.TaskType.SCHEDULED_SCRIPT });
      // scriptTask.scriptId = 3920;
      scriptTask.scriptId = 'customscript_mx_itemreport_ss';
      scriptTask.deploymentId = 'customdeploy_mx_itemreport_ss';
      scriptTask.params = {
        custscript_searchfilter_report: JSON.stringify(filters)
      };
      log.debug('workingtillhere');
      var scriptTaskId = scriptTask.submit();
      res.write("Your report is being generated. It will be emailed to you shortly.")

    }

    return {
      onRequest: onRequest
    };
  });

我的预定脚本:

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(req, res, param) {

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

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

      var getUser = runtime.getCurrentUser();

      var gender = slfilters.isgender
      log.debug('gender', gender)
      var item = slfilters.isItem
      log.debug('item', item)

      var item = getItems(item, gender);
      log.debug('items table', 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) {

      try {
        var itemSearch = search.load({
          id: 'customsearch_mx_itemsearch'
        });

        var defaultFilters = itemSearch.filters;
        var arrFilters = [];

        arrFilters.push(search.createFilter({
          name: 'custitem5',//gender
          operator: 'anyof',
          values: [gender]
        }));
        arrFilters.push(search.createFilter({
          name: 'internalid',
          operator: 'anyof',
          values: [item]
        }));

        //defaultFilters.push(arrFilters)
        defaultFilters = defaultFilters.concat(arrFilters);

        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.getValue({
              name: "custitem_itemriselabel",
              join: "parent"
            }),
            'fit': x.getValue({
              name: "custitem9",
              join: "parent"
            }),
            'name': x.getValue({ //sku
              name: "itemid",
              join: "parent"
            }),
            'style': x.getValue({
              name: "custitem8",
              join: "parent"
            }),
            'inseam': x.getValue({
              name: "custitem7",
              join: "parent"
            }),
            'wash': x.getValue({
              name: "custitem_washname",
              join: "parent"
            }),
          };
        });
        return results;

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

    }
    return {
      execute: execute
    };
  });
javascript netsuite suitescript suitescript2.0
1个回答
0
投票
© www.soinside.com 2019 - 2024. All rights reserved.