auto populating fields from a reference in UI Page

yundlu316
Kilo Guru

I created a UI Page that incorporates a reference field using <g:ui_reference>.   Field 13 in the below screenshot uses this code:  

<label> 13. Name of family member $[SP]<i>(last, first, middle initial)</i></label>

<g:ui_reference name="family_member_1" id="family_member_1" table="hr_beneficiary" query="active=true" completer="AJAXTableCompleter" columns="employee; beneficiary_contact.relationship" />

find_real_file.png

When a user chooses a beneficiary from the reference field, I want 14. SSN and 15. DOB to autopopulate.   If this was a regular Record Producer, I would have written an onChange client script on 13. Name of family member, but since this form is coded as a UI Page, I can't utilize g_form.   How would I go about autopopulating fields based on the reference chosen?

Thanks!

1 ACCEPTED SOLUTION

You will have to add toString() to all the elements in the object as shown below. Copy the function as is in to your script include and you are good to go



getDetails: function(){


  var obj = {};


  var usr= new GlideRecord('hr_beneficiary');


  usr.addQuery('employee',gs.getUserID());


  usr.addQuery('sys_id',this.getParameter('sysparm_id'));


  usr.query();


  if(usr.next()){


  var name = usr.beneficiary_contact.name.toString();


  var arr2 = name.split(" ") ;


  var name2 = arr2[1] + ", " + arr2[0];


  obj.beneficiary_name = name2;


  obj.beneficiary_ssn = usr.getValue('ssn');


  obj.beneficiary_date_of_birth = usr.getValue('date_of_birth');


  obj.beneficiary_email = usr.beneficiary_contact.email.toString();


  obj.beneficiary_mobile=usr.beneficiary_contact.mobile_phone.toString();


  obj.beneficiary_relationship=usr.beneficiary_contact.relationship.toString();


  obj.beneficiary_percentage=usr.getValue('percentage');


  obj.beneficiary_address=usr.beneficiary_contact.address.toString();


  }


  var data = JSON.stringify(obj);


  return data;


  },


View solution in original post

26 REPLIES 26

yundlu316
Kilo Guru

yea i am


Is your UI page and script include both in the same scope?


yes it is


Okay, can you just create a script inlcude in your scope so that all the function definitions will be autopopulated. Then just add this function to the script include



getDetails: function(){


  var obj = {};


  var usr= new GlideRecord('hr_beneficiary');


  usr.addQuery('employee',gs.getUserID());


  usr.addQuery('sys_id',this.getParameter('sysparm_id'));


  usr.query();


  if(usr.next()){


  var name = usr.beneficiary_contact.name;


  var arr2 = name.split(" ") ;


  var name2 = arr2[2] + ", " + arr2[1];


  obj.beneficiary_name = name2;


  obj.beneficiary_ssn = usr.getValue('ssn');


  obj.beneficiary_date_of_birth = usr.getValue('date_of_birth');


  obj.beneficiary_email = usr.beneficiary_contact.email;


  obj.beneficiary_mobile=usr.beneficiary_contact.mobile_phone;


  obj.beneficiary_relationship=usr.beneficiary_contact.relationship;


  obj.beneficiary_percentage=usr.getValue('percentage');


  obj.beneficiary_address=usr.beneficiary_contact.address;


  }


  var data = JSON.stringify(obj);


  return data;


  },


Thank you so much for helping me through this Abhinay, the code now runs, but the elements that require dot-walking still do not populate.   Does this have something to with getValue not being present for the dot-walked values?   For example the email code is obj.beneficiary_email = usr.beneficiary_contact.email; should it be   obj.beneficiary_email = usr.getValue('beneficiary_contact.email');?