Outage in Change request

salu
Mega Guru

Hello All,

 

Can someone please help me ?

I have added a ui action to create outage in change.It will automatically populate short description and configuration item in the window.How its populating?

I want to populate planned start date in begin field and planned end date in end in the outage window.

find_real_file.png

createOutageM2M();

function createOutageM2M() {
current.update();
var url = new CreateOutageUtil().getNewOutageLink(current);
action.setRedirectURL(url);
action.setReturnURL(current);
}

 

Thanks

Saranya

 

 

 

1 ACCEPTED SOLUTION

Here you go.

Script include:
Name: OutageDateValidation
Client callable: True
Script:

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

    validateStartEndDate: function() {
        var startDate = this.getParameter('sysparm_start_date');
        var endDate = this.getParameter('sysparm_end_date');
        var changeRequest = this.getParameter('sysparm_change_sys_id');

        var grChange = new GlideRecord('change_request');
        if (grChange.get(changeRequest)) {
            if ((!JSUtil.nil(startDate) && (startDate < grChange.start_date.getDisplayValue() || startDate >= grChange.end_date.getDisplayValue())) || (!JSUtil.nil(endDate) && (endDate <= grChange.start_date.getDisplayValue() || endDate > grChange.end_date.getDisplayValue()))) {
                return 1;
            } else if (!JSUtil.nil(startDate) && !JSUtil.nil(endDate) && startDate >= endDate) {
                return 2;
            } else {
                return true;
            }
        } else {
            return true;
        }
    },

    type: 'OutageDateValidation'
});

 

Client script 1:
Name: Validate Begin date
Table: Outage [cmdb_ci_outage]
Type: onChange
Field name: Begin
Script:

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

    var changeSysID = g_form.getValue("task_number");
    var endDate = g_form.getValue("end");

    var ga = new GlideAjax('OutageDateValidation');
    ga.addParam('sysparm_name', 'validateStartEndDate');
    ga.addParam('sysparm_change_sys_id', changeSysID);
    ga.addParam('sysparm_start_date', newValue);
    ga.addParam('sysparm_end_date', endDate);
    ga.getXML(callback);
}

function callback(response) {
    var answer = response.responseXML.documentElement.getAttribute("answer");
    if (answer != "true") {
        g_form.clearValue("begin");
        if (answer == "1") {
            g_form.showFieldMsg("begin", "Begin date must be between Planned start date and Planned end date on Change request", "error");
        } else {
            g_form.showFieldMsg("begin", "Begin date must be before End", "error");
        }
    }
}

 

Client script 2:
Name: Validate End date
Table: Outage [cmdb_ci_outage]
Type: onChange
Field name: End
Script:

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

    var changeSysID = g_form.getValue("task_number");
    var beginDate = g_form.getValue("begin");
	
    var ga = new GlideAjax('OutageDateValidation');
    ga.addParam('sysparm_name', 'validateStartEndDate');
    ga.addParam('sysparm_change_sys_id', changeSysID);
    ga.addParam('sysparm_start_date', beginDate);
    ga.addParam('sysparm_end_date', newValue);
    ga.getXML(callback);
}

function callback(response) {
    var answer = response.responseXML.documentElement.getAttribute("answer");
    if (answer != "true") {
        g_form.clearValue("end");
        if (answer == "1") {
            g_form.showFieldMsg("end", "End date must be between Planned start date and Planned end date on Change request", "error");
        } else {
            g_form.showFieldMsg("end", "End date must be after Begin", "error");
        }
    }
}

 

Hope this helps!

-Tanaji

Please mark answer correct/helpful based on impact.

View solution in original post

9 REPLIES 9

Here you go.

Script include:
Name: OutageDateValidation
Client callable: True
Script:

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

    validateStartEndDate: function() {
        var startDate = this.getParameter('sysparm_start_date');
        var endDate = this.getParameter('sysparm_end_date');
        var changeRequest = this.getParameter('sysparm_change_sys_id');

        var grChange = new GlideRecord('change_request');
        if (grChange.get(changeRequest)) {
            if ((!JSUtil.nil(startDate) && (startDate < grChange.start_date.getDisplayValue() || startDate >= grChange.end_date.getDisplayValue())) || (!JSUtil.nil(endDate) && (endDate <= grChange.start_date.getDisplayValue() || endDate > grChange.end_date.getDisplayValue()))) {
                return 1;
            } else if (!JSUtil.nil(startDate) && !JSUtil.nil(endDate) && startDate >= endDate) {
                return 2;
            } else {
                return true;
            }
        } else {
            return true;
        }
    },

    type: 'OutageDateValidation'
});

 

Client script 1:
Name: Validate Begin date
Table: Outage [cmdb_ci_outage]
Type: onChange
Field name: Begin
Script:

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

    var changeSysID = g_form.getValue("task_number");
    var endDate = g_form.getValue("end");

    var ga = new GlideAjax('OutageDateValidation');
    ga.addParam('sysparm_name', 'validateStartEndDate');
    ga.addParam('sysparm_change_sys_id', changeSysID);
    ga.addParam('sysparm_start_date', newValue);
    ga.addParam('sysparm_end_date', endDate);
    ga.getXML(callback);
}

function callback(response) {
    var answer = response.responseXML.documentElement.getAttribute("answer");
    if (answer != "true") {
        g_form.clearValue("begin");
        if (answer == "1") {
            g_form.showFieldMsg("begin", "Begin date must be between Planned start date and Planned end date on Change request", "error");
        } else {
            g_form.showFieldMsg("begin", "Begin date must be before End", "error");
        }
    }
}

 

Client script 2:
Name: Validate End date
Table: Outage [cmdb_ci_outage]
Type: onChange
Field name: End
Script:

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

    var changeSysID = g_form.getValue("task_number");
    var beginDate = g_form.getValue("begin");
	
    var ga = new GlideAjax('OutageDateValidation');
    ga.addParam('sysparm_name', 'validateStartEndDate');
    ga.addParam('sysparm_change_sys_id', changeSysID);
    ga.addParam('sysparm_start_date', beginDate);
    ga.addParam('sysparm_end_date', newValue);
    ga.getXML(callback);
}

function callback(response) {
    var answer = response.responseXML.documentElement.getAttribute("answer");
    if (answer != "true") {
        g_form.clearValue("end");
        if (answer == "1") {
            g_form.showFieldMsg("end", "End date must be between Planned start date and Planned end date on Change request", "error");
        } else {
            g_form.showFieldMsg("end", "End date must be after Begin", "error");
        }
    }
}

 

Hope this helps!

-Tanaji

Please mark answer correct/helpful based on impact.

Make sure the Task Number field is on the form. Otherwise it wont work.

Hi Tanaji,

 

A billion thanks.Its working perfectly.

But client suggest to hide the task number from the form.So it wil not work.

What we can do?

Thanks

Saranya

Have it on the form but hide it using a UI policy (without any condition so that it's always hidden).
Then it will work as you want.

-Tanaji
Please mark response correct/helpful if applicable.

If its working and you are happy with the solution please dont forget to close the thread by marking the correct answer.

 

-Tanaji

Please mark reply correct/helpful if applicable