6

Eigenes Modul in OFBiz entwickeln

Geschrieben am 29.04.2011 in Tutorials von Mirko Vogelsmeier

Ich möchte euch in diesem Tutorial das Erstellen eines neuen Modules in Apache OFBiz näher bringen. Wir werden zusammen eine neue Frontend-Application entwickeln und einen Wert aus der Datenbank auslesen. Zum starten benötigt ihr nur ein bereits konfiguriertes OFBiz, eine Anleitung findet ihr in meinem Tutorial Installation und Konfiguration von Apache OFBiz.

Die Ordnerstruktur

Alle eigenen Module sollten in dem „hot-deploy“-Ordner angelegt werden. Hier existierende Module werden automatisch von OFBiz nach dem Start nacheinander geladen. Zunächst legen wir die komplette Ordnerstruktur für unser Modul an (siehe Bild). Über das Ant-Target „create-component“ ist dies in wenigen Schritten durchzuführen (im folgenden Tutorial verwende ich diesen Mechanismus nicht):

  1. Nach dem Starten der Ant-Task muss der Komponenten-Name, also „ofbizbiz-frontend“ eingegeben werden. Hierbei handelt es sich um den Namen des Orders im „hot-deploy“-Verzeichnis.
  2. Der „Resource-Name“ ist „OfbizBiz“. Dieser sorgt dafür, dass Ladedaten und Labeldatei erstellt werden (Bsp. die Labeldatei OfbizBizUiLabels.xml).
  3. Hier wird der Name der Webapp und des Webapp-Ordners definiert, also „ofbizbiz“.
  4. Es müssen die Benutzerrechte zum Sehen des Moduls eingetragen werden. Wir verwenden die Standard-Rechte „OFBTOOLS“.
  5. Abschließend muss die Eingabe per „Y“ bestätigt werden.

Die Struktur einer Application in OFBiz

Edit: Danke an JCocktail für den Hinweis, dass die Verzeichnisstruktur automatisch über ANT angelegt werden kann und nicht manuell erstellt werden muss.

Nachdem dies geschehen ist, müssen wir dafür sorgen, dass OFBiz unser neues Modul auch als solches erkennt.

Die ofbiz-component.xml

Dafür erstellen wir die ofbiz-component.xml im Modulordner. Hier definieren wir zu unseren Komponenten-Namen und Pfade zu unseren hinzugefügten libs, zu dem build-Ordner in welchem die kompilierten Java-Sourcen liegen, sowie dem config-Ordner für unsere property- und UiLabels (siehe unten). Erster Teil der ofbiz-component.xml Außerdem können „entity-resourcen“ oder „service-resourcen“ definiert werden, welche wir für dieses Beispiel allerdings nicht benötigen. Im letzten Teil beschreiben wir die Webapp. Es ist auch möglich, mehrere Webapps pro Modul anzulegen. Hier eine kurze Beschreibung der Attribute:

  • Name = Der Name des Moduls, wird in den „Modul-Tabs“ in OFBiz angezeigt
  • Titel = Der Titel der Anwendung in der Browserzeile
  • Server = Name des Servers
  • Location = Ort vom Modul aus gesehen, an welcher sich die Webapp befindet.
  • Base-permission = Die Rechte, die benötigt werden um das Modul sehen zu können.
  • Mount-Point = „Die URL der Webapp“, hier http://localhost:8080/ofbizbiz

Definition der Webapp in der ofbiz-component.xml (teil 2) Anschließend wird die web.xml im webapp/ofbizbiz/WEB-INF erstellt. Da diese Datei viele spezifische Attribute beinhaltet, werde ich hier nicht weiter drauf eingehen. Ich empfehle die von mir erstellte Datei im Anhang zu verwenden.

Request-Verarbeitung

Sobald ein Request eingeht, wählt das System anhand des erkannten „mount-points“ die entsprechende controller.xml des angesprochenen Webapps aus. In der Datei wird die request-map gewählt und über die Response an die view-map weitergeleitet. Üblicherweise definiert die view-map einen Screen, welcher OFBiz-Forms (meist im Backend vorhanden) oder Freemarker-Dateien beinhaltet. Schaubild: Vom Request zur FTL Die im Bild aufgeführten Dateien (controller.xml, CommonScreens.xml und main.ftl) finden Sie im Anhang unter dem Namen Erstes-OFBiz-Modul-Step1.  

Die erste Datenbank-Abfrage

Nachdem die erste FTL erfolgreich erstellt wurde, können wir anfangen, Inhalte dynamisch zu gestalten. In meinen Beispieldateien lade ich die personenbezogenen Daten von dem Administrator (mit der partyId „admin“) aus der Datenbank. Hierfür erstelle ich ein Groovy-Script mit dem Namen getAdminPerson.groovy unter webapp/ofbizbiz/WEB-INF/actions. Um auf die Datenbank zuzugreifen verwendet ich das Delegator-Objekt (siehe Interface: Delegator.java), welches in jedem Screen vorhanden ist. Ein einfaches Groovy-Script zum lesen aus der Datenbank Nun erweitere ich meinen Screen „main“ um ein „action“-Element, welche mein Script ausführt. Ein OFBiz-Screen erweitert um ein Groovy-Script Anschließend lasse ich die Daten in meiner FTL ausgeben: Auch diese Dateien finden Sie im Anhang: Erstes-OFBiz-Modul-Step2.

Die Verwendung von uiLabels

Wir stellen nun bereits Datenbankinhalte in der main.ftl dynamisch dar. Jedoch ist der restliche Text noch statisch im Code hinterlegt. Dies könnte uns bei einer Internationalisierung unnötige Probleme bereiten. Um daher auch den restlichen Text entsprechend der eingestellten Sprache darstellen zu können, verwendet OFBiz die so genannten UiLabels. UiLabels sind Listen von Übersetzungen für Texte und funktionieren nach dem Key-Value-Prinzip. Wir erstellen uns nun eine OFBizBizUiLabels.xml im config-Ordner des Moduls, welche wie folgt aussieht: Der Inhalt einer OFBiz Label Datei Nun wird die Datei im Action-Bereich meines Screens eingebunden: Ein OFBiz-Screen wurde um eine uiLabelMap erweitert und anschließend in der FTL darauf zugegriffen: Eine Freemarker-Datei mit UiLabels Und hier der letzte Schritt im Anhang: Erstes-OFBiz-Modul-Step3.  

Sind Fragen unbeantwortet geblieben? Hinterlassen Sie einen Kommentar!

Dieser Artikel gefällt Ihnen? Sagen Sie's Ihren Freunden:

6 Antworten bisher.

  1. Hanspeter sagt:

    Hallo
    Schöne Dokumentation zu OFB. Leider kann ich die Dateien zum erstellen eines eigenen Moduls nicht herunterladen, es heisst die Seite wurde nicht gefunden. Können Sie mir bitte weiterhelfen?
    Danke

  2. JCocktail sagt:

    Für Faule, man kann die Ordnerstruktur auch automatisch anlegen lassen:

    cd c:\Tools\apache-ofbiz-10.04\
    c:\Tools\apache-ofbiz-10.04>ant create-component


    Buildfile: build.xml

    create-component:
    [input] Component name:
    ofbizbiz-frontend
    [input] Component resource name:
    OfBizbiz Frontend Modul
    [input] Webapp name:
    ofbizbiz
    [input] Base permission:
    OFBIZBIZ
    [echo] The following hot-deploy component will be created:
    [echo] Name: ofbizbiz-frontend
    [echo] Resource Name: OfBizbiz Frontend Modul
    [echo] Webapp Name: ofbizbiz
    [echo] Base permission: OFBTOOLS
    [echo] Folder: c:\Tools\apache-ofbiz-10.04/hot-deploy/ofbizbiz-frontend
    [echo]
    [input] Confirm: (Y, [N], y, n)
    y

Hinterlassen Sie eine Antwort





*