Navigation from One suitelet to Another suitelet

Scenario: By clicking from a suitelet it need to be navigate to another Suitelet

Solution:

Every elements in the suitelet can be added by using usual suitelet form and form elements. To navigate from a suitelet to another you can use window.location.href, along with URL.

In this example, projects are listing and according to the selection of project, it lists the project tasks of selected project in the first suitelet. There is a checkbox in each line, when you check the checkbox it will navigate to the next suitelet by listing all the resources of the selected project.

//JJ SL Suitelet.js

/**
 * @NApiVersion 2.1
 * @NScriptType Suitelet
 */
define(['N/currentRecord', 'N/error', 'N/record', 'N/runtime', 'N/search','N/ui/serverWidget', 'N/https'],
    /**
 * @param{currentRecord} currentRecord
 * @param{error} error
 * @param{record} record
 * @param{runtime} runtime
 * @param{search} search
     * @param{serverWidget} serverWidget
     * @param{https} https
 */
    (currentRecord, error, record, runtime, search, serverWidget, https) => {

        /**
         * Function to check whether the field has an empty value or not.
         *
         * @param {parameter} parameter - fieldValue
         * @returns {boolean} true - if the value is not empty
         * @returns {boolean} false - if the value is empty
         *
         * @since 2015.2
         */
        function checkForParameter(parameter) {
            try{
                if (parameter != "" && parameter != null && parameter != undefined && parameter != "null" && parameter != "undefined" && parameter != " " && parameter != false) {
                    return true;
                }
                else {
                    log.debug("Empty Value found");
                    return false;
                }
            }
            catch (e) {
                log.debug("Error @ empty check Function: ",e.name+' : '+e.message)
            }
        }


        function projectSearch(user){
            try{
                var jobSearchObj = search.create({
                    type: "job",
                    filters:
                        [
                            ["isinactive","is","F"],
                            "AND",
                            ["status","noneof","1"],
                            "AND",
                            [["projectmanager","anyof",user],"OR",[["jobresource","anyof","@CURRENT@"],"AND",["jobresourcerole","anyof","-2"]]]
                        ],
                    columns:
                        [
                            search.createColumn({
                                name: "internalid",
                                summary: "GROUP",
                                label: "Internal ID"
                            }),
                            search.createColumn({
                                name: "entityid",
                                summary: "GROUP",
                                sort: search.Sort.ASC,
                                label: "Name"
                            })
                        ]
                });
                var searchResultCount = jobSearchObj.runPaged().count;
                log.debug("jobSearchObj result count",searchResultCount);
                var res = []
                if(searchResultCount>0) {
                    jobSearchObj.run().each(function (result) {
                        // .run().each has a limit of 4,000 results
                        var prjId = result.getValue({name: "internalid", summary: "GROUP"})
                        var prjName = result.getValue({name: "entityid", summary: "GROUP", sort: search.Sort.ASC})
                        res.push({
                            prjId: prjId,
                            prjName: prjName
                        })
                        return true;
                    });
                }
                return res;
            }
            catch (e) {
                log.debug("Error @ Project Search: ",e.name+" : "+e.message)
            }
        }

        function resourceGroupSearch() {
            try{
                var resourcegroupSearchObj = search.create({
                    type: "resourcegroup",
                    filters:
                        [
                            ["isinactive","is","F"]
                        ],
                    columns:
                        [
                            search.createColumn({
                                name: "internalid",
                                sort: search.Sort.ASC,
                                label: "Internal ID"
                            }),
                            search.createColumn({name: "name", label: "Name"}),
                            search.createColumn({name: "numberofmembers", label: "Number of members"}),
                            search.createColumn({
                                name: "subsidiary",
                                join: "groupMember",
                                label: "Subsidiary"
                            })
                        ]
                });
                var searchResultCount = resourcegroupSearchObj.runPaged().count;
                log.debug("resourcegroupSearchObj result count",searchResultCount);
                var res = [];
                if(searchResultCount>0) {
                    resourcegroupSearchObj.run().each(function (result) {
                        // .run().each has a limit of 4,000 results
                        var rgId = result.getValue({name: "internalid", sort: search.Sort.ASC})
                        var rgName = result.getValue({name: "name"})
                        var rgMembers = result.getValue({name: "numberofmembers"})
                        res.push({
                            rgId: rgId,
                            rgName: rgName,
                            rgMembers: rgMembers
                        })
                        return true;
                    });
                }
                log.debug("RG RES: ",res)
                return res;            }
            catch (e) {
                log.debug("Error @ Resource Group Search: ",e.name+" : "+e.message)
            }
        }

        function projectTaskSearch(user){
            try{
                log.debug("INSIDE PRJ TSK FUNCTION")
                var filterArr ;
                if(checkForParameter(user)==true){
                    filterArr= ["project","anyof",user]
                }
                log.debug("filterArr: ",filterArr)
                var projecttaskSearchObj = search.create({
                    type: "projecttask",
                    filters: filterArr ,
                    columns:
                        [
                            search.createColumn({
                                name: "internalid",
                                summary: "GROUP",
                                label: "Internal ID"
                            }),
                            search.createColumn({
                                name: "title",
                                summary: "GROUP",
                                label: "Name"
                            })
                        ]
                });
                var searchResultCount = projecttaskSearchObj.runPaged().count;
                log.debug("projecttaskSearchObj result count", searchResultCount);
                var res = []
                if (searchResultCount > 0) {
                    projecttaskSearchObj.run().each(function (result) {
                        // .run().each has a limit of 4,000 results
                        var taskId = result.getValue({
                            name: "internalid",
                            summary: "GROUP"
                        })
                        var taskName = result.getValue({
                            name: "title",
                            summary: "GROUP"
                        })
                        res.push({
                            taskId: taskId,
                            taskName: taskName
                        })
                        return true;
                    });
                }
                log.debug("Project Task RES: ", res)
                return res

            }
            catch (e) {
                log.debug("Error @ ProjectTask Search: ",e.name+" : "+e.message)
            }
        }

        /**
         * Defines the Suitelet script trigger point.
         * @param {Object} scriptContext
         * @param {ServerRequest} scriptContext.request - Incoming request
         * @param {ServerResponse} scriptContext.response - Suitelet response
         * @since 2015.2
         */
        const onRequest = (scriptContext) => {
            try{
                var prjIdParam = scriptContext.request.parameters.prjId
                log.debug("prjIdParam: ",prjIdParam)
                var rgParam = scriptContext.request.parameters.resourceGroup
                log.debug("rgParam: ",rgParam)
                var currUser = runtime.getCurrentUser().id
                var prjList = projectSearch(currUser)
                log.debug("prjList: ",prjList)

                var rgList = resourceGroupSearch()
                log.debug("rgList: ",rgList)
                var form = serverWidget.createForm({
                    title: 'Project'
                });
                form.clientScriptFileId = 179492
                if(scriptContext.request.method === 'GET') {
                    var projectSelect = form.addField({
                        id: 'custpage_project',
                        type: serverWidget.FieldType.SELECT,
                        label: 'Project'
                    })
                    projectSelect.addSelectOption({
                        value: " ",
                        text: "SELECT",
                        isSelected: true
                    })
                    for (var i = 0; i < prjList.length; i++) {
                        projectSelect.addSelectOption({
                            value: prjList[i].prjId,
                            text: prjList[i].prjName,
                        })
                    }
                    projectSelect.isMandatory = true
                    projectSelect.defaultValue = prjIdParam

                    if (checkForParameter(prjIdParam) == true) {
                        var prjTaskList = projectTaskSearch(prjIdParam)
                        log.debug("prjTaskList: ", prjTaskList)

                        var sublistProjectTask = form.addSublist({
                            id: 'custpage_project_task_details',
                            type: serverWidget.SublistType.LIST,
                            label: 'Project Task Details'
                        });
                        var projectTask = sublistProjectTask.addField({
                            id: 'custpage_project_task',
                            type: serverWidget.FieldType.TEXT,
                            label: 'Project Task ID'
                        })
                        var projectTaskName = sublistProjectTask.addField({
                            id: 'custpage_project_taskname',
                            type: serverWidget.FieldType.TEXT,
                            label: 'Project Task'
                        })
                        //
                        var resourceGroup = sublistProjectTask.addField({
                            id: 'custpage_rg',
                            type: serverWidget.FieldType.SELECT,
                            label: 'Resource Group'
                        })
                        resourceGroup.addSelectOption({
                            value: "",
                            text: "SELECT RESOURCE GROUP"
                        })
                        for (var j = 0; j < rgList.length; j++) {
                            resourceGroup.addSelectOption({
                                value: rgList[j].rgId,
                                text: rgList[j].rgName
                            })
                        }
                        resourceGroup.defaultValue = rgParam

                        //
                        var employeeCheck = sublistProjectTask.addField({
                            id: 'custpage_employee_check',
                            type: serverWidget.FieldType.CHECKBOX,
                            label: 'Employee'
                        })
                        employeeCheck.defaultValue = false

                        var selectedResources = sublistProjectTask.addField({
                            id: 'custpage_selected_resources',
                            type: serverWidget.FieldType.TEXT,
                            label: 'Selected Resources'
                        })
                        // selectedResources.updateDisplayType({displayType: serverWidget.SublistDisplayType.HIDDEN})

                        log.debug("prjTaskList.length: ", prjTaskList.length)

                        if (prjTaskList.length > 0) {
                            for (var i = 0; i < prjTaskList.length; i++) {
                                sublistProjectTask.setSublistValue({
                                    id: 'custpage_project_task',
                                    line: i,
                                    value: prjTaskList[i].taskId
                                })
                                sublistProjectTask.setSublistValue({
                                    id: 'custpage_project_taskname',
                                    line: i,
                                    value: prjTaskList[i].taskName
                                })
                            }
                        }
                    }
                    scriptContext.response.writePage(form);
                }
            }
            catch (e) {
                log.debug("Error @ onRequest: ",e.name+" : "+e.message)
            }
        }

        return {onRequest}

    });

//JJ CS Validations.js

/**
 * @NApiVersion 2.x
 * @NScriptType ClientScript
 * @NModuleScope SameAccount
 */
define(['N/currentRecord', 'N/error', 'N/https', 'N/record', 'N/runtime', 'N/search', 'N/url'],
/**
 * @param{currentRecord} currentRecord
 * @param{error} error
 * @param{https} https
 * @param{record} record
 * @param{runtime} runtime
 * @param{search} search
 * @param{url} url
 */
function(currentRecord, error, https, record, runtime, search, url) {

    /**
     * Function to be executed after page is initialized.
     *
     * @param {Object} scriptContext
     * @param {Record} scriptContext.currentRecord - Current form record
     * @param {string} scriptContext.mode - The mode in which the record is being accessed (create, copy, or edit)
     *
     * @since 2015.2
     */
    function pageInit(scriptContext) {
        try{
            console.log("Current: ",scriptContext.currentRecord)
        }
        catch (e) {
            console.log("Error @ Page INIT: ",e.name+" : "+e.message)
        }
    }

    /**
     * Function to be executed when field is changed.
     *
     * @param {Object} scriptContext
     * @param {Record} scriptContext.currentRecord - Current form record
     * @param {string} scriptContext.sublistId - Sublist name
     * @param {string} scriptContext.fieldId - Field name
     * @param {number} scriptContext.lineNum - Line number. Will be undefined if not a sublist or matrix field
     * @param {number} scriptContext.columnNum - Line number. Will be undefined if not a matrix field
     *
     * @since 2015.2
     */
    function fieldChanged(scriptContext) {
        try{
            if (window.onbeforeunload) {
                window.onbeforeunload = function () {
                    null;
                };
            }
            console.log("inside field Change")
            console.log("FIELD ID: ",scriptContext.fieldId)

            var oldUrl = window.location.href;
            console.log("OLD URL: ",oldUrl)
            var r = scriptContext.currentRecord
            var prjId,prjTaskId,rg,checkValue;

            if(scriptContext.fieldId == 'custpage_project'){

                prjId = r.getValue({
                    fieldId: 'custpage_project'
                })
                console.log("VAL: ",prjId)

                oldUrl = oldUrl.split('&deploy=' + 1);
                var newUrl = oldUrl[0] + "&deploy=1&prjId=" + prjId;
                console.log("newUrl: ",newUrl)
                window.location.href = newUrl;
            }
            if(scriptContext.fieldId == 'custpage_rg'){

                prjId = r.getValue({
                    fieldId: 'custpage_project'
                })
                var rgCount = r.getLineCount({
                    sublistId: 'custpage_project_task_details'
                })
                console.log("RG COUNT: ",rgCount)
                if(rgCount>0) {
                    prjTaskId = r.getCurrentSublistValue({
                        sublistId: 'custpage_project_task_details',
                        fieldId: 'custpage_project_task'
                    })
                    rg = r.getCurrentSublistValue({
                        sublistId: 'custpage_project_task_details',
                        fieldId: 'custpage_rg'
                    })
                    console.log("PRJ ID: ", prjId)
                    console.log("PRJ TASK: ", prjTaskId)
                    console.log("RG: ", rg)
                }
            }
            if(scriptContext.fieldId == 'custpage_employee_check') {
                var slUrl = 'https://3689903-sb1.app.netsuite.com//app/site/hosting/scriptlet.nl?script=783&deploy=1'
                prjId = r.getValue({
                    fieldId: 'custpage_project'
                })
                var rgCount = r.getLineCount({
                    sublistId: 'custpage_project_task_details'
                })
                console.log("RG COUNT: ", rgCount)
                if (rgCount > 0) {
                    prjTaskId = r.getCurrentSublistValue({
                        sublistId: 'custpage_project_task_details',
                        fieldId: 'custpage_project_task'
                    })
                    rg = r.getCurrentSublistValue({
                        sublistId: 'custpage_project_task_details',
                        fieldId: 'custpage_rg'
                    })
                    checkValue = r.getCurrentSublistValue({
                        sublistId: 'custpage_project_task_details',
                        fieldId: 'custpage_employee_check'
                    })
                    console.log("PRJ ID: ", prjId)
                    console.log("PRJ TASK: ", prjTaskId)
                    console.log("RG: ", rg)
                    console.log("checkValue: ", checkValue)
                    oldUrl = slUrl.split('&deploy=' + 1);
                    var newUrl;
                        newUrl = oldUrl[0] + "&deploy=1&prjId=" + prjId;

                    console.log("newUrl: ",newUrl)
                    if(checkValue==true) {
                        window.location.href = newUrl;
                    }
                }
            }
            return true;
        }
        catch (e) {
            console.log("Error @ Field Changed: ",e.name+" : "+e.message)
        }
    }


    /**
     * Validation function to be executed when record is saved.
     *
     * @param {Object} scriptContext
     * @param {Record} scriptContext.currentRecord - Current form record
     * @returns {boolean} Return true if record is valid
     *
     * @since 2015.2
     */
    function saveRecord(scriptContext) {
        try{
            console.log("in save")
            return true;
        }
        catch (e) {
            console.log("Error @ Save Record: ",e.name+" : "+e.message)
        }
    }

    return {
        pageInit: pageInit,
        fieldChanged: fieldChanged,
        saveRecord: saveRecord
    };

});

//JJ SL Suitelet2.js

/**
 * @NApiVersion 2.1
 * @NScriptType Suitelet
 */
define(['N/currentRecord', 'N/error', 'N/https', 'N/record', 'N/runtime', 'N/search', 'N/ui/serverWidget', 'N/url'],
    /**
 * @param{currentRecord} currentRecord
 * @param{error} error
 * @param{https} https
 * @param{record} record
 * @param{runtime} runtime
 * @param{search} search
 * @param{serverWidget} serverWidget
 * @param{url} url
 */
    (currentRecord, error, https, record, runtime, search, serverWidget, url) => {

        function resourceSearch(resource){
            try{
                var jobSearchObj = search.create({
                    type: "job",
                    filters:
                        [
                            ["internalid","anyof",resource],
                            "AND",
                            ["isinactive","is","F"]
                        ],
                    columns:
                        [
                            search.createColumn({
                                name: "internalid",
                                join: "projectResource",
                                label: "Resource ID"
                            }),
                            search.createColumn({
                                name: "entityid",
                                join: "projectResource",
                                label: "Resource Name"
                            }),
                            search.createColumn({name: "jobresourcerole", label: "Project Resource Role"})
                        ]
                });
                var searchResultCount = jobSearchObj.runPaged().count;
                log.debug("jobSearchObj result count",searchResultCount);
                var res = []
                if(searchResultCount>0) {
                    jobSearchObj.run().each(function (result) {
                        // .run().each has a limit of 4,000 results
                        var resourceId = result.getValue({
                            name: "internalid",
                            join: "projectResource"
                        })
                        var resource = result.getValue({
                            name: "entityid",
                            join: "projectResource"
                        })
                        var resourceRole = result.getText({
                            name: "jobresourcerole"
                        })
                        res.push({
                            resourceId: resourceId,
                            resource: resource,
                            resourceRole: resourceRole
                        })
                        return true;
                    });
                }
                return res;
            }
            catch (e) {
                log.debug("Errpr @ Resource Search: ",e.name+" : "+e.message)
            }
        }

        /**
         * Defines the Suitelet script trigger point.
         * @param {Object} scriptContext
         * @param {ServerRequest} scriptContext.request - Incoming request
         * @param {ServerResponse} scriptContext.response - Suitelet response
         * @since 2015.2
         */
        const onRequest = (scriptContext) => {
            try{
                var prjIdParam = scriptContext.request.parameters.prjId
                log.debug("prjIdParam: ",prjIdParam)

                var selectedResources = [];

                var resourceList = resourceSearch(prjIdParam)
                log.debug("resourceList: ",resourceList)

                var form = serverWidget.createForm({
                    title: 'Project'
                });
                if(scriptContext.request.method === 'GET') {
                    var sublistAssignees = form.addSublist({
                        id: 'custpage_assignee_details',
                        type: serverWidget.SublistType.LIST,
                        label: 'Assignee Details'
                    });
                    var assigneeId = sublistAssignees.addField({
                        id: 'custpage_assignee_id',
                        type: serverWidget.FieldType.TEXT,
                        label: 'Assignee ID'
                    })
                    var assigneeName = sublistAssignees.addField({
                        id: 'custpage_assignee_name',
                        type: serverWidget.FieldType.TEXT,
                        label: 'Assignee'
                    })
                    var assigneeRole = sublistAssignees.addField({
                        id: 'custpage_assignee_role',
                        type: serverWidget.FieldType.TEXT,
                        label: 'Assignee Role'
                    })
                    var assigneeCheck = sublistAssignees.addField({
                        id: 'custpage_assignee_check',
                        type: serverWidget.FieldType.CHECKBOX,
                        label: 'Assign'
                    })
                    assigneeCheck.defaultValue = false

                    if(resourceList.length>0){
                        for(var i=0;i<resourceList.length;i++){
                            sublistAssignees.setSublistValue({
                                id: 'custpage_assignee_id',
                                value: resourceList[i].resourceId,
                                line: i
                            })
                            sublistAssignees.setSublistValue({
                                id: 'custpage_assignee_name',
                                value: resourceList[i].resource,
                                line: i
                            })
                            sublistAssignees.setSublistValue({
                                id: 'custpage_assignee_role',
                                value: resourceList[i].resourceRole,
                                line: i
                            })

                        }
                    }

                    form.addSubmitButton({
                        label: 'Submit'
                    })

                    // form.addButton({
                    //     id:'custpage_btn',
                    //     label: 'Submit',
                    //     functionName: resourceAdd
                    // })
                    scriptContext.response.writePage(form);
                }
                if(scriptContext.request.method == "POST"){
                    var count = scriptContext.request.getLineCount({
                        group: 'custpage_assignee_details'
                    })
                    log.debug("COUNT: ",count)
                    if(count>0){
                        for(var i=0;i<count;i++){
                            var checkVal = scriptContext.request.getSublistValue({
                                group: 'custpage_assignee_details',
                                name: 'custpage_assignee_check',
                                line: i
                            });
                            var resId = scriptContext.request.getSublistValue({
                                group: 'custpage_assignee_details',
                                name: 'custpage_assignee_id',
                                line: i
                            });
                            log.debug("resId: ",resId)
                            log.debug("CHECKED VAL: ",checkVal)
                            if(checkVal == 'T'){
                                selectedResources.push(resId)
                            }
                        }
                    }
                }
                log.debug("selectedResources: ",selectedResources)
            }
            catch (e) {
                log.debug("Error @ onREQUEST: ",e.name+" : "+e.message)
            }
        }

        return {onRequest}

    });

Leave a comment

Your email address will not be published. Required fields are marked *