如何在 netsuite 中使用suitescript 2.0 在没有堆栈跟踪的情况下显示自定义错误消息

Dee*_*gan 4 javascript error-handling netsuite suitescript

我想使用“suitescript 2.0”版本向用户显示没有堆栈跟踪的自定义错误消息。在工作流中,自定义错误消息在没有堆栈跟踪的情况下显示,但在套件脚本中,“错误消息”与堆栈跟踪一起显示。

堆栈跟踪错误: {"type":"error.SuiteScriptError","name":"MISSING_CONTRACT_LINE","message":"请输入至少一个合同行项目以保存合同。","stack":["createError (N/error)","beforeSubmit(SuiteScripts/Ex_UE_Contract_2.0.js:117)","createError(N/error)"],"cause":{"name":"MISSING_CONTRACT_LINE","message":"请至少输入一个合同行项目以保存合同。"},"id":""}

我想显示没有堆栈跟踪的自定义错误消息,如下所示:"name":"MISSING_CONTRACT_LINE","message":"请输入至少一个合同行项目以保存合同。"

我的代码:

     throw error.create({
         name: 'MISSING_CONTRACT_LINE',
         message: 'Please enter atleast one Contract Line item to save a contract.'
     });
Run Code Online (Sandbox Code Playgroud)

有什么可能的方法来实现这一目标吗?

提前致谢。

小智 5

N/error 的 SuiteScriptError#toString() 方法的默认实现是调用 JSON.stringify(this),但是,该方法可以按实例重写,以处理旨在通过抛出错误向用户显示原始错误消息的情况出剧本。例如:

var err = error.create({name: 'NO_JSON', message: 'This should not be displayed as JSON!'})
err.toString = function(){return err.message};
throw err;
Run Code Online (Sandbox Code Playgroud)

或者,也可以只抛出一个字符串,但是,介入 catch 块将失去访问错误的其他属性的好处,例如,Error#stack 或 Error#name。

  • 此解决方案似乎不再有效。它仍然将 JSON 写入屏幕。 (2认同)