Skip to main content

Building up a scripted REST api list of catalog tasks plus their variables

called via scripted rest endpoint

script include logic:
=======================

getOpenRequests: function() {

        //--done this way due to issues with gliderecord/memory leakage!!
        var responseObj = {};
       
        try {

            //gs.log('1:' + this.LINUX_SERVER_REQ);
            /*test it this way:
               var si= new _ansible_servicerequest();
               var sRes= si.getOpenRequests()
               gs.print('result:\n ' +JSON.stringify(sRes));
            */
            var itemSYSID = this.LINUX_SERVER_REQ;
            var grTasks = new GlideRecord('sc_task');
            grTasks.addActiveQuery();
            grTasks.addQuery('request_item.cat_item=' + itemSYSID);
                                                grTasks.orderBy('number');
            grTasks.query();

            responseObj.numberOfAnsibleTasks = grTasks.getRowCount();

            if (grTasks.getRowCount() > 0) {
                                                               
                while (grTasks.next()) {
var sNum = grTasks.number;
                    //return snNumberList;
                                                                                var taskObj, ritmVariables, variableName;
                    ritmVariables = grTasks.request_item.variables;
                                                                                               
                    taskObj = {};
                    taskObj['field:number'] = this.u_getTaskField(grTasks,'number') ;//--use this method to avoid a weird memory leakage on the GlideRecord which I couldnt quite get to the bottom of...
                                                                                taskObj['field:short_description'] = this.u_getTaskField(grTasks,'short_description') ;//--use this
                                                                               
                                                                                taskObj['field:requestor'] = this.u_getRequestValue_ReqFor(grTasks.request) ;//--use this

                    for (variableName in ritmVariables) {
                        if (ritmVariables.hasOwnProperty(variableName) && ritmVariables[variableName]) { //Make sure the property exists and isn't null or unknown.
                            variableName = variableName.toString(); //Make sure we're all proper strings here.
                            taskObj['variable:' +variableName] = ritmVariables[variableName].getDisplayValue().toString();
                        }
                    }

                    responseObj = this.u_addObjToObj(responseObj, taskObj, 'ansibleTask:' + grTasks. number); 
                }
            }
         
        } catch (ex) {
            gs.logError('ISSUE:' + ex.toString());
        }

        return responseObj;
    },

u_addObjToObj: function(parent, child, name) {
        parent[name] = child;
        return parent; //Note: Does not break pass-by-reference, because we're declaring a new object on each loop on line 39 above.
    },

u_getTaskField: function (grTask, fieldName){
return (grTask.getValue(fieldName));
},

u_getRequestValue_ReqFor: function(sysid){
//--insert code to retrieve the requested for from REQ record, pass in task.request as param
}

Comments

Popular posts from this blog

URL link in addInfoMessage

var ga=new GlideAjax('gld_HR_ajax'); ga.addParam('sysparm_name', 'checkEmployeeNumber_hrProfile'); ga.addParam('sysparm_hrprofilenumber', g_form.getValue('number')); ga.addParam('sysparm_employeenumber', newValue); ga.getXMLAnswer(function(answer) { if (answer!='undefined' && answer!=''){ var navURL="<a style='text-decoration:underline;color:blue' href=hr_profile.do?sysparm_query=number=" + answer + ">" + answer + "</a><img width='3' src='images/s.gif'/>"; var sMsg='The employee number entered already exists on another HR Profile ' + navURL; //alert(sMsg); g_form.showErrorBox('employee_number', 'error - please check'); g_form.addInfoMessage(sMsg); } });

GlideRecord setValue

setValue(String name, Object value) Sets the specified field to the specified value. Normally a script would do a direct assignment, for example,  gr.category = value . However, if in a script the element name is a variable, then  gr.setValue(elementName, value)  can be used. When setting a value, ensure the data type of the field matches the data type of the value you enter. This method cannot be used on journal fields. If the value parameter is null, the record is not updated, and an error is not thrown https://developer.servicenow.com/app.do#!/api_doc?v=madrid&id=r_GlideRecord-setValue_String_Object