提问人:TheIronKing 提问时间:6/16/2022 最后编辑:TheIronKing 更新时间:6/17/2022 访问量:686
RCRD_DSNT_EXIST“,”message“:” 没有此类型的记录
RCRD_DSNT_EXIST","message":" There are no records of this type
问:
好的,大家,非常透视这个。 非常感谢 Barmar、Kryton 和 bknights,他们的智慧帮助我走到了这一步。
脚本已更改,现在在下面。我可以上传它并生成脚本记录,它确实尝试运行,但现在我收到此错误:
“type”:“错误。SuiteScriptError“,”name“:”RCRD_DSNT_EXIST“,”message“:”没有此类型的记录“,”stack“:[”createError(N/error)“,”initiateWorkflow(/SuiteScripts/grn20.js:9)“],”cause“:{”type“:”内部错误“,”code“:”RCRD_DSNT_EXIST“,”details“:”没有此类型的记录“,”userEvent“:”aftersubmit“,”stackTrace“:[”createError(N/error)“,”initiateWorkflow(/SuiteScripts/grn20.js:9)“],”notifyOff“:false},”id“:”“,”notifyOff“:false,”userFacing“:false}
但记录确实存在,ID 号和工作流 ID 与工作流中指定的相同。
还有什么原因可能导致此问题?
提前感谢您的任何建议!
编辑 - 我被告知下面的记录 ID 应该引用项目的内部 ID,这没有意义,我尝试启动的工作流旨在更改多个项目的字段,为什么我需要在脚本中指定单个项目?
/**
* @NApiVersion 2.x
* @NScriptType UserEventScript
*/
define(['N/workflow', 'N/search', 'N/error', 'N/record'],
function (workflow, search, error, record) {
function initiateWorkflow(scriptContext) {
var workflowInstanceId = workflow.initiate({
recordType: 'inventoryitem',
recordId: 35,
workflowId: 'customworkflow14'
});
var inventoryitemRecord = record.load({
type: record.Type.INVENTORY_ITEM,
id: 35
});
}
return {
afterSubmit: initiateWorkflow
};
});
答:
你正在做的事情有几件事是错误的。这确实是一个RTM情况。
您可能只是想练习 API,所以并不真正关心脚本的类型,但 Netsuite 确实如此。它分析 NScriptType 注释,并拒绝您的脚本,因为不符合要求。
用户事件脚本的形状如下:
/**
* @NApiVersion 2.0
* @NScriptType UserEventScript
*/
define([module list], function(modules...){
function beforeRecordSubmit(ctx){...} // these functions can use SuiteScript API Modules
function beforeRecordSubmit(ctx){...}
function afterRecordSubmit(ctx){...}
// you cannot use Suitescript API Modules outside of the returned functions
return {
beforeLoad: beforeRecordLoad,
beforeSubmit: beforeRecordSubmit,
afterSubmit: afterRecordSumbit
};
});
还有这些行:
workflowTask.recordType = 'INVENTORY_ITEM';
workflowTask.recordId = 'Item';
看起来他们只是充满希望的猜测。如果您登录到Netsuite,则有有关所有这些的在线帮助。
评论
recordType
可能只是您可能会尝试,但工作流目标记录包括项目而不是项目类型。 将是要为其触发工作流的清单项的内部 ID。'item'
'inventoryitem'
recordId
我可以看到 2 个问题:
- 您需要使用而不是 .以下NetSuite文档中的注释:
define()
require()
注意:此示例脚本使用 require 函数,以便您可以复制 它进入 SuiteScript 调试器并对其进行测试。您必须使用 define 入口点脚本中的函数(附加到脚本的脚本 记录和部署)。有关更多信息,请参阅 SuiteScript 2.x 脚本 基础知识和 SuiteScript 2.x 脚本类型。
- 您需要在块中实现入口点函数。对于这样的用户事件脚本,这意味着您需要 或 之一。
return
beforeLoad
beforeSubmit
afterSubmit
对于您的示例,您的脚本最终将如下所示:
/**
* @NApiVersion 2.0
* @NScriptType UserEventScript
*/
define(['N/task'],
function (task) {
function workflowTask(scriptContext) {
task.create({
taskType: task.TaskType.WORKFLOW_TRIGGER
});
workflowTask.recordType = 'INVENTORY_ITEM';
workflowTask.recordId = 'Item';
workflowTask.workflowId = 'customworkflow14';
var taskId = workflowTask.submit();
}
return {
afterSubmit: workflowTask
};
}
);
评论
)
return
)
return
})