Join the #BuildWithBuildAgent Challenge! Get recognized, earn exclusive swag, and inspire the ServiceNow Community with what you can build using Build Agent.  Join the Challenge.

Script Include not called with Client Script

YounseoC
Tera Contributor

Hi, I am trying to auto-populate some fields when a specific field(email template) is changed.

When I select an Email Template(references 'email content' table) in an hr task record producer, I want to get the email template's fields: message_html and subject, and auto-fill the form's email body and email subject fields.

 

This is the script include:

YounseoC_1-1740648338554.png

 

var GetEmailTemplateData = Class.create();
GetEmailTemplateData.prototype = Object.extendsObject(global.AbstractAjaxProcessor, {
    getEmailTemplate: function() {
        var templateId = this.getParameter('sysparm_u_email_template');
        var gr = new GlideRecord('sn_hr_core_email_content');

        gs.info('Script Include: templateId=' + templateId);

        gr.addQuery('sys_id', templateId);
        gr.query();

        if (gr.next()) {
            var templateData = {
                body: gr.message_html.toString(),
                subject: gr.subject.toString(),
            };
            gs.info('Script Include: body=' + templateData.body);
            gs.info('Script Include: subject=' + templateData.subject);
            return new JSON().encode(templateData);
        }
        gs.info('Script Include: Email template not found for ID=' + templateId);
        return new JSON().encode({});
    },

    type: 'GetEmailTemplateData'
});

 

 

 

This is the client script:

YounseoC_0-1740648290372.png

 

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

    console.log('Triggering GlideAjax for sys_id: ' + newValue);  
    var ga = new GlideAjax('GetEmailTemplateData');  
    ga.addParam('sysparm_name', 'getEmailTemplate');  
    ga.addParam('sysparm_u_email_template', newValue); 

   
    ga.getXMLAnswer(function(response) {
        try {
            if (response) {
               
                var responseText = response.responseXML.documentElement.textContent;
                console.log('Raw response text: ', responseText);

                
                var emailTemplate = JSON.parse(responseText);
                console.log('Parsed emailTemplate:', emailTemplate);
 
                gForm.setValue('u_email_body', emailTemplate.body || '');
                gForm.setValue('u_email_subject', emailTemplate.subject || '');

                console.log('client script works');
            } else {
                console.error('Error: No response received from Script Include');
            }
        } catch (e) {
            console.error('Error parsing response: ', e);
        }
    });
}
1 ACCEPTED SOLUTION

Ankur Bawiskar
Tera Patron
Tera Patron

@YounseoC 

update as this, don't use JSON encode

var GetEmailTemplateData = Class.create();
GetEmailTemplateData.prototype = Object.extendsObject(global.AbstractAjaxProcessor, {
    getEmailTemplate: function() {
        var templateId = this.getParameter('sysparm_u_email_template');
        var gr = new GlideRecord('sn_hr_core_email_content');
        gr.addQuery('sys_id', templateId);
        gr.query();
        if (gr.next()) {
            var templateData = {
                body: gr.message_html.toString(),
                subject: gr.subject.toString(),
            };
            gs.info('Script Include: body=' + templateData.body);
            gs.info('Script Include: subject=' + templateData.subject);
            return JSON.stringify(templateData);
        }
        gs.info('Script Include: Email template not found for ID=' + templateId);
        return '';
    },

    type: 'GetEmailTemplateData'
});

Client script: use g_form

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

    console.log('Triggering GlideAjax for sys_id: ' + newValue);
    var ga = new GlideAjax('GetEmailTemplateData');
    ga.addParam('sysparm_name', 'getEmailTemplate');
    ga.addParam('sysparm_u_email_template', newValue);
    ga.getXMLAnswer(function(response) {
        try {
            if (response) {
                console.log('Raw response text: ', responseText);

                var emailTemplate = JSON.parse(response);
                console.log('Parsed emailTemplate:', emailTemplate);

                g_form.setValue('u_email_body', emailTemplate.body || '');
                g_form.setValue('u_email_subject', emailTemplate.subject || '');

                console.log('client script works');
            } else {
                console.error('Error: No response received from Script Include');
            }
        } catch (e) {
            console.error('Error parsing response: ', e);
        }
    });
}

If my response helped please mark it correct and close the thread so that it benefits future readers.

Regards,
Ankur
✨ Certified Technical Architect  ||  ✨ 9x ServiceNow MVP  ||  ✨ ServiceNow Community Leader

View solution in original post

3 REPLIES 3

YounseoC
Tera Contributor

the Client script of course works, but fails on calling script include.

Nilesh Pol
Kilo Sage
Kilo Sage

@YounseoC use g_form instead of gForm.

Ankur Bawiskar
Tera Patron
Tera Patron

@YounseoC 

update as this, don't use JSON encode

var GetEmailTemplateData = Class.create();
GetEmailTemplateData.prototype = Object.extendsObject(global.AbstractAjaxProcessor, {
    getEmailTemplate: function() {
        var templateId = this.getParameter('sysparm_u_email_template');
        var gr = new GlideRecord('sn_hr_core_email_content');
        gr.addQuery('sys_id', templateId);
        gr.query();
        if (gr.next()) {
            var templateData = {
                body: gr.message_html.toString(),
                subject: gr.subject.toString(),
            };
            gs.info('Script Include: body=' + templateData.body);
            gs.info('Script Include: subject=' + templateData.subject);
            return JSON.stringify(templateData);
        }
        gs.info('Script Include: Email template not found for ID=' + templateId);
        return '';
    },

    type: 'GetEmailTemplateData'
});

Client script: use g_form

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

    console.log('Triggering GlideAjax for sys_id: ' + newValue);
    var ga = new GlideAjax('GetEmailTemplateData');
    ga.addParam('sysparm_name', 'getEmailTemplate');
    ga.addParam('sysparm_u_email_template', newValue);
    ga.getXMLAnswer(function(response) {
        try {
            if (response) {
                console.log('Raw response text: ', responseText);

                var emailTemplate = JSON.parse(response);
                console.log('Parsed emailTemplate:', emailTemplate);

                g_form.setValue('u_email_body', emailTemplate.body || '');
                g_form.setValue('u_email_subject', emailTemplate.subject || '');

                console.log('client script works');
            } else {
                console.error('Error: No response received from Script Include');
            }
        } catch (e) {
            console.error('Error parsing response: ', e);
        }
    });
}

If my response helped please mark it correct and close the thread so that it benefits future readers.

Regards,
Ankur
✨ Certified Technical Architect  ||  ✨ 9x ServiceNow MVP  ||  ✨ ServiceNow Community Leader