Due date should not be less than 24 hrs from current date on a catalog variable.

Madicherla Sri1
Tera Contributor

The date field should not allow users to fill less than 24 hrs from the current date and it should follow a defined schedule 

For example Schedule: Mon-Fri (8:00-19:00)Business hours

it should throw an error if the date is less than 24 hrs or out of business hours.

Looking for help.

Thanks in advance

 

1 ACCEPTED SOLUTION

Hi,

is script include client callable?

is the function being called properly?

share logs for this

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

    check5Days: function () {
        var answer;
        var valid = new GlideDateTime();
        valid.setDisplayValue(this.getParameter('sysparm_date'));
        
        gs.info('User value->' + valid);
        
        var schedule = new GlideSchedule('377f5e51db2e851040d8176a489619cc');
        var inSchedule = schedule.isInSchedule(valid);
        gs.info("Is in schedule->" + inSchedule);
        if (!inSchedule)
        {
            answer = 'false';
        }
        else
        {
            answer = 'true';
        }
        return answer;
    },

});

Regards
Ankur

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

View solution in original post

21 REPLIES 21

You will have to enhance the script as per your requirement.

Members can guide you.

If you start on your own it would be learning for you as well.

Regards
Ankur

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

Madicherla Sri1
Tera Contributor

Hi Ankur,

I'm using the below script include and client script but it is not working can you help me out here.

 

script include

var ajaxDateDiff = Class.create();
ajaxDateDiff.prototype = Object.extendsObject(AbstractAjaxProcessor, {
check5Days: function () {
var answer = "";
var valid = this.getParameter('sysparm_date');
var startDate = new GlideDateTime();
var days = 7;
var dur = new GlideDuration(43200*1000* days);
var schedule = new GlideSchedule('377f5e51db2e851040d8176a489619cc');
//schedule.get("377f5e51db2e851040d8176a489619cc");
var end = schedule.add(startDate, dur);

var diffSeconds = gs.dateDiff(end, valid, true);
if (diffSeconds < 0 )
{
answer = 'true';
}
else
{
answer = 'false';
}
return answer;
},
});

 

on change client script:

function onChange(control, oldValue, newValue, isLoading) {
  if (isLoading || newValue == '') {
     return;
 
    // Call the script include to do the date check
 
    var ga = new GlideAjax('ajaxDateDiff');
 
    ga.addParam('sysparm_name', 'check5Days');
 
    ga.addParam('sysparm_date', newValue);
 
    ga.getXML(ValidateDateResponse);
 
}
 
function ValidateDateResponse(response) {
 
   var answer = response.responseXML.documentElement.getAttribute("answer");
    if (answer == "false") {
        g_form.addErrorMsg('termineingabe', "The date/time you entered is an invalid format, the current date or after the current date", 'error');
        g_form.setValue('termineingabe', "");
 
    }
 
}

Update as this

Script Include:

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

	check5Days: function () {
		var answer = "";
		var valid = new GlideDateTime(this.getParameter('sysparm_date'));
		var startDate = new GlideDateTime();
		var days = 1;
		var dur = new GlideDuration(43200*1000* days);
		var schedule = new GlideSchedule('377f5e51db2e851040d8176a489619cc');
		var end = new GlideDateTime(schedule.add(startDate, dur));
		var duration = GlideDateTime.subtract(valid, end);
		var daysPart = duration.getDayPart();
		if (daysPart < 1 )
		{
			answer = 'false';
		}
		else
		{
			answer = 'true';
		}
		return answer;
	},

});

Client Script

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

	if(oldValue != newValue){
		// Call the script include to do the date check
		var ga = new GlideAjax('ajaxDateDiff');
		ga.addParam('sysparm_name', 'check5Days');
		ga.addParam('sysparm_date', newValue);
		ga.getXML(ValidateDateResponse);
	}
}

function ValidateDateResponse(response) {
	var answer = response.responseXML.documentElement.getAttribute("answer");
	if (answer == "false") {
		g_form.addErrorMsg('termineingabe', "The date/time you entered is an invalid format, the current date or after the current date", 'error');
		g_form.setValue('termineingabe', "");
	}
}

Regards
Ankur

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

HI Ankur,

I have tried the above code but not working.

my requirements are:

I have a catalog variable field name : termineingabe (type: date/time)

it should not allow users to enter date and time out of business hours 

 schedule created: Mon-Fri 8:00-19:00 Excluding weekends.(only 11 hours a day)

can you please help me out here?

Thanks in advance.

 

 

 

Hi,

okay so you just want to check if selected date/time is in schedule or not

then do this

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

	check5Days: function () {
		
		var answer;
		var valid = new GlideDateTime();
		valid.setDisplayValue(this.getParameter('sysparm_date'));
		var schedule = new GlideSchedule('377f5e51db2e851040d8176a489619cc');
		var inSchedule = schedule.isInSchedule(valid);
		if (!inSchedule)
		{
			answer = 'false';
		}
		else
		{
			answer = 'true';
		}
		return answer;
	},

});

Regards
Ankur

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