This release note was updated September 30, 2024.
Work in Synchronous Mode with the runAction() Function
The runAction() function—a client-side function— now supports the synchronous mode in NetSuite CPQ
Configurator (version 1.4.5). The function’s syntax has been updated to take an object as a parameter. As
properties, the object includes the server-side function code and the new async parameter. With this parameter, you can define whether client-side actions can make requests to server-side actions synchronously or asynchronously. Because runAction() continues to work asynchronously by default, you can omit the async parameter when true. If you want to work in synchronous mode, set the async parameter to false. Use the following syntax to work with runAction() in synchronous mode: runAction({code:‘SERVER_SIDE_ACTION_CODE’, async: false}); To work in asynchronous mode, use the following syntax: runAction({code:‘SERVER_SIDE_ACTION_CODE’}); Previously, runAction() could only work asynchronously. The previous syntax is still valid to work in asynchronous mode: runAction(‘SERVER_SIDE_ACTION_CODE’); Note: When creating new client-side actions, use the new syntax. Work in Standard Mode When Creating and Copying
Records by Scripting
The createRecord() and copyRecord() functions now work in standard mode by default. In NetSuite CPQ Configurator (version 1.4.5), these server-side functions include a new dynamic parameter. This parameter is false by default and can be omitted when working in standard mode. If you want to work in dynamic mode, set the dynamic parameter to true. For more information about standard and dynamic modes, see the help topic SuiteScript 2.x Standard and Dynamic Modes. Note: Use dynamic mode only if you experience issues when creating or copying records in standard mode. The following piece of code provides an example of working with the createRecord() function in dynamic mode: createRecord({ type: ‘inventoryitem’, fields: { itemid: ‘Desk-Lamp-A170300’, displayname: ‘Desk Lamp’, subsidiary: [“1”], includechildren: true, costcategory: 1, taxschedule: 1 }, sublists: [ { itemvendor: [ { vendor: 163, subsidiary: 1 }, { vendor: 164, subsidiary: 1 } ] } ], dynamic: true }).then(function(data) { console.log(‘Data: ’, data) }); This piece of code shows an example of working with the copyRecord() function in dynamic mode: copyRecord({ id: 496, type: ‘inventoryitem’, fields: { itemid: ‘Desk-Lamp-A170300’, displayname: ‘Desk Lamp’, subsidiary: [“1”], includechildren: true, costcategory: 1, taxschedule: 1 }, lists: { itemvendor: [ { vendor: 9, subsidiary: 2 }, { vendor: 412, subsidiary: 1 } ] }, dynamic: true }) Previously, createRecord() and copyRecord() only worked in dynamic mode.
Integration with NetSuite SuiteBilling
NetSuite CPQ Configurator (version 1.3.4) now integrates with NetSuite SuiteBilling to include subscriptions for products or services in the configuration process. To add subscriptions to transactions with NetSuite CPQ Configurator, create subscriptions with creation records. Then, link them to subscription plans through mapping records. Before adding subscriptions to transactions, go to CPQ > Configurator > Settings. Under the Submit subtab, check the Update transaction entity box (version 1.3.5). This option loads subscriptions to transactions after the configuration is submitted. Note: Enabling this option may be incompatible with custom scripts deployed on transactions.