Ihr erstes Modul

Übersicht

Dieses Kapitel hilft Ihnen, Ihr erstes Odoo-Modul zu erstellen und es in Ihrem Odoo.sh-Projekt einzusetzen.

Diese Anleitung setzt voraus, dass Sie ein Projekt auf Odoo.sh erstellt haben und die URL Ihres Github-Repositorys kennen.

Grundverwendung von Git und Github wird erklärt.

Die folgenden Annahmen werden getroffen:

  • ~/src ist das Verzeichnis, in dem sich die Git-Repositorys für Ihre Odoo-Projekte befinden,

  • odoo ist der Github-Benutzer,

  • odoo-addons ist das Github-Repository,

  • feature-1 ist der Name eines Entwicklungszweigs,

  • master ist der Name des Produktionszweigs,

  • my_module ist der Name des Moduls.

Ersetzen Sie sie durch die Werte Ihrer Wahl.

Den Entwicklungszweig erstellen

Von Odoo.sh

In der Zweige-Ansicht:

  • klicken Sie auf die Schaltfläche + neben der Entwicklungsstufe,

  • wählen Sie den Zweig master in der Auswahl Fork,

  • geben Sie feature-1 in das Feld To ein.

    pic1 pic2

Sobald der Build erstellt wurde, können Sie auf den Editor zugreifen und in den Ordner ~/src/user wechseln, um auf den Code Ihres Entwicklungszweigs zuzugreifen.

../../../_images/firstmodule-development-editor.png ../../../_images/firstmodule-development-editor-interface.png

Von Ihrem Computer

Klonen Sie Ihr Github-Repository auf Ihrem Computer:

$ mkdir ~/src
$ cd ~/src
$ git clone https://github.com/odoo/odoo-addons.git
$ cd ~/src/odoo-addons

Erstellen Sie einen neuen Zweig:

$ git checkout -b feature-1 master

Die Modulstruktur erstellen

Gerüst für Modul erstellen

Das Gerüst ist zwar nicht notwendig, aber es erspart Ihnen die mühsame Arbeit, die grundlegende Struktur der Odoo-Module festzulegen. Sie können ein neues Modul mit Hilfe der ausführbaren Datei odoo-bin einrichten.

Vom Odoo.sh-Editor im Terminal:

$ odoo-bin scaffold my_module ~/src/user/

Or, from your computer, if you have an installation of Odoo:

$ ./odoo-bin scaffold my_module ~/src/odoo-addons/

Wenn Sie Odoo nicht auf Ihrem Computer installieren möchten, können Sie auch diese Modulstrukturvorlage herunterladen, in der Sie jedes Vorkommen von my_module durch den Namen Ihrer Wahl ersetzen.

Die folgende Struktur wird generiert:

my_module
├── __init__.py
├── __manifest__.py
├── controllers
│   ├── __init__.py
│   └── controllers.py
├── demo
│   └── demo.xml
├── models
│   ├── __init__.py
│   └── models.py
├── security
│   └── ir.model.access.csv
└── views
    ├── templates.xml
    └── views.xml

Warnung

Verwenden Sie für Ihren Modulnamen keine anderen Sonderzeichen als den Unterstrich ( _ ), auch keinen Bindestrich ( - ). Dieser Name wird für die Python-Klassen Ihres Moduls verwendet, und ein Klassenname mit anderen Sonderzeichen als dem Unterstrich ist in Python nicht zulässig.

Kommentieren Sie den Inhalt der Dateien aus:

  • models/models.py, ein Beispiel des Modells mit seinen Feldern,

  • views/views.xml, eine Baum- und eine Formularansicht, die Sie über die Menüs öffnen können,

  • demo/demo.xml, Demo-Datensätze für das obige Beispielmodell,

  • controllers/controllers.py, ein Beispiel für einen Controller, der einige Routen implementiert,

  • views/templates.xml, zwei Beispiel-qweb-Ansichten, die von den obigen Controller-Routen verwendet werden,

  • __manifest__.py, das Manifest Ihres Moduls, das z. B. den Titel, die Beschreibung und die zu ladenden Datendateien enthält. Sie müssen nur die Datei der Zugriffskontrolllisten auskommentieren:

    # 'security/ir.model.access.csv',
    

Manuell

Wenn Sie Ihre Modulstruktur manuell erstellen möchten, können Sie dem Getting started-Tutorial folgen, um die Struktur eines Moduls und den Inhalt der einzelnen Dateien zu verstehen.

Den Entwicklungszweig übertragen

Inszinieren Sie die zu übertragenden Änderungen

$ git add my_module

Übertragen Sie Ihre Änderungen

$ git commit -m "My first module"

Übertragen Sie Ihre Änderungen auf Ihr Remote-Repository

Von einem Odoo.sh-Editorterminal:

$ git push https HEAD:feature-1

Der obige Befehl wird im Abschnitt Änderungen festsetzen & übertragen des Kapitels Online-Editor erklärt. Dort wird auch erklärt, dass Sie aufgefordert werden, Ihren Benutzernamen und Ihr Passwort einzugeben, und was zu tun ist, wenn Sie die Zwei-Faktor-Authentifizierung verwenden.

Oder von Ihrem Computerterminal:

$ git push -u origin feature-1

Sie müssen -u origin feature-1 nur für die erste Übertragung angeben. Von diesem Zeitpunkt an können Sie Ihre zukünftigen Änderungen von Ihrem Computer aus übertragen, indem Sie einfach Folgendes verwenden:

$ git push

Ihr Modul testen

Ihr Zweig sollte in den Entwicklungszweigen Ihres Projekts erscheinen.

../../../_images/firstmodule-test-branch.png

In der Zweige-Ansicht Ihres Projekts können Sie in der linken Navigationsleiste auf den Namen Ihres Zweigs klicken, um dessen Historie aufzurufen.

../../../_images/firstmodule-test-branch-history.png

Hier sehen Sie die Änderungen, die Sie soeben vorgenommen haben, einschließlich des von Ihnen festgelegten Kommentars. Sobald die Datenbank bereit ist, können Sie auf sie zugreifen, indem Sie auf die Schaltfläche Verbinden klicken.

../../../_images/firstmodule-test-database.png

Wenn Ihr Odoo.sh-Projekt so konfiguriert ist, dass Ihr Modul automatisch installiert wird, sehen Sie es direkt unter den Datenbankapps. Andernfalls ist es unter den zu installierenden Apps verfügbar.

Sie können dann mit Ihrem Modul herumspielen, neue Datensätze erstellen und Ihre Funktionen und Schaltflächen testen.

Mit den Produktionsdaten testen

Für diesen Schritt benötigen Sie eine Produktionsdatenbank. Sie können sie erstellen, wenn Sie sie noch nicht haben.

Sobald Sie Ihr Modul in einem Entwicklungs-Build mit den Demodaten getestet haben und glauben, dass es fertig ist, können Sie es mit den Produktionsdaten in einem Staging-Zweig testen.

Es gibt 2 Optionen:

  • Machen Sie Ihren Entwicklungszweig zu einem Staging-Zweig, indem Sie ihn per Drag-and-drop in den Staging-Abschnittstitel ziehen.

    ../../../_images/firstmodule-test-devtostaging.png
  • Führen Sie ihn in einem bestehenden Staging-Zweig zusammen, indem Sie ihn per Drag-and-drop in den entsprechenden Staging-Zweig ziehen.

    ../../../_images/firstmodule-test-devinstaging.png

Sie können auch den Befehl git merge verwenden, um Ihre Zweige zusammenzuführen.

Dadurch wird ein neuer Staging-Build erstellt, der die Produktionsdatenbank dupliziert und auf einem mit den neuesten Änderungen aus Ihrem Zweig aktualisierten Server ausgeführt wird.

../../../_images/firstmodule-test-mergedinstaging.png

Sobald die Datenbank bereit ist, können Sie über die Schaltfläche Verbinden auf sie zugreifen.

Ihr Modul installieren

Ihr Modul wird nicht automatisch installiert, Sie müssen es über das Apps-Menü installieren. Der Zweck des Staging-Builds besteht nämlich darin, das Verhalten Ihrer Änderungen in der Produktion zu testen. In der Produktion möchten Sie nicht, dass Ihr Modul automatisch installiert wird, sondern nur bei Bedarf.

Möglicherweise erscheint Ihr Modul auch nicht direkt in den zu installierenden Apps, sondern Sie müssen erst Ihre App-Liste aktualisieren:

  • Aktivieren Sie den Entwicklermodus

  • Klicken Sie im Apps-Menü auf die Schaltfläche Apps-Liste aktualisieren,

  • Klicken Sie im Dialog, der erscheint, auf die Schaltfläche Update.

    ../../../_images/firstmodule-test-updateappslist.png

Ihr Modul wird dann in der Liste der verfügbaren Apps angezeigt.

../../../_images/firstmodule-test-mymoduleinapps.png

In Produktion einsetzen

Sobald Sie Ihr Modul in einem Staging-Zweig mit Ihren Produktionsdaten getestet haben und glauben, dass es für die Produktion bereit ist, können Sie Ihren Zweig mit dem Produktionszweig zusammenführen.

Ziehen Sie Ihren Staging-Zweig per Drag-and-drop auf den Produktionszweig.

../../../_images/firstmodule-test-mergeinproduction.png

Sie können auch den Befehl git merge verwenden, um Ihre Zweige zusammenzuführen.

Dadurch werden die letzten Änderungen Ihres Staging-Zweigs in den Produktionszweig zusammengeführt und Ihr Produktionsserver mit diesen neuesten Änderungen aktualisiert.

../../../_images/firstmodule-test-mergedinproduction.png

Sobald die Datenbank bereit ist, können Sie über die Schaltfläche Verbinden auf sie zugreifen.

Ihr Modul installieren

Ihr Modul wird nicht automatisch installiert. Sie müssen es manuell installieren, wie im obigen Abschnitt über die Installation Ihres Moduls in Staging-Datenbanken beschrieben.

Eine Änderung hinzufügen

In diesem Abschnitt wird erklärt, wie Sie eine Änderung in Ihrem Modul vornehmen, indem Sie ein neues Feld in einem Modell hinzufügen und es bereitstellen.

Vom Odoo.sh-Editor:
  • gehen Sie zu Ihrem Modulordner ~/src/user/my_module,

  • öffnen Sie dann die Datei models/models.py.

Oder von Ihrem Computer
  • verwenden Sie den Dateibrowser Ihrer Wahl, um zu Ihrem Modulordner ~/src/odoo-addons/my_module zu gelangen,

  • öffnen Sie dann die Datei models/models.py mit einem Editor Ihrer Wahl, z. B. Atom, Sublime Text, PyCharm, vim

Dann nach dem Beschreibungsfeld

description = fields.Text()

Fügen Sie ein Datum/Zeit-Feld hinzu

start_datetime = fields.Datetime('Start time', default=lambda self: fields.Datetime.now())

Öffnen Sie dann die Datei views/views.xml.

Nach

<field name="value2"/>

fügen Sie Folgendes hinzu:

<field name="start_datetime"/>

Diese Änderungen verändern die Datenbankstruktur, indem sie eine Spalte in einer Tabelle hinzufügen und eine in der Datenbank gespeicherte Ansicht ändern.

Damit diese Änderungen in bestehenden Datenbanken, z. B. in Ihrer Produktionsdatenbank, angewendet werden können, muss das Modul aktualisiert werden.

Wenn Sie möchten, dass die Aktualisierung automatisch von der Odoo.sh-Plattform durchgeführt wird, wenn Sie Ihre Änderungen übertragen, erhöhen Sie die Version Ihres Moduls in seinem Manifest.

Öffnen Sie das Modul manifest __manifest__.py.

Ersetzen Sie

'version': '0.1',

mit

'version': '0.2',

Die Plattform erkennt die Versionsänderung und veranlasst die Aktualisierung des Moduls bei der Bereitstellung der neuen Version.

Gehen Sie zu Ihrem Git-Ordner.

Dann von einem Odoo.sh-Terminal:

$ cd ~/src/user/

Oder von Ihrem Computerterminal:

$ cd ~/src/odoo-addons/

Inszinieren Sie dann die festzusetzenden Änderungen

$ git add my_module

Übertragen Sie Ihre Änderungen

$ git commit -m "[ADD] my_module: add the start_datetime field to the model my_module.my_module"

Übertragen Sie Ihre Änderungen:

Von einem Odoo.sh-Terminal:

$ git push https HEAD:feature-1

Oder von Ihrem Computerterminal:

$ git push

Die Plattform erstellt dann einen neuen Build für den Zweig feature-1.

../../../_images/firstmodule-test-addachange-build.png

Sobald Sie Ihre Änderungen getestet haben, können Sie sie in den Produktionszweig einfügen, indem Sie beispielsweise den Zweig in der Odoo.sh-Schnittstelle per Drag-and-Drop auf den Produktionszweig ziehen. Da Sie die Modulversion im Manifest erhöht haben, wird die Plattform das Modul automatisch aktualisieren und Ihr neues Feld wird direkt verfügbar sein. Andernfalls können Sie das Modul manuell in der Liste der Anwendungen aktualisieren.

Eine externe Python-Bibliothek verwenden

Wenn Sie eine externe Python-Bibliothek verwenden möchten, die nicht standardmäßig installiert ist, können Sie eine requirements.txt-Datei definieren, in der die externen Bibliotheken aufgeführt sind, von denen Ihre Module abhängen.

Bemerkung

  • Es ist nicht möglich, Systempakete auf einer Odoo.sh-Datenbank zu installieren oder ein Upgrade zu erstellen (z. B. apt-Pakete). Unter bestimmten Bedingungen können jedoch Pakete für die Installation in Betracht gezogen werden. Dies gilt auch für Python-Module, die Systempakete für ihre Kompilierung benötigen, und Odoo-Module von Drittanbietern.

  • PostgreSQL-Erweiterungen werden nicht auf Odoo.sh unterstützen.

  • Konsultieren Sie für weitere Informationen unsere FAQ.

Die Plattform wird diese Datei verwenden, um automatisch die Python-Bibliotheken zu installieren, die Ihr Projekt benötigt.

Die Funktion wird in diesem Abschnitt durch die Verwendung der Unidecode-Bibliothek in Ihrem Modul erklärt.

Erstellen Sie eine Datei requirements.txt im Stammordner Ihres Repositorys

Erstellen und öffnen Sie im Odoo.sh-Editor die Datei ~/src/user/requirements.txt.

Oder erstellen und öffnen Sie auf Ihrem Computer die Datei ~/src/odoo-addons/requirements.txt.

fügen Sie Folgendes hinzu:

unidecode

Dann verwenden Sie die Bibliothek in Ihrem Modul, zum Beispiel um Akzente aus Zeichen im Namensfeld Ihres Modells zu entfernen.

Öffnen Sie die Datei models/models.py.

Vor

from odoo import models, fields, api

fügen Sie Folgendes hinzu:

from unidecode import unidecode

Nach

start_datetime = fields.Datetime('Start time', default=lambda self: fields.Datetime.now())

fügen Sie Folgendes hinzu:

@api.model
def create(self, values):
    if 'name' in values:
        values['name'] = unidecode(values['name'])
    return super(my_module, self).create(values)

def write(self, values):
    if 'name' in values:
        values['name'] = unidecode(values['name'])
    return super(my_module, self).write(values)

Das Hinzufügen einer Python-Abhängigkeit erfordert eine Erhöhung der Modulversion für die Plattform, um sie zu installieren.

Bearbeiten Sie das Modulmanifest __manifest__.py.

Ersetzen Sie

'version': '0.2',

mit

'version': '0.3',

Inszinieren Sie Ihre Änderungen und setzen Sie sie fest:

$ git add requirements.txt
$ git add my_module
$ git commit -m "[IMP] my_module: automatically remove special chars in my_module.my_module name field"

Übertragen Sie dann Ihre Änderungen:

In einem Odoo.sh-Terminal:

$ git push https HEAD:feature-1

In Ihrem Computerterminal:

$ git push