In der Odoo-Entwicklung ist es aufgrund spezifischer Anforderungen häufig erforderlich, Anpassungen am Partner-Modell (technisch: „res.partner“) vorzunehmen, das sowohl in der Kontakte-App als auch in vielen weiteren Geschäftsmodellen wie Aufträgen, Chancen oder Rechnungen verwendet wird. Nach der Implementierung solcher Änderungen treten jedoch oft Fehler auf. In diesem Artikel gehen wir auf die Ursachen ein und präsentieren wertvolle Lösungsvorschläge.
Wie kommt es zu der Fehlermeldung bei der Partnererweiterung in Odoo?
Eine der zuvor erwähnten typischen Fehlermeldungen kann zum Beispiel folgende sein:
Fehlermeldung auf der Odoo-Oberfläche
Fehlermeldung im Odoo-Log
Wird das Partner-Modell um ein neues Feld erweitert, kommt es zu der oben genannten Fehlermeldung. Beim Starten des Odoo-Servers werden alle Python-Dateien geladen, einschließlich derjenigen, welche die Felderweiterung enthalten. Dies geschieht jedoch nur innerhalb der Anwendung, nicht auf Datenbankebene. Sobald die Anwendung genutzt wird, versucht sie, Daten aus der Datenbank zu laden. Wenn das neue Feld jedoch nicht in der Datenbank vorhanden ist, tritt der Fehler auf.
Bei Erweiterungen anderer Modelle fällt dieser Fehler nicht sofort auf, da deren Nutzung in Odoo nicht allgegenwärtig ist. Beim Modell „res.partner“ gibt es jedoch eine Besonderheit: Der Nutzer („res.user“) erbt vom Partner-Modell. Daher sind alle Felder des Partners (und einige zusätzliche) auch im Nutzer-Modell vorhanden. Da in Odoo stets ein Nutzer angemeldet und aktiv ist, tritt der Fehler bei Erweiterungen des Partner-Modells auf, bei anderen Modellen jedoch nicht. Auch Nutzer des Mandantenmodells (technisch: „res.company“) können mit diesem Problem konfrontiert werden.
Wie kann das Problem im Odoo Partner-Modell gelöst werden?
Um die Fehlermeldungen zu umgehen bzw. den Fehler zu beseitigen, kann auf verschiedene Strategien zurückgegriffen werden:
1. Vor dem Neustart des Odoo-Servers die App-Oberfläche geöffnet halten
Wenn die App-Oberfläche bereits geöffnet ist, kann das Modul weiterhin aktualisiert werden. Die Anwendung von Filtern und Gruppierungen ist zu diesem Zeitpunkt allerdings nicht mehr möglich.
2. Das Modul über das Terminal aktualisieren
Ein anderer Weg ist das Update des betreffenden Moduls über das Terminal. Dazu kann folgender Befehl verwendet werden:
odoo -c <path_to_config> -u <module_name> -d <database_name> |
Manchmal ist die Verwendung dieses Befehls nicht möglich, weil Odoo als Service gestartet wurde. In diesem Fall hilft der Start eines zweiten Services, der lediglich zur Aktualisierung des Moduls genutzt und danach sofort gestoppt wird.
odoo -c <path_to_config> -d <database_name> -u <module_name> --no-http --stop-after-init |
Mit ausgefüllten Parametern könnte dieser Befehl wie folgt aussehen:
odoo -c /etc/odoo/odoo.conf -d blog -u intero_test --no-http --stop-after-init |
3. Felder manuell der Datenbank hinzufügen
Auch das manuelle Hinzufügen der Felder zur Datenbank behebt das Problem. Würde man ausschließlich das Feld nice_person hinzufügen, könnte die Datenbank-Query wie folgt aussehen:
ALTER TABLE res.partner ADD COLUMN nice_person Boolean; |
4. Modul über die Datenbank aktualisieren
Über die Datenbank könnte man ein Modul zum Update ausschreiben. Nach einem anschließenden Neustart des Odoo-Servers wird das Modul aktualisiert.
UPDATE ir_module_module SET state = 'to upgrade' WHERE name = 'intero_test'; |
Reibungslose Partnererweiterungen durch effiziente Lösungsansätze
Die Erweiterung des Partner-Modells in Odoo kann essenziell sein, um spezifische Geschäftsanforderungen zu erfüllen. Sie birgt jedoch das Risiko von Fehlern, die insbesondere aufgrund der engen Verknüpfung mit dem Nutzer-Modell auftreten können. Beispielsweise mit einer Aktualisierung des Moduls über das Terminal oder dem manuellen Hinzufügen von Feldern zur Datenbank lassen sich diese Probleme schnell beheben. Auf diese Weise können Entwickler Anpassungen reibungslos integrieren.