netsuite - Netsuite 计划脚本产生无法复制的意外错误
问题描述
我有一个 Scheduled SuiteScript 2.0,它使用保存的搜索来获取未付款或部分付款的发票列表。该脚本遍历每张发票并查看交易行。首先,我检查交易行是否与订阅相关联,因为某些交易行可能用于其他内容。如果我找到一个订阅 ID,我的想法是加载它并对该订阅执行其他操作,因为它处于未付费状态。问题是当计划的脚本运行时,它在尝试加载订阅记录的行上失败。这是代码片段,然后是我收到的错误:
/**
* @NApiVersion 2.x
* @NScriptType ScheduledScript
* @NAmdConfig /SuiteScripts/nsRequireConfig.json
*/
define(["require", "exports", "N/search", "N/record", "revlocal/utils/datefunctions", "N/log"], function (require, exports, search, record, dateUtils, log) {
Object.defineProperty(exports, "__esModule", { value: true });
exports.execute = function (context) {
if (context.type !== context.InvocationType.SCHEDULED) {
return;
}
var s = search.load({ id: "customsearch_openinvoices" });
var results = s.run().getRange(0, 1000);
for (var _i = 0, results_1 = results; _i < results_1.length; _i++) {
var r = results_1[_i];
var invoiceId = parseInt(r.getValue({ name: "internalid", summary: search.Summary.GROUP }), 10);
var dueDate = new Date(r.getValue({ name: "duedate", summary: search.Summary.GROUP }));
var invoice = record.load({ type: record.Type.INVOICE, id: invoiceId });
var count = invoice.getLineCount({ sublistId: "item" });
for (var i = 0; i < count; i++) {
try {
var linePaid = invoice.getSublistValue({ sublistId: "item", line: i, fieldId: "custcol_rl_paiddate" });
if (!linePaid) {
var subId = parseInt(invoice.getSublistValue({
sublistId: "item", line: i, fieldId: "subscription"
}), 10);
var sub = record.load({ type: record.Type.SUBSCRIPTION, id: subId });
// more code here that doesn't have anything to do with the problem
}
}
catch (error) {
log.error("Suspension on invoice failed: " + invoiceId, error);
continue;
}
}
}
};
});
这是错误:
{"type":"error.SuiteScriptError","name":"UNEXPECTED_ERROR","message":"发生了意外的 SuiteScript 错误","stack":["loadRecord_impl(N/recordImpl)","(/SuiteScripts /revlocal/scheduled/setBillingSuspension.js:27)"],"cause":{"type":"internal error","code":"UNEXPECTED_ERROR","details":"发生了意外的 SuiteScript 错误"," userEvent":null,"stackTrace":["loadRecord_impl(N/recordImpl)","(/SuiteScripts/revlocal/scheduled/setBillingSuspension.js:27)"],"notifyOff":false},"id":"jwjlma0g1g7jovptug37j ","notifyOff":false,"userFacing":false}
我已经调试了脚本并加载了失败的订阅记录,所以我无法复制错误,除非计划的脚本运行。我已经与 Netsuite 支持人员进行了交谈,他们不知道出了什么问题,这并不让我感到惊讶。我希望有人有类似的经历,可以帮助我。
解决方案
所以事实证明这是一个事件触发脚本干扰了预定的脚本。根据对 beforeLoad 触发器中的记录所做的操作,可能会导致计划脚本出错。我删除了触发器,现在已经成功了。beforeLoad 的工作是可以在其他地方完成的工作,所以触发器被移到了 afterSubmit。
推荐阅读
- php - 使 jQuery 与所有编号的 ID 变量一起工作
- kubernetes - Kubernetes,无法访问暴露的服务
- amazon-web-services - Xamarin AWS GetMedia 返回未知错误
- angular - Angular 6 Jasmine 错误:超时 - 在 jasmine.DEFAULT_TIMEOUT_INTERVAL 指定的超时内未调用异步回调
- python - 删除包含数字字符的行
- android - EasyImage 库:来自 AndroidManifest.xml 的属性 FILE_PROVIDER_PATHS 也存在于 [com.github.jkwiecien:EasyImage
- hadoop - 如何设计每个映射器来处理 SequenceFile 的每一行?
- android - 打开编码器时出错 - ffmpeg android(ffmpeg 命令错误)
- android - 如何从 Glide 的磁盘缓存中删除特定的图像 URL?
- c - 当我运行我的代码时,它会在终端上显示一些错误。谁能告诉我错误代表什么?我该如何调试它?