Lecture 2 minutes
Depuis la version 7.7, Sugar permet d'utiliser les namespaces PHP. Nous allons voir ici comment les namespaces peuvent être utilisés dans le système de tâches planifiées de Sugar.
Déclaration d'une classe utilisable en cronjob
La classe que nous utiliserons devra implémenter l'interface \RunnableSchedulerJob fournie par Sugar.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<?php namespace MyCustom\Namespace; class MyCustomScheduledTask implements \RunnableSchedulerJob { /** * @var \SchedulersJob */ protected $job; public function setJob(SchedulersJob $job) { $this->job = $job; } public function run($data) { # Put your logic here... } } |
Utilisation de la classe dans la création d'un job ou d'une tâche planifiée
Notre classe est maintenant utilisable directement pour la création d'un job de la façon suivante :
1 2 3 4 5 6 7 8 |
// Ajout d'un job dans la job_queue $queue = new \SugarJobQueue(); $job = \BeanFactory::getBean('SchedulersJobs'); $job->name = 'My Custom Job'; $job->assigned_user_id = $sr->assigned_user_id; $job->target = 'class::MyCustom\\Namespace\\MyCustomScheduledTask'; $queue->submitJob($job); |
Au lieu de déclarer en target du job le nom de la fonction, il faut indiquer le namespace complet de notre classe précédée de class::
et le job exécutera automatiquement la fonction run de la classe.
Pour l'utiliser dans les tâches planifiées via l'administration de Sugar, il faut déclarer un libellé à notre tâche et l'ajouter dans les tâches paramétrables puis faire une réparation rapide et reconstruction après avoir créé les 2 fichiers ci-dessous.
1 2 |
<?php $job_strings[] = 'class::MyCustom\\Namespace\\MyCustomScheduledTask'; |
1 2 |
<?php $mod_strings['LBL_MYCUSTOM_NAMESPACE_MYCUSTOMSCHEDULEDTASK'] = 'Label for my custom scheduled task'; |
On peut aussi créer une tâche directement par code de la façon suivante :
1 2 3 4 5 6 7 8 9 10 11 12 |
// Ajout d'une tâche planifiée $scheduler = BeanFactory::getBean('Schedulers'); $scheduler->name = "My scheduled Task"; $scheduler->job = 'class::MyCustom\\Namespace\\MyCustomScheduledTask'; $scheduler->date_time_start = $timedate->asDb($now->get_day_begin(1, 1, 2015)); $scheduler->date_time_end = $timedate->asDb($now->get_day_end(31, 12, 2050)); $scheduler->job_interval = '*/1::*::*::*::*'; $scheduler->status = 'Inactive'; $scheduler->created_by = $user->id; $scheduler->modified_user_id = $user->id; $scheduler->catch_up = '1'; $scheduler->save(); |
Références :
SugarCRM - Utilisation des "namespaces" PHP dans Sugar 7 (blog synolab)
Creating Custom Schedulers (documentation Sugar)