Développer avec RBS Change : Problème de publication de documents

  • 16152.1

    13/07/2010 17:57


    teles
    Rang : Adepte
    En 3.0.2, les tâches hourChange et publishTask publient les documents qui ont une date de publication entre le moment où la tache est lancée et la date de la dernière exécution de la tache, soit une petite fenêtre (qui en théorie suffit)

    Lorsque que la tache plante (peu importe la raison), comment fait-on pour publier à postériori les documents qui doivent l'être et qui n'ont pas été publiés dans la fenêtre de temps prévue ? Vu que la relance des taches ne prendra jamais en compte les documents avec une date de publication antérieure à la date de dernière exécution.
  • 16152.2 en réponse à 16152.1 écrit par teles

    14/07/2010 08:39


    Franck Stauffer
    Titre : Responsable produit
    Rang : Expert
    S'il faut rattraper une différence, rien n'est prévu car avec ce nouveau système les erreurs sont moins fréquentes qu'avant (si la tache de publication plante à la date D, la prochaine éxecution rattrapera ce qui s'est passé entre D et maintenant).
    Néanmoins, un script du type (à éxecuter avec le Framework chargé et librement inspiré de http://git.rbschange.....14509abaec02b24c2e49 ) fait facilement l'affaire :
    $start = date_Calendar::now()->sub(date_Calendar::MONTH, 1)->toString(); // Ratrapper tout depuis 1 moins
    $end = date_Calendar::now()->toString();
    $toProcess = array();
    $compiledFilePath = f_util_FileUtils::buildChangeBuildPath('publishListenerInfos.ser');
    if (file_exists($compiledFilePath))
    {
    	$models = unserialize(file_get_contents($compiledFilePath));
    	$rc = RequestContext::getInstance();
    	foreach ($models as $modelName => $langs) 
    	{
    		foreach ($langs as $lang)
    		{
    			try
    			{
    				$rc->beginI18nWork($lang);
    				$query = f_persistentdocument_PersistentProvider::getInstance()->createQuery($modelName, false);
    				$query->add(Restrictions::in('publicationstatus', array('ACTIVE', 'PUBLICATED')))
    						->add(Restrictions::orExp(Restrictions::between('startpublicationdate', $start, $end), 
    								Restrictions::between('endpublicationdate', $start, $end)))
    						->setProjection(Projections::property('id', 'id'));
    						
    				$results = $query->find();
    				foreach ($results as $resultArray)
    				{
    					$toProcess[] = $resultArray['id'] . '/' . $lang;
    				}
    				$rc->endI18nWork();
    			}
    			catch (Exception $e)
    			{
    				$rc->endI18nWork($e);
    			}
    		}
    	}
    }
    else
    {
    	Framework::error(__METHOD__ . ' File not found ' . $compiledFilePath);
    }
    
    $documentsArray = array_chunk($toProcess, 500);
    $script = 'framework/listener/publishDocumentsBatch.php';
    foreach ($documentsArray as $chunk)
    {
    	f_util_System::execHTTPScript($script, $chunk);
    }
    

    Édité par Franck Stauffer 14/07/2010 08:39

  • 16152.3 en réponse à 16152.2 écrit par Franck Stauffer

    15/07/2010 10:48


    teles
    Rang : Adepte
    Merci
 
Merci de prendre connaissance et de respecter les règles des forums.
 
1471 membres
Aucun membre connecté