Date invalide dans les rapports d’état de Project Server 2013

Bonjour,

Je voulais vous avertir qu’un problème d’interprétation des dates se produit lors de la création des rapports d’état (Status Report) dans Project Server 2013 On-Premise et Online.

Description:

Après avoir vérifié que les Paramètres Régionaux de votre site ne sont pas en Anglais, vous créez un rapport d’état:

clip_image001

Au moment de valider la nouvelle demande de rapport, vous obtenez un message d’erreur qui vous indique que la date spécifiée est invalide:
clip_image002

Si vous saisissez manuellement la date au format US, l’erreur n’apparait pas, mais la demande de rapport n’est pas créée.

Cause:

Ce problème se produit pour tous les Paramètres Régionaux qui n’utilisent pas le format de date English/US.

L’erreur provient de la fonction New Date() qui se trouve dans la fonction ValidateDates() de la page SRRequest.aspx Cette fonction ne parvient pas à interpréter correctement les dates au format “dd.mm.yyyy”:

Function ValidateDates()
{ULSvQD:;
var bStartDateIsValid = true;
var bYearlyDateIsValid = true;
var today = ZeroOutTimeComponent(new Date());
var startDate = new Date(idStartDate.value); // returns
Invalid Date
if (!IsValidDate(startDate))
{
alert (PJUnescape("The%20specified%20start%20date%20is%20invalid.%0D%0A%0D%0APlease%20select%20a%20valid%20start%20date%20that%20is%20not%20earlier%20than%20today.%0D%0A"));
bStartDateIsValid = false;
}

Par défaut, l’objet Java Date peut évaluer des chaines de caractères telles que les dates en English/US, heures, temps en millisecondes etc.

Action en cours:

Pour la version On-Premise, j’ai créé une solution de contournement (à intégrer dans la page SRRequest.aspx) pour reformater la date avant qu’elle ne soit interprétée:

function ValidateDates()
{ULSvQD:;
var bStartDateIsValid = true;
var bYearlyDateIsValid = true;
var today = ZeroOutTimeComponent(new Date());
// begin workaround
// var startDate = new Date(idStartDate.value);

var datepickerdate = idStartDate.value
var frDate = datepickerdate.split("/"); // create Array like "dd", "mm", "yyyy"
var startDate = new Date(parseInt(frDate[2],10), parseInt(frDate[1],10)-1, parseInt(frDate[0],10),0,0,0); //new Date(2013,6,25);
// end workaround if (!IsValidDate(startDate))
{
alert (PJUnescape("The%20specified%20start%20date%20is%20invalid.%0D%0A%0D%0APlease%20select%20a%20valid%20start%20date%20that%20is%20not%20earlier%20than%20today.%0D%0A"));
bStartDateIsValid = false;
}

Un correctif devrait être disponible dans le Cumulative du mois d’octobre.

Bonne journée,

Marc Biarnès