Datasource - Anwendungsbeispiel

Im folgenden wird ein Beispiel beschrieben zur Erstellung einer einfachen Datasource auf Basis eines bestehenden Models.

Dateistruktur

Folgende Dateistruktur ist gegeben. {PROJEKTNAME} steht hier als Platzhalter.


│
├─ application
│   └ config
│      ├ alvine-platform
│         └ route (Routendefinition) XML Dateien
│   └ legacy
│      ├ resource
│         └ template
│            └ {PROJEKTNAME}
│               └ etc
│                  └ builder (Builder - JSON Konfiguration)
│               └ var
│                  └ builder
│                     └ templates (Builder - Templates HTML Fragmente)
│      ├ source
│         └ builder
│            └ datasource (Builder - Datasource PHP Klassen)

Zusammenfassung der notwendigen Schritte

  1. Datasource im eigenen Namespace anlegen
  2. HTML - Template Fragment anlegen
  3. Builder - Json Konfiguration anlegen
  4. Route Konfigurieren
  5. Builder - HTML - Fragment generieren

1. Beispiel: Datasource im eigenen Namespace anlegen

Datasource - Klassen sollten wenn Customized im Projektpfad in folgendem Pfad abgelegt werden: application/source/builder/datasource/...

Folgende Beispielklasse zeigt anhand des Models Company die Basisdefinition und Methoden für eine angepasste Datasource zur weiteren Nutzung.

´ <?php

namespace CustomisationBuilderDataSourceCommerce;

class Company extends AlvineApplicationPlatformBuilderDataSourceFromModel {

//

/**
 * injectDataSourceCompanyData
 * @param type $data
 * @return \Alvine\Types\Map
 */
public function injectDataSource_CompanyData($data): \Alvine\Types\Map {

    //Initialisieren des Company Managers und Ergänzend es Datasets um notwendige Felder zur Ausgabe

    $companyManager = \Alvine\Application\Assembly::getInstance()->getCompanyManager();
    $company = $companyManager->getCompanyByID($data->shid);
    $companyManager->initCompanyData($company,$this->context->getLocale());

    $data->setValue('contactFon1', $company->contactFon1);
    $data->setValue('contactMail', $company->contactMail);

    return $data;        
}


/*
 * finalizeDataSource_xyz
 */
public function finalizeDataSource_xyz($data): \Alvine\Types\Map {
    //Beispiel finalizeDataSource Aufruf wird aufgerufen nach allen injectDataSource

    return $data;
}

/**
 * liefert ein Model zurück
 * 
 * @return \Alvine\Application\Platform\Model\Entity Model
 */
public function getModel(): \Alvine\Application\Platform\Model\Entity {
    return new \Alvine\Application\Platform\Model\Company\Company();
}


/**
 * Diese Methode bietet die Möglichkeit 
 * die Daten nochmal vor der Rückgabe
 * manipulieren zu können
 * 
 * @param \Alvine\Types\Map $data
 * 
 * @return \Alvine\Types\Map $data
 */
public function finalize($data): \Alvine\Types\Map {
    parent::finalize($data);

    //Finalize ruft die finalizeDataSource methoden auf. Kommt also danach
    //Alle anderen finalizeInject - Methoden sind schon gelaufen . Letzter Verarbeiter!

    return $data;
}


// </editor-fold>

} ´