2016-04-28 7 views
0

nicht löschen Ich habe folgendes Modell: "Shelf" und "Book", in 1: n-Beziehung.ExtBase: kann Kindobjekt in Scheduler Task

Es gibt auch einen Scheduler-Task (Erweiterung "Scheduler" 6.2.0), der Bücher analysiert und löscht. Scheduler-Task ist in zwei Klassen unterteilt: Task selbst und Geschäftslogik.

Aufgabe:

namespace Vendor\MyExt\Scheduler; 
class MultiStepProcessTask extends \TYPO3\CMS\Scheduler\Task\AbstractTask { 
    public function execute() { 
     $objectManager = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Extbase\\Object\\ObjectManager'); 

     $businessLogic = $objectManager->get(\Vendor\MyExt\Scheduler\MultiStepProcessTaskBusinessLogic::class); 

     return $businessLogic->run(); 
    } 
} 

Geschäftslogik:

namespace Vendor\MyExt\Scheduler; 
class MultiStepProcessTaskBusinessLogic { 
    public function run() { 
     $objectManager = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Extbase\\Object\\ObjectManager'); 

     $shelvesRepository = $objectManager->get('Vendor\\MyExt\\Domain\\Repository\\ShelvesRepository'); 
     $shelf = $shelvesRepository->findOneByLastFinishedTaskNumber(0); 
     $book = $shelf->getBooks()->current(); 
     ....  
     $shelf->removeBook($book); 
     $shelvesRepository->update($shelf); 

     return 1; 
    } 
} 

Wenn von meiner Erweiterung genannt - alles in Ordnung: Das Buch wird gelöscht. es zu testen Ich habe diese Zeilen in der Liste Aktion von einem Controller:

$objectManager = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Extbase\\Object\\ObjectManager'); 
$businessLogic = $objectManager->get(\Vendor\MyExt\Scheduler\MultiStepProcessTaskBusinessLogic::class); 
$businessLogic->run(); 

Wenn aus Scheduler (als Aufgabe) bezeichnet das Buch nicht gelöscht! Repository wird erstellt, Regal wird abgerufen, Buch wird abgerufen. Aber $shelf->removeBook($book); hat überhaupt keine Wirkung. Könnte mir bitte jemand erklären warum?

Ich bin mit TYPO3 Version 6.2.19

Antwort

1

Sie müssen die PersistenceManager und rufen Sie dann PersistenceManager->persistAll(); instanziiert. Der Grund dafür ist, dass dies innerhalb einer Controller-Aktion standardmäßig am Ende jeder Aktion als eine Art Bereinigungsaufgabe aufgerufen wird. Ihre Aufgabe würde dies standardmäßig nicht tun, Sie müssen also manuell persistieren.

+0

Großartig! Das war's. Danke vielmals. – firelex

Verwandte Themen