You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 05:45:16