The Zurich release has arrived! Interested in new features and functionalities? Click here for more

Onload client script for outage alert

I_Das
Tera Contributor

Hello All,

I want to show an info message on incident onload of any ongoing outage. I wrote a client script and script include. But it is showing eeror.

 

Script include:

var OutageScriptInclude = Class.create();
OutageScriptInclude.prototype = Object.extendsObject(AbstractAjaxProcessor, {

Outage: function(current) {
var outageGr = new GlideRecord('cmdb_ci_outage');
outageGr.addQuery('begin', '<', new GlideDateTime());
outageGr.addQuery('end', '=', 'NULL');
outageGr.query();
if (outageGr.hasNext())
{
    return true;
}
},
    type: 'OutageScriptInclude'
});
 
Client script:
function onLoad() {

var OutageScriptInclude= new OutageScriptInclude();
var isOutage= OutageScriptInclude.Outage();
if(isOutage)
{
    alert('test');
}
}
 
What should I do to correct it?
1 ACCEPTED SOLUTION

Community Alums
Not applicable

Hi @I_Das ,

I tried your problem in my PDI and I hope this will work you!

Please change your Client Script code with below script

function onLoad() {
    //Type appropriate comment here, and begin script below

    var ga = new GlideAjax('OutageScriptInclude');
    ga.addParam('sysparm_name', 'Outage');
    ga.addParam('sysparm_buildingid', g_form.getValue('number'));
    ga.getXML(getResHandler);

    function getResHandler(response) {
        var answer = response.responseXML.documentElement.getAttribute("answer");
        var clearvalue; // Stays Undefined
        if (answer) {
            alert('test');
        }
    }
}

Script Include : Which is client callable 

var OutageScriptInclude = Class.create();
OutageScriptInclude.prototype = Object.extendsObject(AbstractAjaxProcessor, {

    Outage: function() {
		gs.log('Inside OutageScriptInclude ');
		var num = this.getParameter('sysparm_buildingid');
        var outageGr = new GlideRecord('cmdb_ci_outage');
        outageGr.addQuery('begin', '<', new GlideDateTime());
        outageGr.addQuery('end', '=', 'NULL');
        outageGr.query();
        if (outageGr.hasNext()) {
			gs.log('Isnide IF OutageScriptInclude');
            return true;
        }
    },

    type: 'OutageScriptInclude'
});

 

Please mark my answer correct and helpful if this works for you

 

Thanks and Regards 

Sarthak

 

 

 

View solution in original post

4 REPLIES 4

Sagar Pagar
Tera Patron

Hi @I_Das,

 

You need to use the Client callable script include with GlideAjax call instead of direct calling Script include in Client strips.

 

Take a reference of nice article written by @Shawn Dowler 

GlideAjax Example Cheat Sheet  

 

Thanks,

Sagar Pagar

The world works with ServiceNow

Hello @Sagar Pagar ,

 

I have modified the client script as:

function onLoad() {

var ga = new GlideAjax('OutageScriptInclude');
    ga.addParam('sysparm_name', 'getXML');

    var urlString = '<p><a class="web" target="_blank" href="' + "https://dev240100.service-now.com/esc?id=outage" +'">' + "Click Here" + '</a></p>';


    ga.getXML(checkoutage);

    function checkoutage(response) {
        var answer = response.responseXML.documentElement.getAttribute('answer');

        if (answer == 'true') {
            g_form.addErrorMessage("This CI already has an open outage.For details ,"+urlString);
        }
   //Type appropriate comment here, and begin script below
    }
}
 
Also the script include as 
var OutageScriptInclude = Class.create();
OutageScriptInclude.prototype = Object.extendsObject(AbstractAjaxProcessor, {

getXML: function() {
var hasOutage = this.Outage();
return hasOutage.toString();
},

Outage: function() {
var outageGr = new GlideRecord('cmdb_ci_outage');
outageGr.addQuery('begin', '<', new GlideDateTime());
outageGr.addQuery('end', '=', 'NULL');
outageGr.query();
if (outageGr.next())
{
    gs.info('Outage is created already');
    return true;
}
},
    type: 'OutageScriptInclude'
});
 
Still it is showing error.

Community Alums
Not applicable

Hi @I_Das ,

I tried your problem in my PDI and I hope this will work you!

Please change your Client Script code with below script

function onLoad() {
    //Type appropriate comment here, and begin script below

    var ga = new GlideAjax('OutageScriptInclude');
    ga.addParam('sysparm_name', 'Outage');
    ga.addParam('sysparm_buildingid', g_form.getValue('number'));
    ga.getXML(getResHandler);

    function getResHandler(response) {
        var answer = response.responseXML.documentElement.getAttribute("answer");
        var clearvalue; // Stays Undefined
        if (answer) {
            alert('test');
        }
    }
}

Script Include : Which is client callable 

var OutageScriptInclude = Class.create();
OutageScriptInclude.prototype = Object.extendsObject(AbstractAjaxProcessor, {

    Outage: function() {
		gs.log('Inside OutageScriptInclude ');
		var num = this.getParameter('sysparm_buildingid');
        var outageGr = new GlideRecord('cmdb_ci_outage');
        outageGr.addQuery('begin', '<', new GlideDateTime());
        outageGr.addQuery('end', '=', 'NULL');
        outageGr.query();
        if (outageGr.hasNext()) {
			gs.log('Isnide IF OutageScriptInclude');
            return true;
        }
    },

    type: 'OutageScriptInclude'
});

 

Please mark my answer correct and helpful if this works for you

 

Thanks and Regards 

Sarthak

 

 

 

Hello @Community Alums ,

It worked. Thank you very much.

 

Thanks & Regards,

I**bleep**a Das