Je eerste module¶
Overzicht¶
Dit hoofdstuk helpt je bij het maken van jouw eerste Odoo-module en het implementeren ervan in jouw Odoo.sh-project.
Deze tutorial vereist :ref:`je hebt een project aangemaakt op Odoo.sh<odoosh-gettingstarted-create> `, en je kent de URL van je Github-repository.
Het basisgebruik van Git en Github wordt jeitgelegd.
De onderstaande aannames zijn gemaakt:
~/src is de map waar de Git-repository’s staan die verband houden met jouw Odoo-projecten,
odoo is de Github-gebruiker,
odoo-addons is de Github-repository,
feature-1 is de naam van een ontwikkelingstak,
master is de naam van de productietak,
mijn_module is de naam van de module.
Vervang deze door de waarden van jouw keuze.
Maak de ontwikkelingstak¶
Van Odoo.sh¶
In de takkenweergave:
druk op de
+
knop naast de ontwikkelingsfase,kies de vestiging master in de Fork selectie,
typ feature-1 in de invoer To.
Zodra de build is gemaakt, hebt je toegang tot de editor en bladert je naar de map ~/src/user om toegang te krijgen tot de code van jouw ontwikkelingstak.
Vanaf je computer¶
Kloon jouw Github-repository op jouw computer:
$ mkdir ~/src
$ cd ~/src
$ git clone https://github.com/odoo/odoo-addons.git
$ cd ~/src/odoo-addons
Maak een nieuwe tak aan:
$ git checkout -b feature-1 master
Maak de modulestructuur¶
Het steigeren van de module¶
Hoewel dit niet noodzakelijk is, vermijden steigers de verveling van het instellen van de basisstructuur van de Odoo-module. Je kunt een nieuwe module bouwen met behulp van het uitvoerbare bestand odoo-bin.
Vanuit de Odoo.sh-editor, in een terminal:
$ odoo-bin scaffold my_module ~/src/user/
Of, vanaf jouw computer, als je een installatie van Odoo heeft:
$ ./odoo-bin scaffold my_module ~/src/odoo-addons/
Als je geen moeite wilt doen om Odoo op jouw computer te installeren, kunt je ook dit modulestructuursjabloon downloaden
waarin je elke keer dat mijn_module voorkomt, vervangt door de naam van jouw keuze.
De onderstaande structuur wordt gegenereerd:
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
Waarschuwing
Gebruik geen andere speciale tekens dan het onderstrepingsteken ( _ ) voor jouw modulenaam, zelfs geen koppelteken ( - ). Deze naam wordt gebruikt voor de Python-klassen van jouw module, en het hebben van een klassennaam met andere speciale tekens dan het onderstrepingsteken is niet geldig in Python.
Verwijder commentaar op de inhoud van de bestanden:
models/models.py, een voorbeeld van een model met zijn velden,
views/views.xml, een boomstructuur en een formulierweergave, waarbij de menu’s deze openen,
demo/demo.xml, demorecords voor het bovenstaande voorbeeldmodel,
controllers/controllers.py, een voorbeeld van een controller die bepaalde routes implementeert,
views/templates.xml, twee voorbeeld qweb-weergaven gebruikt door de bovenstaande controllerroutes,
__manifest__.py, het manifest van jouw module, inclusief bijvoorbeeld de titel, beschrijving en te laden gegevensbestanden. Je hoeft alleen maar het commentaar op het gegevensbestand van de toegangscontrolelijst te verwijderen:
# 'security/ir.model.access.csv',
Handmatig¶
Als je jouw modulestructuur handmatig wilt maken, kunt je de Server framework 101 tutorial volgen om de structuur van een module en de inhoud van elk bestand te begrijpen.
Push de ontwikkelingstak¶
Breng de veranderingen in kaart die moeten worden doorgevoerd
$ git add my_module
Leg jouw wijzigingen vast
$ git commit -m "My first module"
Push jouw wijzigingen naar jouw externe opslagplaats
Vanaf een Odoo.sh-editorterminal:
$ git push https HEAD:feature-1
Het bovenstaande commando wordt uitgelegd in de sectie :ref:`Commit & Push jouw wijzigingen<odoosh-gettingstarted-online-editor-push> ` van de :ref:`Online-editor<odoosh-gettingstarted-online-editor> ` hoofdstuk. Het bevat uitleg over het feit dat je wordt gevraagd jouw gebruikersnaam en wachtwoord in te voeren en wat je moet doen als je tweefactorauthenticatie gebruikt.
Of vanaf jouw computerterminal:
$ git push -u origin feature-1
Je hoeft alleen voor de eerste push -je origin feature-1 op te geven. Vanaf dat moment kunt je eenvoudigweg jouw toekomstige wijzigingen vanaf jouw computer pushen
$ git push
Test jouw module¶
Jouw vertakking zou moeten verschijnen in jouw ontwikkelingsvertakkingen in jouw project.
In de filiaalweergave van jouw project kunt je op de naam van jouw filiaal in het linkernavigatiepaneel klikken om toegang te krijgen tot de geschiedenis ervan.
Hier kunt je de wijzigingen zien die je zojuist heeft doorgevoerd, inclusief de opmerking die je heeft ingesteld. Zodra de database klaar is, kunt je deze openen door op de knop Verbinden te klikken.
Als jouw Odoo.sh-project is geconfigureerd om jouw module automatisch te installeren, zult je deze direct zien tussen de database-apps. Anders is het beschikbaar in de apps om te installeren.
Vervolgens kunt je met jouw module spelen, nieuwe records maken en jouw functies en knoppen testen.
Test met de productiegegevens¶
Voor deze stap heeft je een productiedatabase nodig. Je kunt het aanmaken als je het nog niet hebt.
Nadat je jouw module in een ontwikkelingsbuild met de demogegevens hebt getest en denkt dat deze gereed is, kunt je deze testen met de productiegegevens met behulp van een staging-branch.
Je kan of:
Maak van jouw ontwikkelingsbranch een staging-branch, door deze naar de sectietitel staging te slepen en neer te zetten.
Voeg het samen in een bestaande staging branch, door het naar de gegeven staging branch te slepen en neer te zetten.
Je kunt ook het git merge
commando gebruiken om je branches samen te voegen.
Hierdoor wordt een nieuwe staging-build gemaakt, die de productiedatabase dupliceert en laat draaien op een server die is bijgewerkt met de laatste wijzigingen van jouw branche.
Zodra de database klaar is, kunt je deze openen via de knop Verbinden.
Installeer jouw module¶
Jouw module wordt niet automatisch geïnstalleerd, je moet deze installeren vanuit het apps-menu. Het doel van de staging-build is inderdaad om het gedrag van jouw wijzigingen te testen zoals het zou zijn op jouw productie, en op jouw productie wilt je niet dat jouw module automatisch wordt geïnstalleerd, maar op aanvraag.
Het kan zijn dat jouw module ook niet direct in jouw apps verschijnt om te installeren, je moet eerst jouw lijst met apps bijwerken:
Activeer de :ref:`ontwikkelaarsmodus<developer-mode> `
klik in het apps-menu op de knop Apps-lijst bijwerken,
in het dialoogvenster dat verschijnt, klikt je op de knop Bijwerken.
Jouw module verschijnt dan in de lijst met beschikbare apps.
Implementeren in productie¶
Zodra je jouw module in een faseringsvertakking met jouw productiegegevens hebt getest en denkt dat deze klaar is voor productie, kunt je jouw vertakking samenvoegen in de productievertakking.
Sleep jouw staging branch naar de productie branch en zet deze daar neer.
Je kunt ook het git merge
commando gebruiken om je branches samen te voegen.
Hierdoor worden de laatste wijzigingen van jouw faseringsvertakking samengevoegd met de productievertakking, en wordt jouw productieserver bijgewerkt met deze laatste wijzigingen.
Zodra de database klaar is, kunt je deze openen via de knop Verbinden.
Installeer jouw module¶
Jouw module wordt niet automatisch geïnstalleerd, je moet deze handmatig installeren, zoals uitgelegd in de :ref:`bovenstaande sectie over het installeren van jouw module in staging-databases<odoosh-gettingstarted-firstmodule-productiondata-install> `.
Voeg een wijziging toe¶
In deze sectie wordt uitgelegd hoe je een wijziging in jouw module kunt aanbrengen door een nieuw veld in een model toe te voegen en dit te implementeren.
- Van de Odoo.sh-editor,
blader naar jouw modulemap ~/src/user/my_module,
open vervolgens het bestand models/models.py.
- Of, vanaf jouw computer,
gebruik de bestandsbrowser van jouw keuze om naar jouw modulemap ~/src/odoo-addons/my_module te bladeren,
open vervolgens het bestand models/models.py met de editor van jouw keuze, zoals Atom, Sublime Text, PyCharm, vim, …
Vervolgens na het beschrijvingsveld
description = fields.Text()
Voeg een datum/tijd-veld toe
start_datetime = fields.Datetime('Start time', default=lambda self: fields.Datetime.now())
Open vervolgens het bestand views/views.xml.
Na
<field name="value2"/>
Toevoegen
<field name="start_datetime"/>
Deze wijzigingen veranderen de databasestructuur door een kolom aan een tabel toe te voegen, en wijzigen een weergave die in de database is opgeslagen.
Om te kunnen worden toegepast in bestaande databases, zoals jouw productiedatabase, vereisen deze wijzigingen dat de module wordt bijgewerkt.
Als je wilt dat de update automatisch wordt uitgevoerd door het Odoo.sh-platform wanneer je jouw wijzigingen doorvoert, verhoogt je jouw moduleversie in het manifest.
Open het modulemanifest __manifest__.py.
Vervangen
'version': '0.1',
met
'version': '0.2',
Het platform zal de versiewijziging detecteren en de update van de module activeren bij de implementatie van de nieuwe revisie.
Blader naar jouw Git-map.
Vervolgens vanaf een Odoo.sh-terminal:
$ cd ~/src/user/
Of vanaf jouw computerterminal:
$ cd ~/src/odoo-addons/
Zorg er vervolgens voor dat jouw wijzigingen worden doorgevoerd
$ git add my_module
Leg jouw wijzigingen vast
$ git commit -m "[ADD] my_module: add the start_datetime field to the model my_module.my_module"
Push jouw wijzigingen:
Vanaf een Odoo.sh-terminal:
$ git push https HEAD:feature-1
Of vanaf jouw computerterminal:
$ git push
Het platform maakt dan een nieuwe build voor de branche feature-1.
Nadat je jouw wijzigingen heeft getest, kunt je jouw wijzigingen in de productietak samenvoegen, bijvoorbeeld door de vertakking naar de productietak in de Odoo.sh-interface te slepen en neer te zetten. Naarmate je de moduleversie in het manifest hebt verhoogd, zal het platform de module automatisch bijwerken en is jouw nieuwe veld direct beschikbaar. Anders kunt je de module handmatig bijwerken in de lijst met apps.
Gebruik een externe Python-bibliotheek¶
Als je een externe Python-bibliotheek wilt gebruiken die niet standaard is geïnstalleerd, kunt je een requirements.txt-bestand definiëren met de externe bibliotheken waarvan jouw modules afhankelijk zijn.
Notitie
Het is niet mogelijk om systeempakketten op een Odoo.sh-database te installeren of te upgraden (bijvoorbeeld apt-pakketten). Onder specifieke omstandigheden kunnen pakketten echter in aanmerking komen voor installatie. Dit geldt ook voor Python-modules die systeempakketten vereisen voor hun compilatie, en ODOO-modules van derden.
PostgreSQL-extensies worden niet ondersteund op Odoo.sh.
Raadpleeg voor meer informatie onze FAQ.
Het platform gebruikt dit bestand om automatisch de Python-bibliotheken te installeren die jouw project nodig heeft.
De functie wordt in deze sectie uitgelegd door gebruik te maken van de Unidecode-bibliotheek in jouw module.
Maak een bestand requirements.txt in de hoofdmap van jouw repository
Maak en open vanuit de Odoo.sh-editor het bestand ~/src/user/requirements.txt.
Of maak en open vanaf jouw computer het bestand ~/src/odoo-addons/requirements.txt.
Toevoegen
unidecode
Gebruik dan de bibliotheek in jouw module om bijvoorbeeld accenten te verwijderen uit tekens in het naamveld van jouw model.
Open het bestand models/models.py.
Eerder
from odoo import models, fields, api
Toevoegen
from unidecode import unidecode
Na
start_datetime = fields.Datetime('Start time', default=lambda self: fields.Datetime.now())
Toevoegen
@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)
Voor het toevoegen van een Python-afhankelijkheid is een uitbreiding van de moduleversie vereist voordat het platform deze kan installeren.
Bewerk het modulemanifest __manifest__.py
Vervangen
'version': '0.2',
met
'version': '0.3',
Voer jouw wijzigingen jeit en voer deze door:
$ 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"
Push vervolgens jouw wijzigingen:
In een Odoo.sh-terminal:
$ git push https HEAD:feature-1
In jouw computerterminal:
$ git push