Datasource¶
Mit einer \Alvine\Application\Platform\Types\Datasource
werden Daten bereit gestellt.
Um eine Datasource zu erstellen wird ein \Alvine\Application\Platform\Types\Context
Objekt benötigt.
Die Datasource stellt dafür die Methode getContextBuilder
zu verfügung.
Diese liefert den passenden Builder zurück.
Wird kein Mandant und keine Sprache definiert, werden diese Informationen aus der Anwendung geholt.
$contextBuilder=\Alvine\Application\Platform\Builder\DataSource\Commerce\Item::getContextBuilder();
$dataSource = new \Alvine\Application\Platform\Builder\DataSource\Commerce\Item($contextBuilder->getContext());
Wenn das Objekt erstellt wurde, wird die Methode prepare
aufgerufen.
Diese Methode dient zur Vorbereitung der Datasource.
Die Daten werden erst geladen, wenn die Methode iterate
aufgerufen wird.
Die interne queue wird geprüft, wenn keine Daten enthalten sind, wird stockUp
aufgerufen und füllt die queue auf.
iterate
liefert den nächsten Datensatz der queue zurück.
foreach($datasource->iterate() as $item) {
...
...
}
Builder¶
Die Klasse \Alvine\Application\Platform\Builder\DataSource
bildet die Grundlage der Datenquellen für das Erstellen von Inhalten.
Das können zum Beispiel HTML Dateien für das Frondend sein oder XML Dokumente für das Ausspielen an Amazon oder eBay.
Die prepare
Methode, wurde hier um die Methoden zum Erweitern und Manipulieren der Datasource erweitert.
injectMethods
werden in der Methode stockUp
aufgerufen und erweitern die Daten einer Datasource.
finalizeMethods
werden in der Methode finalize
aufgerufen und können am Schluss, nachdem alle injectMethods gelaufen sind, die Daten nochmal manipulieren
injectMethods¶
Methoden die mit dem Funktionsnamen injectDataSource
beginnen, werden automatisch aufgerufen.
Das einbinden dieser Methoden kann zum Beispiel über einen Trait gemacht werden.
finalizeMethods¶
Methoden die mit dem Funktionsnamen finalizeDataSource
beginnen, werden automatisch aufgerufen.
Das einbinden dieser Methoden kann zum Beispiel über einen Trait gemacht werden.
FromModel¶
Mit der Datasource \Alvine\Application\Platform\Builder\DataSource\FromModel
, werden Daten aus der Datenbank geladen,
als Grundlage wird ein Model \Alvine\Application\Platform\Model\Entity
verwendet.
In der prepare
Methode, wird eine Liste mit IDs geladen die bearbeitet werden sollen.
In der stockUp
Methode, werden die IDs bearbeitet und die Daten werden geladen.
Diese Daten, sind immer nur die Basisdaten der jeweilgen Tabelle des Modells.
Wenn zusätzliche Infomationen benötigt werden, muss eine injectMethod
definiert werden.
IDs einschränken¶
Wenn zum Beispiel nur eine bestimmte Anzahl von IDs geladen werden sollen, kann diese Liste beim erstellen übergeben werden.
In diesem Beispiel, werden 2 Produkte geladen, IID 1425 und IID 1426 .
$contextBuilder=\Alvine\Application\Platform\Builder\DataSource\Commerce\Item::getContextBuilder();
$dataSource = new \Alvine\Application\Platform\Builder\DataSource\Commerce\Item($contextBuilder->getContext(), [1425,1426]);
foreach($datasource->iterate() as $item) {
...
...
}
Delta¶
Die Datasource kann mit Delta umgehen.
Dazu muss eine UUID beim erstellen übergeben werden.
Über die UUID wird der letzte Zeitpunkt definiert wann das letzte Mal abgefragt wurde.
Wenn änderungen identifiziert wurden , werden nur diese Datensätze geliefert.
$contextBuilder=\Alvine\Application\Platform\Builder\DataSource\Commerce\Order\Delivery::getContextBuilder();
$dataSource = new \Alvine\Application\Platform\Builder\DataSource\Commerce\Order\Delivery($contextBuilder->getContext(), null, [1425,1426]);
Einschränkungen¶
Es ist eine freie Einschränkung über ein \Alvine\Persistence\Relation\SQL\Where
Objekt möglich.
In diesem Beispiel werden Lieferungen von einer Bestellung geladen.
Diese sollen den Status ausgeliefert haben und zu dieser Bestellnummer passen.
Damit auch die Positionen geladen werden, wurde hier der Trait
\Alvine\Application\Platform\Builder\DataSource\Implementation\Commerce\Order\Position
verwendet.
$where=new \Alvine\Persistence\Relation\SQL\Where();
/**
* nur Lieferungen dieser Bestellung
*/
$where->addFilter(new \Alvine\Persistence\Relation\Field\Integer('sh_delivery', 'OID'), $oid);
/**
* nur ausgelieferte
*/
$where->addFilter(new \Alvine\Persistence\Relation\Field\Integer('sh_delivery', 'state'), 15);
$contextBuilder=\Alvine\Application\Platform\Builder\DataSource\Commerce\Order\Delivery::getContextBuilder();
$datasource=new class($contextBuilder->getContext(), null, null, $where) extends \Alvine\Application\Platform\Builder\DataSource\Commerce\Order\Delivery {
/**
* Positionen mit laden
*/
use \Alvine\Application\Platform\Builder\DataSource\Implementation\Commerce\Order\Position;
};
foreach($datasource->iterate() as $delivery) {
$deliveries->append($delivery);
}