预定脚本错误:SuiteScript 2.x 入口点脚本必须实现一种脚本类型函数

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

我尝试将此脚本上传到 NetSuite 以开始测试它,但它给出了此错误:SuiteScript 2.x 入口点脚本必须实现一个脚本类型函数。这是一个预定的脚本,因此它应该具有的唯一入口点是执行函数。是否存在我没有看到的语法错误,或者有人有解决方案吗?对于预定的脚本,我还没有找到任何解决方案。这是脚本:

/**
 * This script looks for originals sold, and marks the parent, child, 
 * and kit as sold out when the sales order is approved, 
 * and inactivates the parent, child, and kit when fulfilled.
 * 
 * @NApiVersion 2.x
 * @NScriptType ScheduledScript 
 * @NModuleScope SameAccount 
 */

define(['N/search', 'N/record', 'N/log'], function (search, record, log) {

  function createSoldOriginalSearch() {
    return search.create({
      type: "salesorder",
      filters: [
        ["type", "anyof", "SalesOrd"],
        "AND",
        ["item.custitemitemoriginal", "is", "T"],
        "AND",
        ["item.isinactive", "is", "F"],
        "AND",
        ["datecreated", "within", "lastmonth"]
      ],
      columns: [
        "statusref",
        "shiprecvstatusline",
        search.createColumn({
          name: "type",
          join: "item"
        }),
        search.createColumn({
          name: "formulatext",
          formula: "CASE WHEN {item.type}='Kit/Package' THEN SUBSTR({item.memberitem}, 0, 6) ELSE SUBSTR({item}, 0, 6) END"
        }),
        "internalid"
      ]
    });
  }

  function getAllResults(searchObj) {
    var start = 0;
    var allResults = [];
    var results = [];
    var resultSet = searchObj.run();

    results = resultSet.getRange({
      start: start,
      end: start + 1000
    });
    allResults = allResults.concat(results);

    while (results.length) {
      start += 1000;
      results = resultSet.getRange({
        start: start,
        end: start + 1000
      });
      allResults = allResults.concat(results);
    }

    return allResults;
  }

  function getOrderInfo(results, index) {
    var orderInfo = {};

    orderInfo.id = results[index].id;
    orderInfo.SOInternalId = results[index].getValue('internalid');
    orderInfo.masterItemNum = results[index].getValue('formulatext');
    orderInfo.SOStatus = results[index].getText('statusref');
    orderInfo.itemFulfillStatus = results[index].getText('shiprecvstatusline');

    return orderInfo;
  }

  function getItemIds(orderInfo) {
    var searchFilter = search.createFilter({
      name: 'itemid',
      operator: search.Operator.CONTAINS,
      values: orderInfo.masterItemNum
    });

    var inventorySearch = search.create({
      type: search.Type.ITEM,
      filters: [searchFilter],
      columns: ['internalid']
    });

    var itemSearchResults = inventorySearch.run().getRange({
      start: 0,
      end: 1000 // Change this value to retrieve more or fewer results.
    });

    return itemSearchResults;
  }

  function markAsSoldOut(orderInfo, itemId) {
    var itemRecord = record.load({
      type: record.Type.SERIALIZED_INVENTORY_ITEM, 
      id: itemId,
    });

    if (orderInfo.SOStatus !== 'Pending Approval' && orderInfo.SOStatus !== 'Closed' && orderInfo.SOStatus !== 'Cancelled') {
      itemRecord.setValue({
        fieldId: 'custitemsold_out',
        value: true,
      });
    }
    var saveSoldOut = record.save();
    return saveSoldOut;
  }

  function inactivateItems(orderInfo, itemId) {
    var itemRecord = record.load({
      type: record.Type.SERIALIZED_INVENTORY_ITEM, // Assuming you want to inactivate the item record
      id: itemId,
    });

    if (orderInfo.itemFulfillStatus == 'true') {
      itemRecord.setValue({
        fieldId: 'isinactive',
        value: true,
      });
    }

    var saveInactivate = record.save();
    return saveInactivate;
  }

  function execute(context) {
    try {
      var soldOriginalSearch = createSoldOriginalSearch();
      var results = getAllResults(soldOriginalSearch);
      log.debug('initial results', results);

      for (var i = 0; i < results.length; i++) {
        var orderInfo = getOrderInfo(results, i);
        log.debug('orderinfo', orderInfo);

        var itemResults = getItemIds(orderInfo);

        if (itemResults && itemResults.length > 0) {
          for (var j = 0; j < itemResults.length; j++) {
            var itemId = itemResults[j].getValue('internalid');

            var saveSoldOut = markAsSoldOut(orderInfo, itemId);
           var saveInactivate = inactivateItems(orderInfo, itemId);
          }
        }
      }
    } catch (e) {
        var subject = 'General Error ';
        var body = 'There has been an error in ;
        var recipients = ['example@example'];

        email.send({
            author: 349571,
            recipients: recipients,
            subject: subject,
            body: body
        });
    }
  }
  return {
    execute: execute,
  };
});

我不确定脚本是否完全正常运行,因为它还没有经过测试,但我想让它达到可以上传的程度,以便我可以测试它。

netsuite suitescript
1个回答
0
投票

以下行中有一个未终止的字符串:

var body = 'There has been an error in ;

当我尝试按原样上传时,我收到一个不同的错误,所以我不确定这是否是您遇到的问题的原因,但当我更正它时,它上传时没有问题。

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