NetSuite SS2.0中如何将参数从Suitelet传递到Scheduled Script?
我在NetSuite SS2.0里尝试把自定义参数从Suitelet传到Scheduled Script,但传递的参数一直是null。Suitelet里解析客户端传来的数据时,日志显示数据是正确的,但从Suitelet传到Scheduled Script的环节出了问题。
我试过两种获取参数的写法:
var WOObjId = runtime.getCurrentScript().getParameter({name: 'custparam_wo_record'}); var WOObjId = context.request.parameters.custparam_wo_record;
Scheduled Script 代码
define(['N/record', 'N/redirect', 'N/ui/serverWidget', 'N/task', 'N/error', 'N/file', 'N/render', 'N/runtime', 'N/search', 'N/config'], (record, redirect, serverWidget, task, error, file, render, runtime, search, config) => { /** * Defines the Scheduled script trigger point. * @param {Object} scriptContext * @param {string} scriptContext.type - Script execution context. Use values from the scriptContext.InvocationType enum. * @since 2015.2 */ const execute = (context) => { try{ //Get XML File information log.debug('Request Received'); var WOObjId = runtime.getCurrentScript().getParameter({name: 'custparam_wo_record'}); log.debug('object received', WOObjId) //var WOObjId = [9073,9059] var WOObjLength = WOObjId.length; log.debug('WOObjId', WOObjId + ' length is '+ WOObjLength );
Suitelet 代码
(task) => { /** * Defines the Suitelet script trigger point. * @param {Object} scriptContext * @param {ServerRequest} scriptContext.request - Incoming request * @param {ServerResponse} scriptContext.response - Suitelet response * @since 2015.2 */ const onRequest = (context) => { var WOObjId = context.request.parameters.custparam_wo_record; log.debug('Inside Suitelet Call received', 'WO Params: ' + WOObjId); executeScheduled(WOObjId); } function executeScheduled(param) { var scriptTask = task.create({ taskType: task.TaskType.SCHEDULED_SCRIPT, scriptId: "customscript_ns_ss_printwo_batchschprint", deploymentId: "customdeploy_ns_ss_printwo_batchschprint", params: { 'custparam_wo_record' : param } }); var scriptTaskId = scriptTask.submit(); log.debug("scriptTaskId", scriptTaskId); } return {onRequest} });
排查与解决方法
确认脚本部署的参数配置
检查Scheduled Script的部署记录,在「参数」标签页中确认已添加custparam_wo_record,并勾选「允许脚本设置值」。未添加的参数无法接收动态传递的值。严格匹配参数名称
NetSuite自定义参数名称区分大小写,确保Suitelet中传入的'custparam_wo_record'与Scheduled Script中获取的参数名称拼写、大小写完全一致。处理参数类型限制
NetSuite任务参数仅支持字符串类型,若传递的是数组(如示例中注释的[9073,9059]),需在Suitelet中转成字符串:params: { 'custparam_wo_record' : param.join(',') }再在Scheduled Script中还原:
var WOObjId = context.request.parameters.custparam_wo_record.split(',').map(Number);改用scriptContext获取参数
Scheduled Script中动态传递的参数,推荐通过scriptContext.request.parameters获取,而非runtime.getCurrentScript().getParameter(后者更适合静态预设参数):var WOObjId = context.request.parameters.custparam_wo_record;校验脚本部署状态与ID
确保Scheduled Script部署处于「已启用」状态,且Suitelet中填写的scriptId、deploymentId与部署记录完全匹配,无拼写错误。
内容的提问来源于stack exchange,提问作者Saahir

