Join the #BuildWithBuildAgent Challenge! Get recognized, earn exclusive swag, and inspire the ServiceNow Community with what you can build using Build Agent.  Join the Challenge.

simple glideAjax in scoped app killing me

emyrold
Giga Expert

I'm building a small little custom app and the requirement needs me to auto set certain groups based on state.

typically I would do this with assignment rules but I have to also do other things that cannot be done with rules.

That said, I am leveraging UI Policy (if true or if false script blocks).

I have created a glide ajax Script Include in the new custom application scope with client callable checked.

I have created three system properties + system properties category and Module to display the properties in the application.

I have created a UI Policy with condition (state = draft) and then in the execute if true script block I have written a fairly simple glideAjax script.

The issue seems to be with parsing the result.   If I gs.warn() on the script include it correctly logs what I want just before calling "return" to send the results back to the client.

Here is the UI Policy Script:

function onCondition() {

  try {

  g_form.clearValue('assigned_to');

  g_form.setDisplay('assigned_to', false);

  var ga = new GlideAjax('u_docit_ajax');

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

  ga.addParam('sysparm_property', 'x_10032_gtd_dev.sn.developers.group');

  ga.getXML(myCallBack);

  }

  catch(err) {

  console.log(err);

  }

}

function myCallBack(response) {

  var answer = response.responesXML.documentElement.getAttribute("answer");

  alert('my answer is: ' + answer);

  //*** g_form.setValue('fieldname', 'sys_id', 'name') ***//

  //g_form.setValue('assigned_to', answer); //answer is coming back as: 'c0c602364f55d20036988ab18110c7f8', 'SN Developers'

}

Here is my Script Include:

var u_docit_ajax = Class.create();

u_docit_ajax.prototype = Object.extendsObject(global.AbstractAjaxProcessor, {

//u_docit_ajax.prototype = Object.extendsObject(x_10032_gtd_dev.u_docit_ajax.AbstractAjaxProcessor, {

// u_docit_ajax.prototype = Object.extendsObject(AbstractAjaxProcessor, {

  /*

  * @getGSDProperties - GlideAjax function called from client script

  * @sysparm_property - This will be the sys_parameter name passed in from the client

  * @returns - The value of the given property

  */

  getGSDProperties: function() {

  var sysProp         = this.getParameter('sysparm_property');

  gs.warn('***DEBUG: gs.getProperty(sysProp) is: ' + gs.getProperty(sysProp));

  return gs.getProperty(sysProp);

  }

});

Here is an error in the system log when the Script Include is processing:

GlideAjaxError_01.png

And here is a Java console error when the client-side codes runs when form loads:

GlideAjaxError_02.PNG

1 ACCEPTED SOLUTION

HI Emyrold,



You need to have 2 properties or You need to split the property into display name and sys_id and   pass them separately for the   setValue method.



Hope this helps



Thanks


Srini


View solution in original post

26 REPLIES 26

yes, That works also for me.   I guess it was the use of the second parameter that was messing me up.



So I guess it begs the question. Is it best practice to provide both sys_id and display name of the referenced record or just the single parameter of the sys_id?



You both have been very helpful, I wish there was a mechanism for marking both your responses as correct.



Thanks so much!



-Erik


Perfect


I think sys_id should be fine as the display value will not allow you to setup at client side.