Showing values of a field according to the values of another field using Suitelet

Scenario: There can be one or more tasks can be for a project. Here We are listing projects and It has to list the project tasks of selected project using a suitelet.

Solution:

//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;
            }
            
            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
    };
});

Leave a comment

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