SuiteScript getSessionRecordObject()不支持的跨版本调用排查
SuiteScript 跨版本调用触发未支持API报错的排查方向
收到的原始报错信息
System USER_ERROR 24/3/2021 11:08 AM -System- The following operation or use case is not yet supported in SuiteScript: API getSessionRecordObject() on nlobjContext, script ID:(blurred just in case) bundles:[]
涉及的脚本调用链路
本次问题涉及的串联调用逻辑跨SuiteScript多版本Suitlet,具体层级为:
- 主入口:SuiteScript 1.0 类型Suitlet
- 第一层下游:被主入口调用的第二枚SuiteScript 1.0 Suitlet
- 第二层下游:被上一层1.0 Suitlet调用的SuiteScript 2.0 Suitlet
- 最末端依赖:被2.0 Suitlet调用的SuiteScript 2.0 自定义库
初步已排查的排除项
逐行核验了各层脚本的代码逻辑,暂未发现显性的版本误用问题:即没有出现SuiteScript 1.0代码直接调用2.0模块接口、或SuiteScript 2.0代码直接调用1.0原生旧对象API的情况。
其余可触发该报错的潜在原因
- 跨版本Suitlet跳转的上下文透传不规范
nlobjContext是SuiteScript 1.0体系下的原生上下文对象,getSessionRecordObject()是绑定在该旧对象上的内置会话读取方法。当1.0版本Suitlet跨版本调用2.0 Suitlet时,NetSuite底层会自动做跨版本上下文的兼容封装:如果跳转时未通过url.resolveScript()的标准方式拼接跳转地址、而是硬编码URL参数、手动篡改上下文传值,会导致底层兼容层错误识别上下文类型,在仅支持2.0语法的运行环境中强行触发旧版1.0的getSessionRecordObject()调用,抛出不支持的报错。 - 2.0自定义库的旧版依赖残留
即使自定义库的所有业务逻辑都遵循2.0语法规范,如果在初始化逻辑中引入了已弃用的N/legacy模块来获取旧版nlobjContext对象,运行时会自动加载1.0版本的上下文兼容层。当当前2.0 Suitlet的运行环境不支持该旧对象的会话读取能力时,就会触发该API未支持的报错。 - 脚本部署的运行环境配置错配
逐份检查各脚本的部署记录配置,重点核对2.0 Suitlet的部署类型:如果该2.0 Suitlet被错误配置为后台调度脚本、外部RESTlet绑定等非前台页面访问的运行环境,上层1.0 Suitlet透传的页面会话上下文传入该脚本时,系统无法为非页面类运行环境生成对应的会话记录,就会触发该旧API的未支持报错。 - 脚本运行引擎的版本错配
检查每一层脚本记录的“默认SuiteScript运行版本”设置:哪怕代码语法本身完全合规,如果2.0 Suitlet的脚本记录被错配为SuiteScript 1.0 运行引擎、或上游1.0 Suitlet被错配为2.0 运行引擎,跨层调用时系统会触发新旧API混合调用逻辑,在不支持旧会话读取能力的引擎环境下强行调用getSessionRecordObject()方法,触发报错。
内容的提问来源于stack exchange,提问作者Agustín Robayna
相关产品推荐
相关产品推荐

