NetSuite 1.0 SuiteScript提交后事件获取shipmethod文本报错求助
解决SuiteScript 1.0 AfterSubmit中无法获取Shipmethod显示文本的问题
我之前做NetSuite SuiteScript 1.0开发时,也碰到过一模一样的情况——在AfterSubmit用户事件脚本里调用salesRecObject.getFieldText("shipmethod")直接抛出SSS_NOT_YET_SUPPORTED异常,而getFieldValue只能返回内部ID(比如你拿到的"4")。这是因为在AfterSubmit的默认静态记录上下文里,部分列表字段的显示文本并没有被预加载,导致getFieldText无法正常工作。
这里有两个靠谱的解决方案,你可以根据场景选择:
方案1:动态模式重新加载记录获取文本
通过nlapiLoadRecord以动态模式重新加载销售订单,这样就能正常调用getFieldText获取显示文本了:
function afterSubmit(type) { // 仅在创建或编辑订单时执行 if (type === 'create' || type === 'edit') { var orderId = nlapiGetRecordId(); // 以dynamic模式加载记录,确保字段文本被加载 var dynamicSalesRec = nlapiLoadRecord('salesorder', orderId, { recordmode: 'dynamic' }); var shipMethodDisplayText = dynamicSalesRec.getFieldText('shipmethod'); // 打印日志验证结果 nlapiLogExecution('DEBUG', '发货方式显示文本', shipMethodDisplayText); } }
方案2:直接查询发货方式记录获取名称
因为getFieldValue返回的是发货方式的内部ID,我们可以直接用nlapiLookupField查询对应的发货方式记录的名称字段,这个方法更高效,不需要加载整个订单:
function afterSubmit(type) { if (type === 'create' || type === 'edit') { var shipMethodInternalId = nlapiGetFieldValue('shipmethod'); if (shipMethodInternalId) { // 直接查询shipmethod记录的name字段 var shipMethodDisplayText = nlapiLookupField('shipmethod', shipMethodInternalId, 'name'); nlapiLogExecution('DEBUG', '发货方式显示文本', shipMethodDisplayText); } } }
注意事项
- 确保你的脚本角色拥有发货方式记录的查看权限,否则
nlapiLookupField会返回null或者抛出权限异常。 - 如果是自定义的发货方式字段(而非标准字段),需要调整
nlapiLookupField的第一个参数为对应的自定义列表ID。
内容的提问来源于stack exchange,提问作者Amit
相关产品推荐
相关产品推荐

