auto-displaying fields within a record producer based on previous user input

nathantenaglia
Tera Expert

Hi everyone,

I've created a record producer that's using the sc_cat_item view which obviously has some limitations in what is and isn't supported in comparison to the traditional record producer view.

I'm trying to create some variables that are saved to the sys_user table and then auto-display for the users the next time they open the form (based on feedback, saving them time from having to add the same information each time).

find_real_file.png

I've got a script within the record producer that saves this data to the associated sys_user fields I've previously added:

find_real_file.png

Here's an example of the completed sys_user fields:

find_real_file.png

The problem is that my record producer isn't auto-displaying these custom fields (it does work for the display name, phone number and email address though)

find_real_file.png

I'm really stuck. Any idea?

1 ACCEPTED SOLUTION

From this last screenshot, it seems that you might want to use this:


gs.getUser().getRecord().getValue('utas_building');


Try once, if that works.


If it doesn't, please give a screenshot of your 'sys_user' table columns and labels.


View solution in original post

16 REPLIES 16

It should work. Just make sure:


1. You are using correct 'fieldname' and not label.


Screen Shot 2016-10-02 at 3.10.27 PM.png


2. These fields(u_building etc.) has some values for the current logged in user.


3. If you have updated these values recently, then that change won't show up as it will use cached record. So, after updating some value in the concerned record, make sure to logout and then login again.



Try these things, it should work. I tried and its working fine for me.


From this last screenshot, it seems that you might want to use this:


gs.getUser().getRecord().getValue('utas_building');


Try once, if that works.


If it doesn't, please give a screenshot of your 'sys_user' table columns and labels.


Thanks Deepak - you're a champion. I'll mark your comment as the correct answer.



Do you have any recommendations on how to configure onchange and onload scripts (using the u_building value as the example)



So that whenever the person whose logged in changes the userID then it updates all other details automatically. And perhaps avoids the cache issue.


Glad it worked for you.


For onchange thing,


first create a script include as:


Script:


var UserUtil = Class.create();


UserUtil.prototype = Object.extendsObject(AbstractAjaxProcessor, {


  getUserDetails: function() {


  var gr = new GlideRecord('sys_user');


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


  var res = this.newItem('user');


  res.setAttribute('phone', gr.phone + '');//Change gr.phone to gr.u_building or gr.utas_building whatever worked for you.


  return res;


  }


});


Screen Shot 2016-10-02 at 3.54.54 PM.png


Now, create an onChange Catalog client script on 'caller_id'variable as,


Script:


function onChange(control, oldValue, newValue, isLoading) {


    if (isLoading || newValue == '') {


          return;


    }


    var ga = new GlideAjax('UserUtil');


  ga.addParam('sysparm_name', 'getUserDetails')


  ga.addParam('sysparm_user_id', g_form.getValue('caller_id'));


  ga.getXML(setDetails);



  function setDetails(response) {


  var result = response.responseXML.getElementsByTagName("user");


  g_form.setValue('u_building', result[0].getAttribute('phone'));


  alert(result[0].getAttribute('phone'));


  }


}


Screen Shot 2016-10-02 at 3.54.42 PM.png


It will work.


Also, you can send as many parameters as you want from Script include and then use them in client script.


Update if you need more help.