NetSuite Suitelet渲染HTML模板:如何将数组作为下拉选框选项
在NetSuite Suitelet中直接通过数据源生成下拉选框选项
完全可以直接通过渲染数据源生成下拉选项,不需要额外接口。NetSuite的Suitelet模板引擎支持FreeMarker风格的指令,能直接在HTML模板中遍历数据源里的数组来生成<option>标签。
步骤1:调整Suitelet数据源,传递工单数组
修改你的Suitelet代码,把获取到的工单数组存入渲染用的DATA对象,确保模板能访问到:
// 获取工单数组(注意传递scriptContext参数,后续启用脚本参数时会用到) var workorders = loadWorkOrders(scriptContext); // 构造渲染数据源对象,将工单数组存入 var DATA = { workOrders: workorders }; // 初始化渲染器并绑定数据源 var renderer = render.create(); renderer.templateContent = file.load(<file id>).getContents(); renderer.addCustomDataSource({ format: render.DataSource.OBJECT, alias: "DATA", data: DATA }); renderer.renderToResponse({response: scriptContext.response});
步骤2:修改HTML模板,遍历数组生成选项
在HTML的<select>标签内,用NetSuite模板的<#list>指令遍历DATA.workOrders数组,动态生成选项:
<select id="workorderIDInput" name="workorderIDInput"> <option value="">Select a Work Order</option> <!-- 遍历工单数组生成每个选项 --> <#list DATA.workOrders as wo> <option value="${wo}">${wo}</option> </#list> </select>
补充说明
<#list 数组 as 别名>是NetSuite模板引擎的遍历语法,和FreeMarker的#list指令一致- 如果需要区分选项的
value和显示文本(比如value存工单内部ID,显示交易编号),可以修改loadWorkOrders函数返回对象数组:
对应的模板代码改成:// 修改loadWorkOrders中的push逻辑 workOrderIds.push({ id: result.id, // 工单内部ID tranid: result.getValue('tranid') // 交易编号 });<#list DATA.workOrders as wo> <option value="${wo.id}">${wo.tranid}</option> </#list>
异常处理优化
为避免搜索无结果或报错时模板渲染异常,在loadWorkOrders函数中默认返回空数组:
function loadWorkOrders(scriptContext){ try { var workOrderIds = []; var searchId = 6427; var woSearch = search.load({id: searchId}); woSearch.run().each(function(result){ var woTranNum = result.getValue('tranid'); workOrderIds.push(woTranNum); return true; }); return workOrderIds; } catch (e) { log.error('loadWorkOrders error', e); return []; // 异常时返回空数组,避免模板报错 } }
内容的提问来源于stack exchange,提问作者FHTPG_Bob
相关产品推荐
相关产品推荐

