-2

I just started using NetSuite and SuiteScript 2.0. Here is my need:

I need to create a list based on a record, then I need to select the desired lines on the list to call a function only for the selected lines.

Currently, I created a list (using N/ui/serverWidget.List object), and I'm able to display the lines from my record using N/search module to feed my list, I also created a button on the list so I can call a function.

Where I'm stuck, it's to select the lines that appear in the list in order to trigger a function only for the selected lines.

With the API, I tried to add a column of type CHECKBOX for the list but it doesn't work.

Do you know the best way to achieve that?

Thank you.

Simon
  • 3
  • 1
  • 5

1 Answers1

4

Here is an example using a Suitelet to add the checkbox to the sublist. You'd handle them in your client script by looping over the lines and checking to see if the field is true.

function onRequest(context) {
        // Create the form
        function createForm() {
            try {
                var form = serverWidget.createForm({
                    title: 'My Form',
                    hideNavBar: false
                });
                // In the client script, handle the checked lines by looping over the
                // custpage_table sublist and looking to see if custpage_wo_process is true
                form.clientScriptModulePath = 'SomeScript.js';
                form.addButton({
                    id: 'custpage_myaction',
                    label: 'Process',
                    functionName: 'printRecords'
                });
                // Add a sublist to the form
                var sublist = form.addSublist({
                    id: 'custpage_table',
                    type: serverWidget.SublistType.LIST,
                    label: 'Records to Process'
                });
                // Show a 'Mark All' button
                sublist.addMarkAllButtons();
                // Add an internalid to track the line item
                var idField = sublist.addField({
                    id: 'custpage_rec_id',
                    label: 'Internal ID',
                    type: serverWidget.FieldType.TEXT
                });
                idField.updateDisplayType({
                    displayType: serverWidget.FieldDisplayType.HIDDEN
                });
                // Add a checkbox to mark which records should be processed
                var printField = sublist.addField({
                    id: 'custpage_rec_process',
                    label: 'Process',
                    type: serverWidget.FieldType.CHECKBOX
                });
                // return the form and sublist
                return {form: form, sublist: sublist};
            } catch (e) {
                log.error('Error creating form.', e);
            }
        }

        function handleGet() {
            var myForm = createForm();
            if (myForm) {
                // Get the form
                var form = myForm.form;
                // Get the sublist
                var sublist = myForm.sublist;
                // Do a search, etc to get the records to add to the sublist
                var addResults = fetchSearchResult();
                // Add the values to the sublist
                for (var i = 0; i < addResults.length; i++) {
                    sublist.setSublistValue({
                        id: 'custpage_rec_id',
                        line: i,
                        value: addResults[i].id
                    });
                }
                context.response.writePage(form);
            }
        }

        if (context.request.method === 'GET') {
            handleGet();
        }
    }
ehcanadian
  • 1,738
  • 1
  • 15
  • 23
  • Thank you! That was exactly my need. The serverWidget.List object does not offer many possibilities, the serverWidget.Sublist object brings much more. The fact that they are named List and Sublist is pretty confusing because you can use the Sublist object as a top-level list. – Simon Mar 14 '19 at 17:44