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

如何在Suitelet(SuiteScript 2.0)的SELECT字段中仅获取采购订单列表?

解决Suitelet中SELECT字段仅显示采购订单的问题

嘿,这个问题我之前也踩过坑!NetSuite里直接把source设为purchaseorder其实是指向**交易(transaction)**这个大的记录类型,采购订单只是交易的子类之一,所以默认会把所有交易类型都拉进来,这就是为啥你看到所有交易的原因。下面给你两种靠谱的解决办法:

方法一:用自定义动态搜索生成选项(推荐,更灵活)

这种方法能让你完全控制要显示的PO范围、自定义显示文本(比如把PO编号和供应商名称一起展示),还能过滤特定状态的PO。代码示例:

// 先创建采购订单的精准搜索
var poSearch = search.create({
    type: search.Type.PURCHASE_ORDER,
    filters: [
        ['mainline', 'is', 'T'], // 只取主记录,避免同一张PO出现多条重复选项
        // 可选:添加状态过滤,比如只显示已审批的PO
        ['status', 'anyof', 'PurchaseOrder:A', 'PurchaseOrder:B']
    ],
    columns: [
        search.createColumn({name: 'tranid', label: 'PO编号'}),
        search.createColumn({name: 'entity', label: '供应商'})
    ]
});

// 添加SELECT字段
var pos = form.addField({
    id: 'custpage_selectpos',
    type: ui.FieldType.SELECT,
    label: '选择采购订单'
});
// 先添加一个默认空选项
pos.addSelectOption({value: '', text: '-- 请选择 --'});

// 遍历搜索结果,把PO添加到选项中
poSearch.run().each(function(result) {
    var poId = result.id;
    // 自定义显示文本,组合PO编号和供应商名称
    var displayText = `${result.getText('tranid')} - ${result.getText('entity')}`;
    pos.addSelectOption({
        value: poId,
        text: displayText
    });
    return true; // 继续遍历下一条结果
});

方法二:给内置source添加过滤器(更简洁)

如果不想写完整的搜索逻辑,也可以给原本的SELECT字段加个过滤器,限定只显示采购订单类型。注意这里交易类型的内部ID是PurchaseOrd(别写成purchaseorder,会无效!):

var pos = form.addField({
    id: 'custpage_selectpos',
    type: ui.FieldType.SELECT,
    label: 'Select PO',
    source: 'purchaseorder'
});

// 添加过滤器,仅保留采购订单类型
pos.setFilter({
    filter: 'type',
    operator: 'anyof',
    values: ['PurchaseOrd']
});

这个方法代码量少,但显示文本是NetSuite默认的PO编号,没法自定义内容,且复杂过滤场景(比如按供应商、日期范围)不如第一种方法灵活。

内容的提问来源于stack exchange,提问作者4N335

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 14:42:43