- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
01-27-2021 09:01 AM
Hello, Requesters would be selecting the users using List Collector and requirement is to copy the email addresses of selected users with comma separated (Right Side of List collector) to another variable (Multi Line Text Variable). Text Variable to make it read only and visible to Fulfillers.
I have tried creating script by looking some past examples but seems its not working. Any suggestions on what seems to be wrong please
Variable Details:
Client Script
Type - onChange, Variable Name - select_users //list collector variable
function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || newValue == '') {
return;
}
if(newValue === '') {
g_form.clearValue('copied_from_list');
}
var gaPhone = new GlideAjax('getEmailAddress');
gaPhone.addParam('sysparm_name', 'get_email');
gaPhone.addParam('sysparm_users', newValue);
gaPhone.getXMLAnswer(_handleResponse);
function _handleResponse(response) {
var answer = response;
g_form.setValue('copied_from_list', answer);
}
}
Script Include - Client Callable: Checked
var getEmailAddress = Class.create();
getEmailAddress.prototype = Object.extendsObject(AbstractAjaxProcessor, {
get_email : function() {
var userArr = this.getParameter('sysparm_users').split(',');
var emailArr = [];
for(var i = 0; i < userArr.length; i++) {
var grUser = new GlideRecord('sys_user');
if(grUser.get(userArr[i])) {
emailArr.push(grUser.getValue('email'));
}
}
emailArr.join();
return emailArr.toString();
},
type: 'getEmailAddress'
});
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
01-28-2021 06:39 AM
Hi Vinay,
then you can use Run Script in the workflow of catalog item
Updated: to remove current.update()
var userArr = current.variables.select_users.toString().split(',');
var emailArr = [];
for(var i = 0; i < userArr.length; i++) {
var grUser = new GlideRecord('sys_user');
if(grUser.get(userArr[i].toString())) {
emailArr.push(grUser.getValue('email'));
}
}
var values = emailArr.join();
current.variables.copied_from_list = values;
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
01-27-2021 09:08 AM
Try below
Client script:
function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || newValue == '') {
return;
}
if(newValue === '') {
g_form.clearValue('copied_from_list');
}
var gaPhone = new GlideAjax('getEmailAddress');
gaPhone.addParam('sysparm_name', 'get_email');
gaPhone.addParam('sysparm_users', newValue);
gaPhone.getXMLAnswer(handleResponsefn);
function handleResponsefn(response) {
var answer = response.responseXML.documentElement.getAttribute('answer');
g_form.setValue('copied_from_list', answer);
}
}
Script include:
var getEmailAddress = Class.create();
getEmailAddress.prototype = Object.extendsObject(AbstractAjaxProcessor, {
get_email : function() {
var userArr = this.getParameter('sysparm_users');
userArr = userArr.split(',');
var emailArr = [];
for(var i = 0; i < userArr.length; i++) {
var grUser = new GlideRecord('sys_user');
if(grUser.get(userArr[i])) {
emailArr.push(grUser.getValue('email'));
}
}
emailArr.join();
return emailArr.toString();
},
type: 'getEmailAddress'
});
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
01-27-2021 09:22 AM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
01-27-2021 09:26 AM
Place alert and see what response getting from the script include.
function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || newValue == '') {
return;
}
if(newValue === '') {
g_form.clearValue('copied_from_list');
}
var gaPhone = new GlideAjax('getEmailAddress');
gaPhone.addParam('sysparm_name', 'get_email');
gaPhone.addParam('sysparm_users', newValue);
gaPhone.getXMLAnswer(handleResponsefn);
function handleResponsefn(response) {
var answer = response.responseXML.documentElement.getAttribute('answer');
alert(answer);
g_form.setValue('copied_from_list', answer);
}
}
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
01-27-2021 10:01 AM
Sorry, I didn't realize that you are using synchronous method, try the below asynchronous type method
function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || newValue == '') {
return;
}
if(newValue === '') {
g_form.clearValue('copied_from_list');
}
var gaPhone = new GlideAjax('getEmailAddress');
gaPhone.addParam('sysparm_name', 'get_email');
gaPhone.addParam('sysparm_users', newValue);
gaPhone.getXML(handleResponsefn);
function handleResponsefn(response) {
var answer = response.responseXML.documentElement.getAttribute('answer');
g_form.setValue('copied_from_list', answer);
}
}