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

创建NetSuite Restlet提取供应商账单Communications标签页文件遇阻

解决方案:通过反向搜索文件记录实现需求

因为Communications标签下的Files静态子列表确实无法通过脚本直接访问,替代方案是从文件记录反向关联供应商账单——NetSuite的文件记录会存储其附加的父记录信息,我们可以基于这一点来实现需求。

具体步骤:

  • 搜索所有附加到供应商账单的文件记录
  • 从搜索结果中提取关联的供应商账单ID并去重
  • 根据需要加载账单详情,同时获取文件的下载信息

SuiteScript 2.x 代码示例(Restlet)

/**
 * @NApiVersion 2.x
 * @NScriptType Restlet
 * @NModuleScope SameAccount
 */
define(['N/search', 'N/file'], function(search, file) {
    function getVendorBillsWithFiles() {
        // 搜索附加到供应商账单的文件
        const fileSearch = search.create({
            type: search.Type.FILE,
            filters: [
                ['attachtotype', 'is', 'vendorbill'],
                'AND',
                ['attachto', 'isnotempty', '']
            ],
            columns: [
                search.createColumn({name: 'attachto', label: '关联账单ID'}),
                search.createColumn({name: 'name', label: '文件名'}),
                search.createColumn({name: 'internalid', label: '文件ID'}),
                search.createColumn({name: 'url', label: '文件URL'})
            ]
        });

        const results = [];
        const processedBillIds = new Set(); // 用于去重账单

        fileSearch.run().each(function(result) {
            const billId = result.getValue('attachto');
            const fileId = result.getValue('internalid');
            const fileName = result.getValue('name');
            const fileUrl = result.getValue('url');

            // 去重处理,每个账单只记录一次(如果需要保留所有文件可去掉此判断)
            if (!processedBillIds.has(billId)) {
                processedBillIds.add(billId);
                results.push({
                    vendorBillId: billId,
                    attachedFiles: [{
                        fileId: fileId,
                        fileName: fileName,
                        downloadUrl: fileUrl
                    }]
                });
            } else {
                // 追加当前账单的其他文件信息
                const billEntry = results.find(item => item.vendorBillId === billId);
                if (billEntry) {
                    billEntry.attachedFiles.push({
                        fileId: fileId,
                        fileName: fileName,
                        downloadUrl: fileUrl
                    });
                }
            }
            return true;
        });

        // 如需获取账单详细字段,可批量加载账单记录合并到结果中
        /*
        const billSearch = search.create({
            type: search.Type.VENDOR_BILL,
            filters: [['internalid', 'anyof', Array.from(processedBillIds)]],
            columns: ['tranid', 'trandate']
        });
        */

        return JSON.stringify(results);
    }

    function downloadFile(requestParams) {
        // 接收文件ID参数,返回文件内容
        const fileId = requestParams.fileId;
        if (!fileId) {
            return JSON.stringify({error: '缺少fileId参数'});
        }
        try {
            const fileObj = file.load({id: fileId});
            return {
                fileName: fileObj.name,
                fileContent: fileObj.getContents(),
                fileType: fileObj.fileType
            };
        } catch (e) {
            return JSON.stringify({error: e.message});
        }
    }

    return {
        get: getVendorBillsWithFiles,
        post: downloadFile
    };
});

注意事项:

  • 脚本需要配置文件和供应商账单的读取权限,同时确保脚本有权限访问目标文件(比如私有文件需要脚本所属角色有对应权限)
  • 文件的url字段生成的链接需要用户登录NetSuite后才能访问;如果需要无登录下载,可通过Restlet返回文件内容,由前端处理下载逻辑
  • 若账单或文件数量较大,建议使用search.runPaged()分页搜索,避免性能问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 13:35:19