Interested in a ServiceNow event built for developers? Registration for now[dev]26 is officially open!

List Collector - Email Address

Mark94
Kilo Expert

Hi,

I have a catalog item with a list collector variable. It's listing all the users in the sys_user table. I want it to collect the email addresses of all the users selected.

I thought this could be done by adding something into the "reference qual" or "Variable Attributes" fields, but I have so far been unable to find a way.

Any ideas?

Many thanks,

Mark.

 

1 ACCEPTED SOLUTION

Manas Kandekar
Kilo Guru

Hi

Have you tried onChange client script and script include to achieve this?

find_real_file.png

 

find_real_file.png

 

If my answer helped you in any way, please then mark it correct and helpful.

Kind regards,
Manas

View solution in original post

6 REPLIES 6

Alok Ranjan Das
Tera Guru

Hi Mark,

You can have a look on the below thread with similar requirement.

https://community.servicenow.com/community?id=community_question&sys_id=37e89dfddbfd630011762183ca96197f

Kindly mark my answer as Correct and helpful based on the Impact.

Regards,

Alok

Kindly mark my answer as Correct and helpful based on the Impact.
Thanks and Regards,
Alok

Kalaiarasan Pus
Giga Sage

The list collector will only hold the sys_ids of the records selected. You would have to use the sys_id and query the table to get the required values.

Manas Kandekar
Kilo Guru

Hi

Have you tried onChange client script and script include to achieve this?

find_real_file.png

 

find_real_file.png

 

If my answer helped you in any way, please then mark it correct and helpful.

Kind regards,
Manas

Hi Manas,

Thank you for your reply. This all feels a bit beyond me at the moment, but hopefully I will get there.

So, I'm getting an error message, so I'm triggering something, but obviously I'm not there yet.

To confirm what I'm doing...

I've gone to System Definition > Script Includes, and created a new script called "GetEmails". I've entered the following script. I've also ticked the "Client callable" box, and made it accessible from "All application scopes".

---
var GetEmails = Class.create();
GetEmails.prototype = Object.extendsObject(AbsractAjaxProcessor, {
    
    getEmails: function()
    {
        var users = this.getParameter('sys_ids');
        var emails = [];
        var userRec = new GlideRecord('sys_user');
        userRec.addQuery('sys_id', 'IN', users.toString());
        userRec.query();
        while(userRec.next()){
            emails.push(userRec.email.toString());
        }
            gs.log(emails);
        return emails.join();
    },
    
    type: 'GetEmails'
});

---

I've then gone to my form via "Maintain Items", and under the "Catalog Client Scripts" tab, created a new script called "Get Email Address". I've entered the following script. I've selected the variable name I want from the drop down list.

---

function onChange(control, oldValue, newValue, isLoading) {
   if (isLoading || newValue == '') {
      return;
   }

var ga = new GlideAjax('GetEmails');
ga.addParam('sysparm_name', 'getEmails');
ga.addParam('sys_ids', newValue);
ga.getXML(callBack);
}

function callBack(response) {
var answer = response.responseXML.documentElement.getAttribute("answer");
alert(answer);
}

---

The result from this is that when I open the form and click on the field in question, a list of names appear. When I select one, the whole screen greys out, and an error box appears which reads, "null", with an OK button. I can click ok, and select another name, and the same error box appears each time.

What do you think I have done wrong?

Kind Regards,

Mark.