How to validate fields so that a Due date is later than a Start date?
I have customized a presentation and have two fields: a Start Date and a Due Date. I want the Start Date to mark the beginning of the project, and the Due Date to mark the end of the project (i.e. the date that the project is due).
I want to validate the Due Date field so that users cannot enter a date that is before the Start Date. For example, if the start date is 15 March 2014, I don't want someone to enter 12 March 2014 in the Due Date field.
Any ideas on how I can do this?
I want to validate the Due Date field so that users cannot enter a date that is before the Start Date. For example, if the start date is 15 March 2014, I don't want someone to enter 12 March 2014 in the Due Date field.
Any ideas on how I can do this?
One answer
one possible approach would be attribute customization using JavaScript. See https://jazz.net/wiki/bin/view/Main/AttributeCustomization and https://jazz.net/library/article/1093 Lab 5 for how to use attribute customization in general and using Java Script.
I have done that kind of validation already and it works.
Here example script code that does some of the computation needed:
I have done that kind of validation already and it works.
Here example script code that does some of the computation needed:
/******************************************************************************* * Licensed Materials - Property of IBM * (c) Copyright IBM Corporation 2011. All Rights Reserved. * * Note to U.S. Government Users Restricted Rights: * Use, duplication or disclosure restricted by GSA ADP Schedule * Contract with IBM Corp. *******************************************************************************/ dojo.provide("org.example.DateValidator_30_days_later"); dojo.require("com.ibm.team.workitem.api.common.WorkItemAttributes"); // To access the work item attributes dojo.require("com.ibm.team.workitem.api.common.Status"); // To create a status object to return dojo.require("com.ibm.team.workitem.api.common.Severity"); // To create a severity for the status dojo.require("dojo.date"); // We need the date class from Dojo to compare two dates dojo.require("dojo.date.stamp"); // We need the stamp class to work with ISO date strings (function() { var Severity = com.ibm.team.workitem.api.common.Severity; var Status = com.ibm.team.workitem.api.common.Status; var DateValidator = dojo.declare("org.example.DateValidator_30_days_later", null, { validate: function(attributeId, workItem, configuration) { var severity= "ERROR"; var message= "Date must be at least 30 days from now"; // Work Item new: not initialized - provides todays date. Once created provides the creation date var beginDate = dojo.date.stamp.fromISOString(workItem.getValue("com.ibm.team.workitem.attribute.creationdate")); // Get the current attribute's value and make a Date object from it console.log("I got: ["+workItem.getValue(attributeId)+"]"); var endDate= dojo.date.stamp.fromISOString(workItem.getValue(attributeId)); // Compare the two dates returns negative value due to order var compare = -(dojo.date.difference(endDate, beginDate, "day")); if (compare>= 30) { // make sure endDate is not earlier than beginDate + 30 return Status.OK_STATUS; } else { return new Status(Severity[severity], message + " current value: [" +endDate + "] and difference is " + compare); } } }); })();Please note, you need to activate the operational behavior to prevent from saving. See the workshop and the other link.