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