繁体   English   中英

从 Suitescript 2.0 中的套件表单脚本运行计划脚本时出错?

[英]Error in running scheduled script from suitelet form script in Suitescript 2.0?

我是套件脚本的新手。 我制作了一个包含 3 个字段的 Suitelet 表单脚本,这些字段将作为预定脚本的过滤器。 从我保存的搜索中过滤了 suit let 脚本的 3 个值后,将 PDF 文件发送到某个 email 的预定脚本。 当我点击套件表单上的按钮时,输入字段后,预定的脚本会继续处理 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: '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) {

      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
    };
  });

您已经为generateReport()定义了reqresparam arguments ,但是当您在execute()中调用generateReport()时,实际上并没有填充它们。 您将需要为这些参数传递值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM