Maak een module

Voordat je je eerste module maakt, is het noodzakelijk om een Odoo.sh-project te maken en de URL van je GitHub-repository te kennen.

Woordenlijst

  • ~/src is de map waar de Git-repositories met betrekking tot je Odoo-projecten zich bevinden.

  • odoo is de GitHub-gebruiker.

  • odoo-addons is de GitHub-repository.

  • feature-1 is de naam van een ontwikkelingstak.

  • main is de naam van de productietak.

  • my_module is de naam van de module.

Vervang deze indien nodig.

Maak de ontwikkelingstak

Vanuit de Filialen-weergave:

  • Klik in het navigatiepaneel voor takken op de + (Nieuwe ontwikkelingstak)-knop naast Ontwikkeling.

  • Selecteer onder Fork de main-tak.

  • Voer onder Naar feature-1 in.

De productietak forken om een ontwikkelingstak te maken op Odoo.sh

Zodra de build klaar is, heb je toegang tot de editor en de code van je ontwikkelingstak vanuit de map ~/src/user.

Maak de modulestructuur

Scaffolding

Hoewel het niet verplicht is, bespaart scaffolding het vervelende werk van het opzetten van de basis Odoo-modulestructuur. Je kunt een nieuwe module scaffolden met het odoo-bin executable.

Voer vanuit de editor-terminal uit:

odoo-bin scaffold my_module ~/src/user/

Tip

Dit sjabloon voor de module-structuur downloaden. Vervang elk voorkomen van my_module 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
│   └── models.py
└── views
    ├── templates.xml
    └── views.xml

Waarschuwing

Gebruik alleen alfanumerieke tekens (a-z, 0-9) of underscores (_) bij het benoemen van je module, aangezien de naam wordt gebruikt voor Python-klassen en klassenamen met andere speciale tekens dan underscores niet geldig zijn in Python.

Verwijder de commentaartekens van de volgende bestanden:

  • models/models.py een voorbeeld van een model met zijn velden

  • views/views.xml een boom- en formulierweergave, met de menu’s die ze openen

  • demo/demo.xml demorecords voor het voorbeeldmodel

  • controllers/controllers.py een voorbeeld van een controller die enkele routes implementeert

  • views/templates.xml twee voorbeeld-qweb-weergaven die gebruikt worden door de controller-routes

  • __manifest__.py het manifest van je module, inclusief de titel, beschrijving en te laden databestanden. Verwijder de commentaartekens van het databestand voor de toegangscontrolelijst:

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

Handmatig

Volg de Server framework 101-tutorial om de structuur van een module en de inhoud van elk bestand te begrijpen om je module-structuur handmatig te maken.

Push naar de ontwikkelingstak

  1. Zet de wijzigingen klaar om te committen door het volgende uit te voeren:

    git add my_module
    
  2. Commit je wijzigingen door het volgende uit te voeren:

    git commit -m "My first module"
    
  3. Push je wijzigingen naar je externe repository door het volgende uit te voeren:

    Voer vanuit de editor-terminal uit:

    git push https HEAD:feature-1
    

Test de module

De tak zou moeten verschijnen onder het gedeelte Development van het navigatiepaneel Filialen-weergave.

Voorbeeld van een development branch

Klik op de branchnaam om de geschiedenis te bekijken, inclusief de wijzigingen die je zojuist hebt gepusht. Zodra de database klaar is, klik je op Verbinden om er toegang toe te krijgen.

De verbindingsknop om toegang te krijgen tot een database

Als je Odoo.sh-project is geconfigureerd om de module automatisch te installeren, verschijnt deze direct op het databasedashboard. Anders is deze beschikbaar voor installatie onder de app Apps.

De nieuwe module op het databasedashboard

Test met de productiegegevens

Notitie

Voor deze stap is een productiedatabase vereist. Als je er nog geen hebt, maak er dan een aan.

Zodra je de module hebt getest in een development build met de demodata en denkt dat deze klaar is, kun je deze testen met de productiedata via een staging branch.

Je kunt:

  • Je development branch converteren naar een staging branch door deze naar de sectie Staging te slepen.

  • Deze samenvoegen met een bestaande staging branch door deze op die branch te slepen.

  • Gebruik het commando git merge om je branches samen te voegen.

Dit creëert een nieuwe staging build die de productiedatabase dupliceert en deze draait op een server die is bijgewerkt met de laatste wijzigingen van je branch.

Zodra de database klaar is, klik je op Verbinden om er toegang toe te krijgen.

Installeer de module

Installeer de module vanuit de app Apps. Omdat de module mogelijk niet direct in de lijst met apps verschijnt, werk je de lijst met apps bij door de ontwikkelaarsmodus te activeren en op Update Apps List ‣ Update te klikken.

Notitie

De module wordt niet automatisch geïnstalleerd, omdat het doel van de staging build is om het gedrag van je wijzigingen te testen zoals ze op de productiedatabase zouden zijn, dus je wilt niet dat een module automatisch wordt geïnstalleerd.

Implementeren in productie

Zodra je de module hebt getest in een staging branch met de productiedata en denkt dat deze klaar is voor productie, kun je je branch samenvoegen met de productiebranch door:

  • De staging branch naar de productiebranch te slepen.

  • Het commando git merge te gebruiken om je branches samen te voegen.

Dit voegt de laatste wijzigingen van de staging branch samen met de productiebranch en werkt de productieserver ermee bij.

Zodra de database klaar is, klik je op Verbinden om deze te openen.

Installeer de module

Installeer de module vanuit de app Apps. Omdat de module mogelijk niet direct in de lijst met apps verschijnt, werk je de lijst met apps bij door de ontwikkelaarsmodus te activeren en op Update Apps List ‣ Update te klikken.

Voeg een wijziging toe

Deze sectie legt uit hoe je een wijziging toevoegt aan je module door een nieuw veld toe te voegen in een model en dit te deployen.

  1. Open vanuit de editor of vanaf je computer de modulemap ~/src/odoo-addons/my_module, en open vervolgens het bestand models/models.py om het te bewerken. Na het beschrijvingsveld:

    description = fields.Text()
    

    voeg je een datetime-veld toe:

    start_datetime = fields.Datetime('Start time', default=lambda self: fields.Datetime.now())
    
  2. Open het bestand views/views.xml en voeg na:

    <field name="value2"/>
    

    toe:

    <field name="start_datetime"/>
    
  3. Deze wijzigingen passen de databasestructuur aan door een kolom toe te voegen aan een tabel en een weergave te wijzigen. Om toegepast te worden op een bestaande database, zoals je 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 je wijzigingen pusht, verhoog je de moduleversie in het manifest door __manifest__.py te openen en te vervangen:

    'version': '0.1',
    

    door:

    'version': '0.2',
    

    Het platform detecteert een versiewijziging en activeert de module-update bij de deployment van de nieuwe revisie.

  4. Vervolgens push je de wijzigingen.

  5. Zodra je je wijzigingen hebt getest, kun je ze samenvoegen in de productietak, bv. door de tak te slepen en neer te zetten op de productietak in de Odoo.sh-interface. Aangezien je de moduleversie in het manifest hebt verhoogd, zal het platform de module automatisch bijwerken en is je nieuwe veld direct beschikbaar. Anders kun 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, kun je een requirements.txt-bestand definiëren met daarin de externe bibliotheken waarvan je modules afhankelijk zijn. Het platform gebruikt dit bestand om automatisch de Python-bibliotheken te installeren die je project nodig heeft.

Notitie

  • Het is niet mogelijk om systeempakketten te installeren of te upgraden op Odoo.sh-databases (bv. apt-pakketten). Onder specifieke voorwaarden kunnen pakketten echter worden overwogen voor installatie. Dit geldt ook voor Python-modules die systeempakketten nodig hebben voor compilatie en voor externe Odoo-modules.

  • PostgreSQL-extensies worden niet ondersteund op Odoo.sh, dus het is niet mogelijk om extensies (zoals PostGIS, ltree, …) te installeren in Odoo.sh-databases.

Om bijvoorbeeld de Unidecode-bibliotheek te gebruiken in je module:

  1. Maak een bestand requirements.txt aan in de hoofdmap van je repository:

    • Maak en open vanuit de Odoo.sh-editor het bestand ~/src/user/requirements.txt.

    • Maak en open vanaf je computer het bestand ~/src/odoo-addons/requirements.txt.

  2. Voeg toe aan het bestand:

    unidecode
    
  3. Je kunt nu de bibliotheek gebruiken in je module, bijvoorbeeld om accenten te verwijderen uit tekens in het naamveld van je model. Open hiervoor het bestand models/models.py en voeg voor:

    from odoo import models, fields, api
    

    toe:

    from unidecode import unidecode
    
  4. Na:

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

    toe:

    @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)
    
  5. Verhoog de moduleversie om de Python-afhankelijkheid te installeren door het modulemanifest __manifest__.py te bewerken.

  6. Push de wijzigingen.

    Tip

    Stage het requirements.txt-bestand door git add requirements.txt uit te voeren.