Développer avec RBS Change : [Résolu] Exécution tache une fois par semaine

  • 84629.1

    23/10/2014 16:39


    asellami
    Rang : Membre
    Bonjour

    J'ai créé une nouvelle tache qui fait un export de données,
    J'aimerai savoir comment faire pour rendre cette tache s'exécute tous les dimanches soir à 23h59.

    Voici la déclaration de la tache dans le fichier xml que j'ai importé:
    <plannedtask label="CustomerWeekExporterTask" dayofmonth="1" hour="1" minute="5" bySystemtaskclassname="wfgz_CustomerWeekExporterTask" />


    Merci d'avance.
  • 84629.2 en réponse à 84629.1 écrit par asellami

    24/10/2014 17:39


    Georges Njock-Bôt
    Rang : Membre
    Bonjour asellami,

    en l'état actuel il n'est pas possible de faire cela par configuration. Pour cela il aurait fallu un paramètre "dayofweek" comme avec les cron linux.

    Par contre, tu peux redéfinir la prochaine date d'exécution via le code php de la tâche.

    /**
     * @see task_SimpleSystemTask::execute()
     *
     */
    protected function execute()
    {
        // Début traitement effectué par la tâche
        
        // (...)
        
        // Fin traitement effectué par la tâche
    
        // Ici, reprogrammer soi-même la tâche au prochain dimanche à 23h59
        $nextSunday = date('Y-m-d H:i:s', strtotime("Next Sunday")); 
        $nextRunDate = date_Calendar::getInstance($nextSunday);
        $nextRunDate->setHour(23);
        $nextRunDate->setMinutes(59);
        $nextRunDate->setSeconds(00);
        
        $this->plannedTask->reSchedule($nextRunDate);
    }
    

    "La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information"

    Albert Einstein
  • 84629.3 en réponse à 84629.2 écrit par Georges Njock-Bôt

    24/10/2014 19:31


    asellami
    Rang : Membre
    ça marche.
    En faite, J'ai définit la prochaine date d'exécution dans le code php de la classe plannedtask (que j'ai surchargé).
    j'ai crée cette méthode :

    public function getNextExecutionDate()
    	{
    		$auj= mktime(0,0,0, date('m'),date('d'),date('Y'));
    		$semaine = $auj+(7*24*3600);
    		$proexecution = date_Calendar::getInstance(date('Y-m-d H:i:s', $semaine)); //executer la tache à 6h
    		$proexecution->setHour(22);
    		$proexecution->setMinute(59);
    		
    		return $proexecution;
    	}


    Et dans la classe de la tache j'ai fait :

    $nextDate= $this->plannedTask->getNextExecutionDate();
    $this->plannedTask->reSchedule($nextDate);


    Merci Georges.
  • 84629.4 en réponse à 84629.3 écrit par asellami

    27/10/2014 12:07


    Georges Njock-Bôt
    Rang : Membre
    Cela donne un résultat en effet.

    Par contre as-tu bien pris conscience des comportements (effets de bords) suivants ?


    • Ton implémentation de getNextExecutionDate() donne une date à J+7 à 22h59. Cela va aussi reprogrammer la tâche une semaine après la fin de son exécution et non pas le prochain dimanche à 22h59. Si ta tâche se termine le lundi à 00h01, cela va la reprogrammer au prochain lundi à 22h59. Au prochain coup elle se terminera peut-être mardi à 00h01, cela va la reprogrammer au mardi suivant à 22h59, ainsi de suite. Mais si c'est ce que tu recherche alors ok. Sauf qu'à ce moment-là, il ne faudrait peut-être pas forcer l'heure à 22h59. A toi de voir.


    • Deuxième chose plus embettante : en surchargeant getNextExecutionDate(), c'est TOUTES les tâches du projet qui se reprogrammeront à J+7 à 22h59. Je ne suis pas certain que ce soit le but recherché.


    • Troisième point plus anecdotique: Lorsqu'on surcharge getNextExecutionDate(), ce n'est plus nécéssaire de faire un
       $this->plannedTask->reSchedule($nextDate); 
      dans la classe de la tâche car le système le fait automatiquement pour toi à la fin de l'exécution de la tâche cf. task_PlannedtaskService::preSave().

    • Dernier point au cas où : Change calcule et stocke les dates en GMT par défaut. Donc selon le fuseau horaire où tu te trouves, la date calculée peut ne pas correspondre à la date locale que tu souhaites...



    Cordialement.

    Édité par Georges Njock-Bôt 27/10/2014 12:11


    "La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information"

    Albert Einstein
 
Merci de prendre connaissance et de respecter les règles des forums.
 
1462 membres
Aucun membre connecté