Change request planned start date and change task due date validation

Mani Polisetty2
Tera Contributor

Hi ServiceNow Folks,

 

We have a requirement, We have two fields on change request 1) Planned start date 2) Planned End date

and we have one field on change task - Due Date

 

Qus1:  -- Whenever the planned start date(change_request field) is less than Due date(change_task field) Show an errorBox message under planned start date('planned start date should be before due date');

 

Qus 2: -- Whenever the Due date is less than Planned start date show an errorBox message under due date field('Due date should be after planned installed date').

 

Can some one help me please.

 

Thanks

Mani Polisetty

1 ACCEPTED SOLUTION

Hi @Mani Polisetty2 

Use below Updated Script Include :-

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

    getDetails: function() {
        var currentNumber = this.getParameter('sysparm_sysId');
        var currentDate = new GlideDateTime(this.getParameter('sysparm_date'));

        var gr = new GlideRecord("change_task");
        gr.addQuery("change_request.number", this.getParameter('sysparm_sysId'));
        gr.query();
        while(gr.next()) {

            if (currentDate > new GlideDateTime(gr.planned_start_date).getDisplayValue() ) {
                return false;
            } else {
                return true;
            }
        }
    },

    getTaskDetails: function() {
        var currentSysId = this.getParameter('sysparm_sysId');
        var currentDate = new GlideDateTime(this.getParameter('sysparm_date'));

        var gr = new GlideRecord("change_request");
        gr.addQuery("sys_id", currentSysId);
        gr.query();
        if (gr.next()) {
            gs.info("FoundRecord=" + gr.planned_start_date);
            if (currentDate < new GlideDateTime(gr.start_date).getDisplayValue()) {
                return false;
            } else {
                return true;
            }
        }
    },

    type: 'getCallerDetails'
});

 Replace with your field values. 


Please Mark My Response as Correct/Helpful based on Impact
Regards,
Gunjan Kiratkar
2X ServiceNow MVP
Community Rising Star 2022
Youtube : ServiceNow Guy

View solution in original post

6 REPLIES 6

Gunjan Kiratkar
Kilo Patron
Kilo Patron

Hi @Mani Polisetty2 ,

Use below code 

Onchange client script on change request table

onChange of planned start date 

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

   //Type appropriate comment here, and begin script below
	var ga = new GlideAjax('getCallerDetails'); //Scriptinclude
    ga.addParam('sysparm_name', 'getDetails'); //Method
    ga.addParam('sysparm_sysId', g_form.getValue('number')); //Parameters
	ga.addParam('sysparm_date', g_form.getValue('start_date'));
    ga.getXMLAnswer(getResponse);
    function getResponse(response) {
        if (response == 'false') {
			g_form.clearValue('start_date');
            g_form.showFieldMsg('start_date', 'Planned start date should be before due date', 'error');
            
        }


    }
   
}

 

OnChange Client Script on change_task table

Onchange of due date

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

    //Type appropriate comment here, and begin script below

    var ga = new GlideAjax('getCallerDetails'); //Scriptinclude
    ga.addParam('sysparm_name', 'getTaskDetails'); //Method
    ga.addParam('sysparm_sysId', g_form.getValue('change_request')); //Parameters
    ga.addParam('sysparm_date', newValue); //Replace your due date field
    ga.getXMLAnswer(getResponse);

    function getResponse(response) {
        if (response == 'false') {

            g_form.clearValue('planned_start_date');  //Replace your due date field
            g_form.showFieldMsg('planned_start_date', 'Due date should be after planned installed date', 'error'); //Replace your due date field
            
        }


    }

}

 

 

Script Include :-

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

    getDetails: function() {
        var currentNumber = this.getParameter('sysparm_sysId');
        var currentDate = new GlideDateTime(this.getParameter('sysparm_date'));

        var gr = new GlideRecord("change_task");
        gr.addQuery("change_request.number", this.getParameter('sysparm_sysId'));
        gr.query();
        if (gr.next()) {
            gs.info("FoundRecord=" + gr.planned_start_date);
            if (currentDate > gr.planned_start_date) {  // Replace your due date field in gr.start_date
                return false;
            } else {
                return true;
            }
        }
    },

    getTaskDetails: function() {
        var currentSysId = this.getParameter('sysparm_sysId');
        var currentDate = new GlideDateTime(this.getParameter('sysparm_date'));

        var gr = new GlideRecord("change_request");
        gr.addQuery("sys_id", currentSysId);
        gr.query();
        if (gr.next()) {
             
            if (currentDate < gr.start_date) {  // Replace your due date field in gr.start_date
                return false;
            } else {
                return true;
            }
        }
    },

    type: 'getCallerDetails'
});

 

GunjanKiratkar_0-1669041159148.png

 


Please Mark My Response as Correct/Helpful based on Impact
Regards,
Gunjan Kiratkar
2X ServiceNow MVP
Community Rising Star 2022
Youtube : ServiceNow Guy

Hi Gunjan, 

 

Great thanks for your valuable solution, It's working as expected but for change task following client script is checking only date not time.

ex :--  If 'Planned start date' is - 22-11-2022 08:24:20 - The Error message is showing if I select same date also. That means I want to check time also. Even if I will be select One sec difference also need to show an error message.

 

Another Qus : -- If the change request have more than one task should check the all change task's due date field (Looping is required). Can you please help me on it.

 

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

    //Type appropriate comment here, and begin script below

    var ga = new GlideAjax('getCallerDetails'); //Scriptinclude
    ga.addParam('sysparm_name', 'getTaskDetails'); //Method
    ga.addParam('sysparm_sysId', g_form.getValue('change_request')); //Parameters
    ga.addParam('sysparm_date', newValue); //Replace your due date field
    ga.getXMLAnswer(getResponse);

    function getResponse(response) {
        if (response == 'false') {

            g_form.clearValue('due_date');  //Replace your due date field
            g_form.showFieldMsg('due_date', 'Due date should be after planned installed date', 'error'); //Replace your due date field
            
        }


    }

}

Hi @Mani Polisetty2 

Use below Updated Script Include :-

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

    getDetails: function() {
        var currentNumber = this.getParameter('sysparm_sysId');
        var currentDate = new GlideDateTime(this.getParameter('sysparm_date'));

        var gr = new GlideRecord("change_task");
        gr.addQuery("change_request.number", this.getParameter('sysparm_sysId'));
        gr.query();
        while(gr.next()) {

            if (currentDate > new GlideDateTime(gr.planned_start_date).getDisplayValue() ) {
                return false;
            } else {
                return true;
            }
        }
    },

    getTaskDetails: function() {
        var currentSysId = this.getParameter('sysparm_sysId');
        var currentDate = new GlideDateTime(this.getParameter('sysparm_date'));

        var gr = new GlideRecord("change_request");
        gr.addQuery("sys_id", currentSysId);
        gr.query();
        if (gr.next()) {
            gs.info("FoundRecord=" + gr.planned_start_date);
            if (currentDate < new GlideDateTime(gr.start_date).getDisplayValue()) {
                return false;
            } else {
                return true;
            }
        }
    },

    type: 'getCallerDetails'
});

 Replace with your field values. 


Please Mark My Response as Correct/Helpful based on Impact
Regards,
Gunjan Kiratkar
2X ServiceNow MVP
Community Rising Star 2022
Youtube : ServiceNow Guy

Perfect Gunjan, Great thanks for your valuable help. It's working as expected. Really appreciated.

 

Thanks

Mani Polisetty