- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎05-11-2020 10:30 AM
Hi Forum,
Thanks in advance,
Currently I am working on some record producer and dealing with on Change client script.
I have to do something like this
On record producer we have two fields 1 caller (read only) and 2 requester so whenever form loading we are displaying caller related user info in the other variables and if user select the requester field we are populating the user information based on requester field, now if user clear the values from requester field we have to display caller field user information.
How to achieve this.
Solved! Go to Solution.
- Labels:
-
Scripting and Coding
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎05-12-2020 07:21 AM

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎05-11-2020 10:35 AM
Hi,
You need to have onChange() client script that runs on chagne of requestor field. If it changes to empty you can set the value of caller field.
Have you written some script for the same. If so kindly share so that it can be updated.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎05-11-2020 10:47 AM
Thanks for replay, this is the code I am using now
function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || newValue == '') {
return;
}
//alert("old value: "+oldValue);
//Type appropriate comment here, and begin script below
var userDetails= new GlideAjax('userDetailsScriptIncludeName');
userDetails.addParam('sysparm_name', 'getUserDetailsFunction');
userDetails.addParam('sysparam_parameterValue', g_form.getValue('caller_id'));
alert("user :"+ user_details);
userDetails.getXML(userCallBackFunction);
function userCallBackFunction(serverResponse){
//var answer=response.responseXML.documentElement.getAttribute("answer");
var userInfo=serverResponse.responseXML.getElementsByTagName('result');
for(var i=0;i<userInfo.length;i++){
var empID = userInfo[0].getAttribute('employee_id');
var address = userInfo[0].getAttribute('address');
var empTitle = userInfo[0].getAttribute('title');
var costCenter = userInfo[0].getAttribute('cost_center');
var stationID = userInfo[0].getAttribute('station_id');
var phone = userInfo[0].getAttribute('phone');
var city = userInfo[0].getAttribute('city');
var state = userInfo[0].getAttribute('state');
var zip = userInfo[0].getAttribute('zip');
var country = userInfo[0].getAttribute('country');
var email = userInfo[0].getAttribute('email');
//alert('name: '+ uName+"\address"+uAddress+"\comp"+uComp);
g_form.setValue("employee_id", empID);
g_form.setValue("address", address );
g_form.setValue("title", empTitle);
g_form.setValue("cost_center", costCenter);
g_form.setValue("station_id", stationID);
g_form.setValue("phone", phone);
g_form.setValue("city", city);
g_form.setValue("state", state );
g_form.setValue("zip", zip);
g_form.setValue("country", country);
g_form.setValue("email", email);
}
//alert ("user dept: "+answer);
}
}
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎05-11-2020 11:27 AM
Hi, This can be done through a onChange Client Script and a Script Include. I am assuming the Caller field is already populated with logged in user or some other user as you mentioned it is a read only field.
For Testing purpose I have 4 variables on catalog form "Caller" and "Requester" and I am populating "Email" and "Department".
So make sure you edit the below script as per your variable/field names
Client Script:
function onChange(control, oldValue, newValue, isLoading) {
if (isLoading) {
var getUserDetailsOnLoad = new GlideAjax('getUserDetails');
getUserDetailsOnLoad.addParam('sysparam_name', 'getUserDetailsMethod');
getUserDetailsOnLoad.addParam('sysparm_user', g_form.getValue('caller_id'));
getUserDetailsOnLoad.getXML(processUserDetails);
}
//Type appropriate comment here, and begin script below
var user;
if(newValue == ''){
user = g_form.getValue('caller_id'); //Caller ID
}else{
user = newValue; //Requester ID
}
var getUserDetails = new GlideAjax('getUserDetails');
getUserDetails.addParam('sysparm_name', 'getUserDetailsMethod');
getUserDetails.addParam('sysparm_user', user);
getUserDetails.getXML(processUserDetails);
}
function processUserDetails(response){
var answer = response.responseXML.documentElement.getAttribute('answer');
if(answer){
var receivedObj = JSON.parse(answer);
g_form.setValue('user_email', receivedObj.email);
g_form.setValue('user_dept', receivedObj.dept);
}
}
Client Callable Script Include:
var getUserDetails = Class.create();
getUserDetails.prototype = Object.extendsObject(AbstractAjaxProcessor, {
getUserDetailsMethod : function(){
var userObj= this.getParameter('sysparm_user');
var arr = {};
var user = new GlideRecord('sys_user');
user.get(userObj);
arr.email = user.email.toString();
arr.dept = user.department.getDisplayValue();
return JSON.stringify(arr);
},
type: 'getUserDetails'
});
On Load of form: Caller fields displayed:
On Selection of Requester: requester fields displayed
If Requester is made blank; Caller fields displayed again-
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎05-11-2020 02:52 PM
Im not able to find the issue where it is, my form not loading any user details, event for change too,
can you help me where I am having issue
this is the client script on change for requester
function onChange(control, oldValue, newValue, isLoading) {
if (isLoading) {
//Type appropriate comment here, and begin script below
var userDetailsOnload = new GlideAjax('getUserDetails');
userDetailsOnload.addParam('sysparm_name', 'getUserDetailsMethod');
userDetailsOnload.addParam('sysparm_user', g_form.getValue('caller'));
alert("caller: "+ g_form.getValue('caller'));
userDetailsOnload.getXML(processUserDetails);
}
var user_details;
if(newValue == ""){
//alert("new value: "+newValue);
user_details = g_form.getValue("caller");
//alert("from if: "+ user_details);
}
else{
user_details = newValue;
alert("from else: "+user_details);
}
var userDetails = new GlideAjax('getUserDetails');
userDetails.addParam('sysparm_name', 'getUserDetailsMethod');
userDetails.addParam('sysparm_user', user_details);
userDetails.getXML(processUserDetails);
}
function processUserDetails(response){
var answer = response.responseXML.documentElement.getAttribute("answer");
//var userInfo=serverResponse.responseXML.getElementsByTagName('result');
if(answer){
alert("from call back :"+ user_details);
var receivedObj = JSON.parse(answer);
g_form.setValue("employee_id", receivedObj.employee_id);
g_form.setValue("title", receivedObj.title);
g_form.setValue("cost_center", receivedObj.cost_center);
g_form.setValue("station_id", receivedObj.station_id);
g_form.setValue("phone", receivedObj.phone);
g_form.setValue("address", receivedObj.address);
g_form.setValue("city", receivedObj.city);
g_form.setValue("state", receivedObj.state );
g_form.setValue("zip", receivedObj.zip);
g_form.setValue("country", receivedObj.country);
g_form.setValue("email", receivedObj.email);
}
//alert ("user dept: "+answer);
}
Script include code
var getUserDetails = Class.create();
getUserDetails.prototype = Object.extendsObject(AbstractAjaxProcessor, {
getUserDetailsMethod: function(){
var userArr = {};
var uDetails= this.getParameter('sysparm_user');
var getUser= new GlideRecord('sys_user');
getUser.get(uDetails);
userArr.employee_id = getUser.user_name;
userArr.title = getUser.title;
userArr.cost_center = getUser.cost_center.getDisplayValue();
userArr.station_id = getUser.building.getDisplayValue();
userArr.phone = getUser.mobile_phone;
userArr.address = getUser.u_address;
userArr.city = getUser.city;
userArr.state = getUser.state;
userArr.zip = getUser.zip;
userArr.country = getUser.country;
userArr.email = getUser.email.toString();
JSON.stringify(userArr);
},
type: 'getUserDetails'
});