Hide all empty field from a form

xif1
Mega Expert

Hello SN community,

I'm actually trying to hide all empty fields from a from, I know a simple way with a client script like :

function onLoad() {

    if (g_form.getValue('user_name') == '')

              g_form.setDisplay('user_name', false);

}

It's perfectly working but when you have 40 fields, it the worst maintenable things ever.

I was wondering if there is a method to get all the name fields in a form, to handle this action in a while statement.

Regards,

1 ACCEPTED SOLUTION

manikorada
ServiceNow Employee
ServiceNow Employee

Romain,



You need to do a GlideAjax for this.



Create a Script Include as:


Name : FieldsAjax


Client Callable : True:


Script:


var FieldsAjax = Class.create();


FieldsAjax.prototype = Object.extendsObject(AbstractAjaxProcessor, {


  getFieldsEmpty: function() {


  var emptyFields = '';


  var gr = new GlideRecord(<<table_name>>);


  gr.get(this.getParameter('sysparm_id');


  var fields = new GlideRecordUtil().getFields(gr);


  for (var num = 0; num < fields.length; num++) {


  var field_name = fields[num];


  if(gr[field_name] == '')


  {


  if(emptyFields.length == 0)


  {


  emptyFields = field_name;


  }


  else


  {


  emptyFields += ',' + field_name;


  }


  }


  }


  return emptyFields;


  });




Now have a onLoad Client Script something like:



var ga = new GlideAjax('FieldsAjax');


ga.addParam('sysparm_name','getFieldsEmpty');


ga.addParam('sysparm_id', g_form.getUniqueValue());


ga.getXMLWait();


var fields = ga.getAnswer();


var fieldArray = fields.split(',');


for(var i=0 ; i < fieldArray.length; i++)


{


g_form.setDisplay(fieldArray[i],false);


}


View solution in original post

2 REPLIES 2

manikorada
ServiceNow Employee
ServiceNow Employee

Romain,



You need to do a GlideAjax for this.



Create a Script Include as:


Name : FieldsAjax


Client Callable : True:


Script:


var FieldsAjax = Class.create();


FieldsAjax.prototype = Object.extendsObject(AbstractAjaxProcessor, {


  getFieldsEmpty: function() {


  var emptyFields = '';


  var gr = new GlideRecord(<<table_name>>);


  gr.get(this.getParameter('sysparm_id');


  var fields = new GlideRecordUtil().getFields(gr);


  for (var num = 0; num < fields.length; num++) {


  var field_name = fields[num];


  if(gr[field_name] == '')


  {


  if(emptyFields.length == 0)


  {


  emptyFields = field_name;


  }


  else


  {


  emptyFields += ',' + field_name;


  }


  }


  }


  return emptyFields;


  });




Now have a onLoad Client Script something like:



var ga = new GlideAjax('FieldsAjax');


ga.addParam('sysparm_name','getFieldsEmpty');


ga.addParam('sysparm_id', g_form.getUniqueValue());


ga.getXMLWait();


var fields = ga.getAnswer();


var fieldArray = fields.split(',');


for(var i=0 ; i < fieldArray.length; i++)


{


g_form.setDisplay(fieldArray[i],false);


}


Thank you Mani Kanta Korada, it works perfectly.


I got much more than I expected, appreciate a lot,




Have a good day !