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
Tera Guru

@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