How the below code works for Date Validation
Accepted answer
Here an example script I created after searching the internet:
/*******************************************************************************
* 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");
dojo.require("com.ibm.team.workitem.api.common.Severity");
dojo.require("com.ibm.team.workitem.api.common.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
/*
*
* You need to configure this script in the Process Configuration Source:
* <validator id="dateval" name="Date Validator" providerId="com.ibm.team.workitem.shared.common.internal.valueProviders.ScriptAttributeValueProvider">
* <script class="org.example.DateValidator" path="/workitem/scripts/common/DateValidator.js"/>
* <parameters beginDateAttributeId="startdate" message="The completion date can not be earlier than the start date" severity="ERROR"/>
* </validator>
*
*/
(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", null, {
validate: function(attributeId, workItem, configuration) {
// Get the configuration parameters about the severity and error message of this validator
var severity= configuration.getChild("parameters").getStringDefault("severity", Severity.ERROR.name);
var message= configuration.getChild("parameters").getStringDefault("message", "");
// Get the begin date attribute from the configuration and make a Date object from it
var beginDateId = configuration.getChild("parameters").getStringDefault("beginDateAttributeId", "");
var beginDate = dojo.date.stamp.fromISOString(workItem.getValue(beginDateId));
// Get the current attribute's value and make a Date object from it
var endDate= dojo.date.stamp.fromISOString(workItem.getValue(attributeId));
// Compare the two dates and make sure endDate is not earlier than beginDate
if (dojo.date.compare(endDate, beginDate) >= 0) {
return Status.OK_STATUS;
} else {
return new Status(Severity[severity], message);
}
}
});
})();
Comments
Thanks for the quick response Ralph. I am actually trying to compare Due Date (in built attribute of IBM) and System Date where a user if enters a due date prior to current date it should populate a message stating that "Due Date cannot be less than the current date".
Consider using comments instead of answers if you comment.
It does not matter which attribute. There are two time related attribute types. Duration and Timestamp. Due Date is a Timestamp as used in the code above. You can compare same attribute types. Duration is ticks in milliseconds.
Sure Ralph,
I am trying to add the below dojo script which is not working for me. Can you please help me where I am going wrong?. I am trying to compare dueDate field of RTC and the date of my system
dojo.provide("DueDateValidation");
dojo.require("com.ibm.team.workitem.tab.customAttributes"); // To access the work item attributes
dojo.require("com.ibm.team.workitem.attribute.state"); // To create a status object to return
dojo.require("com.ibm.team.workitem.attribute.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 Status = com.ibm.team.workitem.attribute.state;
var WorkItemAttributes = com.ibm.team.workitem.tab.customAttributes;
var DateValidator = dojo.declare("DueDateValidation", null, {
validate: function(attributeId, workItem, configuration) {
var severity = "ERROR";
var message = "Due Date cannot be less then Current Date";
var GetCurrentDate = new Date();
var CurrentDate = GetCurrentDate.getTime().toString();
var GetDueDate = dojo.date.stamp.fromISOString(workItem.getValue(com.ibm.team.workitem.attribute.duedate));
var duedate = GetDueDate.getTime().toString();
// Compare the two dates and make sure DueDate is not earlier than CurrentDate
if ((duedate >= CurrentDate)) {
return Status.OK_STATUS;
}else {
return new Status(Severity[severity], message);
}
}
});
})();
I answered with a script that works and a reason why. A main point with answers is to read them and consider their content and not to ask the same question again.
@jainkapil07 You really need to learn how to debug your code, and don't expect others to tell you what's wrong with the code by just reading it.
https://jazz.net/library/article/1360