auto fill in fields with info from selected RITM

asd22
Tera Contributor

Hello.

 

I want two fields in a module view to be auto filled in with information from RITM, when a RITM is selected 

find_real_file.png

The info from RITM im trying to get is "requested_for" And "u_uh_nr"

uh_nr is the PO number in the RITM.

So when a RITM is selected in request line, it takes the info from either or both fields and fills it out.

Right now it only fills out if the RITM got both fields, so if a RITM only has info in the "requested_for" field it wont fill it out when selected. But if it has both "u_uh_nr" and "requested_for" it fills out the info into the fields of the view.

So im trying to get it to auto fill in those two fields if a RITM has either 1 or both of the fields.

CLIENT SCRIPT:

function onChange(control, oldValue, newValue, isLoading, isTemplate) {
if (isLoading || newValue === '') {
return;
}

var ga = new GlideAjax('NyHardware'); //
ga.addParam('sysparm_name', 'getInformation');
ga.addParam('sysparm_ritm', newValue);
ga.getXML(parseUserResponse);

function parseUserResponse(response) {
var answer = response.responseXML.documentElement.getAttribute("answer");
var obj = JSON.parse(answer);

 if (obj.var1) {
g_form.setValue('po_number', obj.var1);
}
if (obj.var2) {
g_form.setValue('assigned_to', obj.var2);
}

}
}

 

SCRIPT INCLUDE:

var NyHardware = Class.create();
NyHardware.prototype = Object.extendsObject(AbstractAjaxProcessor, {

getInformation: function() {
var obj = {};

var item = this.getParameter('sysparm_ritm');
var grScReqItem = new GlideRecord('sc_req_item');
grScReqItem.get(item);
var var1 = grScReqItem.u_uh_nr.toString();
var var2 = grScReqItem.requested_for;
obj.var1 = String(var1);
obj.var2 = String(var2);

return JSON.stringify(obj);

},

type: 'NyHardware'

});

 

4 REPLIES 4

Brad Bowman
Kilo Patron
Kilo Patron

Always force sys_ids to string to prevent unexpected results.  If it still doesn't work for 1 field or the other, try initializing var1 and var2 as empty strings in the Script Include, to be sure there is something to return.

var var1 = '';
var var2 = '';
if (grScReqItem.u_uh_nr) {
    var1 = grScReqItem.u_uh_nr.toString();
}
if (grScReqItem.requested_for) {
    var2 = grScReqItem.requested_for.toString();
}

thanks for  the reply i will test this and come back

I tried with your edit:

var NyHardware = Class.create();
NyHardware.prototype = Object.extendsObject(AbstractAjaxProcessor, {

getInformation: function() {
var obj = {};

var item = this.getParameter('sysparm_ritm');
var grScReqItem = new GlideRecord('sc_req_item');
grScReqItem.get(item);
var var1 = '';
var var2 = '';
if (grScReqItem.u_uh_nr) {
var1 = grScReqItem.u_uh_nr.toString();
}
if (grScReqItem.requested_for) {
var2 = grScReqItem.requested_for.toString();
}

return JSON.stringify(obj);

},

type: 'NyHardware'

});

 

But this did not work. even if the RITM had both fields it did not auto fill in the information into the view fields

I was suggesting only editing those lines.  The full script would look like this:

var NyHardware = Class.create();
NyHardware.prototype = Object.extendsObject(AbstractAjaxProcessor, {

 getInformation: function() {
 var obj = {};
 var var1 = '';
 var var2 = '';

 var item = this.getParameter('sysparm_ritm');
 var grScReqItem = new GlideRecord('sc_req_item');
 if (grScReqItem.get(item)) {
  if (grScReqItem.u_uh_nr) {
    var1 = grScReqItem.u_uh_nr.toString();
  }
  if (grScReqItem.requested_for) {
    var2 = grScReqItem.requested_for.toString();
  }
 }

 obj.var1 = String(var1);
 obj.var2 = String(var2);

 return JSON.stringify(obj);
},

type: 'NyHardware'
});