我尝试将此脚本上传到 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,
};
});
我不确定脚本是否完全正常运行,因为它还没有经过测试,但我想让它达到可以上传的程度,以便我可以测试它。
以下行中有一个未终止的字符串:
var body = 'There has been an error in ;
当我尝试按原样上传时,我收到一个不同的错误,所以我不确定这是否是您遇到的问题的原因,但当我更正它时,它上传时没有问题。