On Change Client script Caller or Requested for

Devi16
Tera Contributor

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. 

1 ACCEPTED SOLUTION

Community Alums
Not applicable

Hi,

 

On the client script, have you set the 'UI Type' to All?

 

find_real_file.png

View solution in original post

7 REPLIES 7

Jaspal Singh
Mega Patron
Mega Patron

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.

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);
}
}

Community Alums
Not applicable

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:

find_real_file.png

 

On Selection of Requester: requester fields displayed

find_real_file.png

 

If Requester is made blank; Caller fields displayed again-

find_real_file.png

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'
});