- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-12-2020 05:01 AM
Hi All,
I have one cat item with 4 fields. Req for (List Collector) & UserId, Dept, Title (Multiline Text)
Please have a look below.
I will select Abel Tuter first in list collector, then it should populate corresponding values in the below three fields. After that i will select another user Abraham Lincoln, the it should populate corresponding values in below three fields with comma separated to the existing.
How can i achieve this. Here is my code, it is working for single selection not for multiple.
Client Script :
function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || newValue == '') {
return;
}
var getReqUser = g_form.getValue('requestd_for');
var ga = new GlideAjax('Populate_dept');
ga.addParam('sysparm_name', 'getUserDetails');
ga.addParam('sysparm_user_id', getReqUser);
ga.getXML(HelloWorldParse);
function HelloWorldParse(response) {
alert('In');
var answer = response.responseXML.documentElement.getAttribute("answer").split(',');
alert(answer);
g_form.setValue('uId', answer[0]);
g_form.setValue('ttle', answer[1]);
g_form.setValue('deprtmnt', answer[2]);
}
}
Script Include :
var Populate_dept = Class.create();
Populate_dept.prototype = Object.extendsObject(AbstractAjaxProcessor, {
getUserDetails: function() {
var userr = this.getParameter('sysparm_user_id');
var gr = new GlideRecord('sys_user');
gr.addQuery('sys_id', userr);
gr.query();
if (gr.next()) {
gs.log('Hi Sira');
return gr.user_name + ',' + gr.title + ',' + gr.department.toString();
}
},
type: 'Populate_dept'
});
Regards,
Sirraj
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-12-2020 06:23 AM
Even though you can't select multiple values at one time via this portal interface, the variable is still a list collector that is storing multiple values, so the script has to accommodate that. The below client script will work.
function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || newValue == '') {
return;
}
var getReqUser = g_form.getValue('requestd_for');
var ga = new GlideAjax('Populate_dept');
ga.addParam('sysparm_name', 'getUserDetails');
ga.addParam('sysparm_user_id', getReqUser);
ga.getXML(HelloWorldParse);
function HelloWorldParse(response) {
var answer = response.responseXML.documentElement.getAttribute("answer");
answer = JSON.parse(answer);
g_form.setValue('uId', answer.user);
g_form.setValue('ttle', answer.title);
g_form.setValue('deprtmnt', answer.dept);
}
}
and the script include
var Populate_dept = Class.create();
Populate_dept.prototype = Object.extendsObject(AbstractAjaxProcessor, {
getUserDetails: function() {
var obj = {};
obj.user = '';
obj.title = '';
obj.dept = '';
var userr = this.getParameter('sysparm_user_id');
var gr = new GlideRecord('sys_user');
gr.addQuery('sys_id', 'IN', userr);
gr.query();
while (gr.next()) {
if(obj.user == ''){
obj.user = gr.user_name.toString();
}
else{
obj.user = obj.user + ',' + gr.user_name.toString();
}
if(obj.title == ''){
obj.title = gr.title.toString();
}
else{
obj.title = obj.title + ',' + gr.title.toString();
}
if(obj.dept == ''){
obj.dept = gr.department.name.toString();
}
else{
obj.dept = obj.dept + ',' + gr.department.name.toString();
}
}
return JSON.stringify(obj);
},
type: 'Populate_dept'
});
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-12-2020 06:36 AM
Hi,
No worries; Do let us know the update
Regards
Ankur
Ankur
✨ Certified Technical Architect || ✨ 9x ServiceNow MVP || ✨ ServiceNow Community Leader
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-12-2020 07:19 AM
But that requirement got changed to this. There all the fields are list collector, but currently we kept one field "list collector" and other variables are "multiline text"
Regards,
Sirraj
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-12-2020 05:17 AM
for multiple values you need array or object....
Example take the below example where I populated multiple values
Script Include
var UserInfo = Class.create();
UserInfo.prototype = Object.extendsObject(AbstractAjaxProcessor, {
getUserInfo:function()
{
gs.log('Inside Script Include');
var obj = {};
var user = this.getParameter('sysparm_usr');
var gu = new GlideRecord('sys_user');
gu.addQuery('sys_id',user);
gu.query();
if(gu.next())
{
obj.title = gu.getValue('title');
obj.email = gu.getValue('email');
}
gs.addInfoMessage('Therefore the manager is '+gu.title+' and country is'+gu.email +'value inside ject'+obj);
var str = JSON.stringify(obj);
return str;
},
type: 'UserInfo'
});
Client Script :
function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || newValue == '') {
return;
}
var uid = newValue;
g_form.addInfoMessage(uid);
var ga = new GlideAjax('UserInfo');
ga.addParam('sysparm_name','getUserInfo');
ga.addParam('sysparm_usr',uid);
g_form.addInfoMessage('Hurray');
ga.getXML(test);
function test(response){
var user = response.responseXML.documentElement.getAttribute("answer");
user = JSON.parse(user);
if(user != null)
{
g_form.setValue('title',user.title);
g_form.setValue('email',user.email);
}
}
}
Mark my ANSWER as CORRECT and HELPFUL if it helps
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-12-2020 05:23 AM
Hi Creativethinker,
My question is different. Please see the response which i gave to brad.
Regards,
Sirraj