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
相关产品推荐
相关产品推荐

