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

NetSuite SuiteScript:如何为NonInventorySaleItem设置基准价格?

NetSuite Restlet创建非库存品时无法设置基准价格的解决方案

我有一个基础的NetSuite Restlet,用于创建NonInventoryItem,通过Postman调用可正常运行,但无法为其设置基准价格。以下是当前可用的代码:

define(['N/record', 'N/log'], function(record, log) {
function doPost(requestBody) {
    try {
        // Extract product details from the request body
        var itemName = requestBody.itemName;
        var itemDescription = requestBody.itemDescription;
        var itemPrice = parseFloat(requestBody.itemPrice); // Ensure it's a number
        var incomeAccount = requestBody.incomeAccount;
        var expenseAccount = requestBody.expenseAccount;
        var taxable = requestBody.taxable;
        var taxItemCode = 2; // default is taxable

        log.debug({
            title: 'Item: ' + itemName,
            details: 'Description: ' + itemDescription + ', expenseAccount: ' + expenseAccount + ', itemPrice: ' + itemPrice
        });

        if(taxable == "False"){
          taxItemCode = 1;
        }

        // Create a new inventory item record
        var itemRecord = record.create({
            type: record.Type.NON_INVENTORY_ITEM,
            isDynamic: true
        });
        
        // Set item fields
        itemRecord.setValue({
            fieldId: 'itemid',
            value: itemName
        });
        itemRecord.setValue({
            fieldId: 'displayname',
            value: itemName
        });
        itemRecord.setValue({
            fieldId: 'subtype',
            value: 'Sale'
        })
        itemRecord.setValue({
            fieldId: 'salesdescription',
            value: itemDescription
        });
       
       itemRecord.setValue({
            fieldId: 'taxschedule',
            value: taxItemCode
        });
        itemRecord.setValue({
            fieldId: 'incomeaccount',
            value: incomeAccount
        });            
        itemRecord.setValue({
            fieldId: 'expenseaccount',
            value: expenseAccount
        });
        itemRecord.setValue({
            fieldId: 'costestimatetype',
            value: 'ITEMDEFINED'
        });

        
        //Set the Include Children checkbox for subsidiaries
        itemRecord.setValue({
            fieldId: 'includechildren',
            value: true
        });
                   
       
        // Save the item record
        var itemId = itemRecord.save();

        log.debug({
            title: 'Item Created',
            details: 'Item ID: ' + itemId
        });

        return {
            success: true,
            message: 'Item created successfully.',
            itemId: itemId
        };
    } catch (e) {
        log.error({
            title: 'Error Creating Item',
            details: e.message
        });

        return {
            success: false,
            message: 'Error creating item.',
            error: e.message
        };
    }
}

return {
    post: doPost
};

我在API文档中未找到解决方案,多次尝试多种方案均无果。我并非NetSuite专家,希望得到帮助,我实际想要设置的是NetSuite界面中显示为$130的基准价格字段。


解决方案

要设置该基准价格,你可以通过两种方式实现,以下是具体操作:

方法1:直接设置baseprice字段(推荐)

NetSuite中,基准价格对应的字段ID为baseprice,在现有代码的字段设置区域、保存记录之前,添加以下代码:

// 设置基准价格
itemRecord.setValue({
    fieldId: 'baseprice',
    value: itemPrice
});

方法2:通过价格子列表设置(适配需要指定价格级别的场景)

如果直接设置baseprice无效,可通过操作price子列表添加默认价格行:

// 新增价格子列表行
itemRecord.selectNewLine({
    sublistId: 'price'
});
// 设置价格值
itemRecord.setCurrentSublistValue({
    sublistId: 'price',
    fieldId: 'price',
    value: itemPrice
});
// 设置价格级别(默认级别ID通常为1,需根据你的NetSuite配置调整)
itemRecord.setCurrentSublistValue({
    sublistId: 'price',
    fieldId: 'pricelevel',
    value: 1
});
// 提交子列表行
itemRecord.commitLine({
    sublistId: 'price'
});

修改后的完整代码(以方法1为例)

define(['N/record', 'N/log'], function(record, log) {
function doPost(requestBody) {
    try {
        // Extract product details from the request body
        var itemName = requestBody.itemName;
        var itemDescription = requestBody.itemDescription;
        var itemPrice = parseFloat(requestBody.itemPrice); // Ensure it's a number
        var incomeAccount = requestBody.incomeAccount;
        var expenseAccount = requestBody.expenseAccount;
        var taxable = requestBody.taxable;
        var taxItemCode = 2; // default is taxable

        log.debug({
            title: 'Item: ' + itemName,
            details: 'Description: ' + itemDescription + ', expenseAccount: ' + expenseAccount + ', itemPrice: ' + itemPrice
        });

        if(taxable == "False"){
          taxItemCode = 1;
        }

        // Create a new inventory item record
        var itemRecord = record.create({
            type: record.Type.NON_INVENTORY_ITEM,
            isDynamic: true
        });
        
        // Set item fields
        itemRecord.setValue({
            fieldId: 'itemid',
            value: itemName
        });
        itemRecord.setValue({
            fieldId: 'displayname',
            value: itemName
        });
        itemRecord.setValue({
            fieldId: 'subtype',
            value: 'Sale'
        })
        itemRecord.setValue({
            fieldId: 'salesdescription',
            value: itemDescription
        });
       
       itemRecord.setValue({
            fieldId: 'taxschedule',
            value: taxItemCode
        });
        itemRecord.setValue({
            fieldId: 'incomeaccount',
            value: incomeAccount
        });            
        itemRecord.setValue({
            fieldId: 'expenseaccount',
            value: expenseAccount
        });
        itemRecord.setValue({
            fieldId: 'costestimatetype',
            value: 'ITEMDEFINED'
        });

        // 设置基准价格
        itemRecord.setValue({
            fieldId: 'baseprice',
            value: itemPrice
        });
        
        //Set the Include Children checkbox for subsidiaries
        itemRecord.setValue({
            fieldId: 'includechildren',
            value: true
        });
                   
       
        // Save the item record
        var itemId = itemRecord.save();

        log.debug({
            title: 'Item Created',
            details: 'Item ID: ' + itemId
        });

        return {
            success: true,
            message: 'Item created successfully.',
            itemId: itemId
        };
    } catch (e) {
        log.error({
            title: 'Error Creating Item',
            details: e.message
        });

        return {
            success: false,
            message: 'Error creating item.',
            error: e.message
        };
    }
}

return {
    post: doPost
};

注意事项

  • 使用方法2时,需确认NetSuite中默认价格级别的实际ID(通常为1,可在价格级别列表中查看)。
  • 确保itemPrice为合法数值,你的代码中已通过parseFloat处理,无需额外调整。
  • 若仍出现报错,检查当前NetSuite角色是否拥有设置项目价格的权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 08:30:56