user2187935
user2187935

Reputation: 771

Pass variables from suitelet to clientscript in 2.x API?

I built a form with suitelet, that has a sublist, dropdown and a button. After user would tick some selections on the sublist, a button is pressed and the selected items are sent via rest elsewhere.

Suitelet:

  @NApiVersion 2.x
  *@NScriptType Suitelet
  */
define(['N/ui/serverWidget', 'N/search', 'N/https', 'N/record'],
  function(serverWidget, search, https, record) {
    function onRequest(context) {
     if (context.request.method === 'GET') {
       var form = serverWidget.createForm({ ... });
       form.clientScriptModulePath = 'path/to/client/script';
       // code to build a sublist, add a button and write page
      } return {
         onRequest: onRequest
        };
      });

Then, my clientscript is something like:

* @NApiVersion 2.x
* @NScriptType ClientScript
*/
define(
    [ 'N/currentRecord', 'N/https' ],
    function(currentRecord, https) {
      functionSendRequest(sublist //the sublist that I want to get from the suitelet)
      {
        //code to build json string and send http request
      } return {
         saveRecord: test
        }
    });

Now, after spending a number of hours on this, a N/currentRecord came to my attention (I'm noobie with netsuite) and it would've seem as a problem solver for me, as it retrieves records that are currently active in client-side context. It works for great for dropdown menu and has a method getSublist(options), though it returns record.Sublist which has only getColumn() method. Thus, it won't really work for me. So, is there a way to pass sublist parameter to the clientscript from the suitelet once a button is pressed?

Upvotes: 0

Views: 6390

Answers (1)

Adolfo Garza
Adolfo Garza

Reputation: 3029

To solve your problem you could use getSublistValue from currentRecord like this:

var currentRec = currentRecord.get();
var numLines = currentRec.getLineCount({
    sublistId: 'item'
});
var sublistFieldValue = currentRec.getSublistValue({
    sublistId: 'item',
    fieldId: 'item',
    line: 3
});

If you really want to pass something from the Suitelet to the clientside function you gotta set your button this way:

var someTextToPassToTheClientscript = 'The Suitelet send its regards';
form.addButton({
    id : 'custpage_some_button',
    label : 'MyButton',
    functionName : 'functionSendRequest("' + someTextToPassToTheClientscript + '")'
});

And then have your clientscript receive it like this:

/*
 * @NApiVersion 2.x
 * @NScriptType ClientScript
 */
define(
    ['N/currentRecord', 'N/https'],
    function (currentRecord, https) {
    functionSendRequest(textReceivedFromSuitelet) {
        //code to build json string and send http request
    }
    return {
        functionSendRequest : functionSendRequest
    }
});

Upvotes: 2

Related Questions