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

Hi Emyrold,



How about this?



g_form.setValue('assignment_group', g_scratchpad.sn_developers_group, 'SN Developers');



Thanks


Srini


Yes that worked but then it defeats the point of trying to not store any static values in the client script...


Hi Emyrold,



I doubt on your reference qualifier. Would you be able to select the 'SN developers' Group manually for the assignment_group field



Thanks


Srini


Hi Pradeep and Srini,



I just ran another test where I reconfigured things a little.



I changed the system properties to contain single values instead of a string with two parameters and it is working.



BR:


(function executeRule(current, previous /*null when async*/) {


  g_scratchpad.sn_developers_group_sys_id = gs.getProperty('x_10032_gtd_dev.sn.developers.group');   //with value: c0c602364f55d20036988ab18110c7f8   **no quotes


  g_scratchpad.sn_developers_group_name = gs.getProperty('x_10032_gtd_dev.sn.story.owner.group'); //with value:   SN Developers **no quotes


})(current, previous);



client script:


g_form.setValue('assignment_group', g_scratchpad.sn_developers_group_sys_id, g_scratchpad.sn_developers_group_name);



Question: do you think I should be able to have both the first and second parameter in the one property and maybe it is just quoting things when I shouldn't or something like that?



Thanks,


-e


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