好的,各位,很大程度上是通过镜子看这个的。感谢巴玛尔、克莱顿和骑士,他们的智慧帮助我走到了这一步。
脚本已经更改,现在在下面。我可以上传它并生成一个脚本记录,它确实尝试运行,但是现在我得到了这个错误:
“类型”:“error.SuiteScriptError”、“名称”:“RCRD_DSNT_EXIST”、“消息”:“没有此类型的记录”、“堆栈”:“createError(N/error)”、“initiateWorkflow(/SuiteScript/grn20.js:9)”、“原因”:{“类型”:“内部错误”、“代码”:“RCRD_DSNT_EXIST”、“详细信息”:“没有此类型的记录。”、“userEvent”:“后提交”,"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
};
});
发布于 2022-06-16 08:06:22
有两个问题我可以看到:
define()
而不是require()
。来自NetSuite文档的说明如下:注释此示例脚本使用require函数,以便您可以将其复制到SuiteScript调试器中并进行测试。必须在入口点脚本(附加到脚本记录和部署的脚本)中使用定义函数。有关更多信息,请参见SuiteScript 2.x脚本基础和SuiteScript 2.x脚本类型。
return
块中实现一个入口点函数。对于这样的用户事件脚本,这意味着您需要beforeLoad
、beforeSubmit
或beforeLoad
之一对于您的示例,您的脚本最终会看起来如下所示:
/**
* @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
};
}
);
发布于 2022-06-16 08:04:53
你所做的有几件事不对。这真的是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,所有这些都有在线帮助。
https://stackoverflow.com/questions/72647681
复制