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:
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:
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