如何在Suitelet中根据选中筛选器向第二个Suitelet提交数据?
NetSuite Suitelet 间传递筛选数据实现方案
下面是三种常用的实现方式,根据你的数据量和场景选择即可:
1. URL 参数传递(适合小体量数据,如员工数量)
这种方式简单直接,适合传递单个数值或短字符串:
- 第一个 Suitelet 中构建跳转 URL:
// 计算符合条件的员工数量 const empCount = employees.length; // 拼接第二个 Suitelet 的跳转 URL,附带筛选参数与统计数据 const targetUrl = url.resolveScript({ scriptId: 'customscript_your_second_suitelet', // 替换为你的第二个 Suitelet 脚本ID deploymentId: 'customdeploy_your_second_suitelet', // 替换为部署ID params: { 'custpage_subsidiary': subsidiary, 'custpage_location': location, 'custpage_emp_count': empCount } }); // 执行跳转 response.sendRedirect({ url: targetUrl, type: http.RedirectType.SUITELET }); - 第二个 Suitelet 中获取参数:
// 在 onRequest 方法内读取传递的参数 const subsidiary = request.getParameter('custpage_subsidiary'); const location = request.getParameter('custpage_location'); const empCount = request.getParameter('custpage_emp_count'); // 后续可直接使用这些数据渲染页面或处理逻辑
2. Session 存储传递(适合大量/复杂数据)
如果需要传递员工ID列表等复杂数据,用 Session 存储更稳妥:
- 第一个 Suitelet 中存入 Session:
const empCount = employees.length; // 将筛选数据和统计结果序列化后存入 Session session.set({ name: 'custom_session_emp_filter_data', // 自定义唯一键名,避免冲突 value: JSON.stringify({ subsidiary: subsidiary, location: location, empCount: empCount, employeeIds: employees.map(emp => emp.id) // 可附加其他需要的员工数据 }) }); // 跳转至第二个 Suitelet const targetUrl = url.resolveScript({ scriptId: 'customscript_your_second_suitelet', deploymentId: 'customdeploy_your_second_suitelet' }); response.sendRedirect({url: targetUrl, type: http.RedirectType.SUITELET}); - 第二个 Suitelet 中读取并清理 Session:
const sessionDataStr = session.get({name: 'custom_session_emp_filter_data'}); if (sessionDataStr) { const filterData = JSON.parse(sessionDataStr); const subsidiary = filterData.subsidiary; const location = filterData.location; const empCount = filterData.empCount; const employeeIds = filterData.employeeIds; // 使用数据后建议清理 Session,避免残留数据干扰后续操作 session.remove({name: 'custom_session_emp_filter_data'}); }
3. 表单 POST 提交(适合表单触发的跳转场景)
如果第一个 Suitelet 是通过表单展示筛选字段,可通过隐藏字段传递数据:
- 第一个 Suitelet 中构建表单并添加隐藏字段:
const form = serverWidget.createForm({title: '员工筛选'}); // 已有的子公司、地点等筛选字段... const empCount = employees.length; // 添加隐藏字段存储需要传递的数据 form.addField({ id: 'custpage_subsidiary_hidden', type: serverWidget.FieldType.TEXT, label: '子公司' }).defaultValue = subsidiary; form.addField({ id: 'custpage_location_hidden', type: serverWidget.FieldType.TEXT, label: '地点' }).defaultValue = location; form.addField({ id: 'custpage_emp_count', type: serverWidget.FieldType.INTEGER, label: '员工数量' }).defaultValue = empCount; // 设置表单提交目标为第二个 Suitelet form.setSubmitButton({ url: url.resolveScript({ scriptId: 'customscript_your_second_suitelet', deploymentId: 'customdeploy_your_second_suitelet' }) }); response.writePage(form); - 第二个 Suitelet 中获取 POST 参数:
const subsidiary = request.getParameter('custpage_subsidiary_hidden'); const location = request.getParameter('custpage_location_hidden'); const empCount = request.getParameter('custpage_emp_count');
注意事项
- URL 参数有长度限制,不适合传递大量数据(如长列表);
- Session 数据仅在当前用户会话内有效,务必使用唯一键名避免冲突;
- 表单提交的隐藏字段 ID 不要与其他字段重复,防止参数覆盖。
内容的提问来源于stack exchange,提问作者user15989047
相关产品推荐
相关产品推荐

