It's all about the answers!

Ask a question

Custom Date attribute (Based on Due date value)


VK L (8177140159) | asked Feb 19 '13, 6:12 a.m.
Hi All,
           I am trying to create a calculated value script for this:

newdate = duedate + 7 days

I am getting this error:
[ ccm: AsynchronousTaskRunner-1] ERROR com.ibm.team.workitem.common                        - Error invoking value provider 'com.ibm.team.workitem.valueproviders.VALUE_PROVIDER._AzZLYHmpEeK5jqU0rlGqKg'
com.ibm.team.repository.common.TeamRepositoryException: Unexpected exception type
org.mozilla.javascript.EcmaError: TypeError: Cannot call method "getFullYear" of null ({"Bundle-SymbolicName":"org.dojotoolkit.dojo", "path":"\\resources\\date", "name":"stamp.js"}#127)

My script is as below:
(function() {
var WorkItemAttributes= com.ibm.team.workitem.api.common.WorkItemAttributes;
    dojo.declare("com.ibm.workitems.providers.Date", null, {

        getValue: function(attributeId, workItem, configuration) {               
        console.log("Start..");
        var dueDate = dojo.date.stamp.toISOString(workItem.getValue(WorkItemAttributes.DUE_DATE));       
        var date1= dojo.date.add(dueDate, "day", 7);
        console.log("Now is: " + date1);

    return date1;       

        }

    });

})();

Please advise.

Thanks.

Accepted answer


permanent link
Ralph Schoon (59.4k23642) | answered Feb 19 '13, 11:44 a.m.
FORUM ADMINISTRATOR / FORUM MODERATOR / JAZZ DEVELOPER
edited Feb 19 '13, 11:45 a.m.
I have once written this script and it worked for me.
/*******************************************************************************
 * 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);
        }
    }
});
})();


Ralph Schoon selected this answer as the correct answer

Comments
VK L commented Feb 28 '13, 11:08 a.m. | edited Feb 28 '13, 12:11 p.m.

 Hi All,

             This works. Used fromISOString method to retrieve, add method, and then toISOString to convert back and return value to the attribute.

Thanks.


Ralph Schoon commented Feb 28 '13, 12:12 p.m.
FORUM ADMINISTRATOR / FORUM MODERATOR / JAZZ DEVELOPER

If this works, please accept the answer that helped, so others can use the knowledge.

One other answer



permanent link
Muthukumar C (32712733) | answered Feb 19 '13, 7:38 a.m.
Hi Valli,

Give a try by importing the prerequisites as below
dojo.require("dojo.date");
dojo.require("dojo.date.stamp");
dojo.require("com.ibm.team.workitem.api.common.WorkItemAttributes");
These lines should be added before the (function() {  statement.

Regards
Muthu

Comments
VK L commented Feb 19 '13, 9:26 a.m. | edited Feb 28 '13, 12:12 p.m.

 Hi Muthu,

                 my code contains the prerequisites already...i just put the main snippet here...


pls try and let me know.

Thanks.

Your answer


Register or to post your answer.