Utwórz moduł

Przed utworzeniem pierwszego modułu konieczne jest utworzenie projektu Odoo.sh oraz poznanie adresu URL repozytorium GitHub.

Słowniczek

  • ~/src to katalog, w którym znajdują się repozytoria Git związane z projektami Odoo.

  • odoo to użytkownik GitHub.

  • odoo-addons to repozytorium GitHub.

  • feature-1 to nazwa gałęzi deweloperskiej.

  • main to nazwa gałęzi produkcyjnej.

  • my_module to nazwa modułu.

Zastąp je w razie potrzeby.

Utwórz gałąź deweloperską

W widoku Gałęzie:

  • W panelu nawigacji gałęzi kliknij przycisk + (Nowa gałąź deweloperska) obok Deweloperskie.

  • W sekcji Rozgałęzienie wybierz gałąź main.

  • W sekcji Do wprowadź feature-1.

Rozgałęzianie gałęzi produkcyjnej w celu utworzenia gałęzi deweloperskiej na Odoo.sh

Gdy kompilacja będzie gotowa, możesz uzyskać dostęp do edytora i kodu gałęzi deweloperskiej z folderu ~/src/user.

Utwórz strukturę modułu

Tworzenie struktury

Chociaż nie jest to wymagane, tworzenie struktury pozwala uniknąć żmudnego ręcznego konfigurowania podstawowej struktury modułu Odoo. Możesz utworzyć strukturę nowego modułu za pomocą pliku wykonywalnego odoo-bin.

Z terminala edytora uruchom:

odoo-bin scaffold my_module ~/src/user/

Wskazówka

Jeśli nie chcesz instalować Odoo na swoim komputerze, możesz również pobrać ten szablon struktury modułu. Zastąp każde wystąpienie my_module wybraną przez siebie nazwą.

Zostanie wygenerowana następująca struktura:

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

Ostrzeżenie

Używaj tylko znaków alfanumerycznych (a-z, 0-9) lub podkreśleń (_) podczas nazywania modułu, ponieważ jego nazwa jest używana dla klas Pythona, a nazwy klas zawierające znaki specjalne inne niż podkreślenia nie są prawidłowe w Pythonie.

Odkomentuj następujące pliki:

  • models/models.py przykład modelu z jego polami

  • views/views.xml widok drzewa i formularz z menu otwierającymi je

  • demo/demo.xml przykładowe rekordy dla przykładowego modelu

  • controllers/controllers.py przykład kontrolera implementującego niektóre trasy

  • views/templates.xml dwa przykładowe widoki qweb używane przez trasy kontrolera

  • __manifest__.py manifest twojego modułu, zawierający jego tytuł, opis i pliki danych do załadowania. Odkomentuj plik danych listy kontroli dostępu:

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

Ręcznie

Aby ręcznie utworzyć strukturę modułu, postępuj zgodnie z samouczkiem Server framework 101, aby zrozumieć strukturę modułu i zawartość każdego pliku.

Wypchnij na gałąź deweloperską

  1. Przygotuj zmiany do zatwierdzenia, uruchamiając:

    git add my_module
    
  2. Zatwierdź swoje zmiany, uruchamiając:

    git commit -m "My first module"
    
  3. Wypchnij swoje zmiany do zdalnego repozytorium, uruchamiając:

    Z terminala edytora uruchom:

    git push https HEAD:feature-1
    

Przetestuj moduł

Gałąź powinna pojawić się w sekcji Programowanie panelu nawigacji Widok gałęzi.

Przykład gałęzi programistycznej

Kliknij nazwę gałęzi, aby wyświetlić jej historię, w tym zmiany, które właśnie wypchnąłeś. Gdy baza danych będzie gotowa, kliknij Połącz, aby uzyskać do niej dostęp.

Przycisk łączenia w celu uzyskania dostępu do bazy danych

Jeśli Twój projekt Odoo.sh jest skonfigurowany do automatycznej instalacji modułu, pojawi się on bezpośrednio na konsoli bazy danych. W przeciwnym razie będzie dostępny do instalacji w aplikacji Aplikacje.

Nowy moduł na konsoli bazy danych

Testuj z danymi produkcyjnymi

Informacja

Do tego kroku wymagana jest produkcyjna baza danych. Jeśli jeszcze jej nie masz, utwórz ją.

Po przetestowaniu modułu w kompilacji programistycznej z danymi demo i upewnieniu się, że jest gotowy, możesz przetestować go z danymi produkcyjnymi za pomocą gałęzi przejściowej.

Możesz:

  • Przekonwertować gałąź programistyczną na gałąź przejściową, przeciągając i upuszczając ją w sekcji Przejściowe.

  • Scalić ją z istniejącą gałęzią przejściową, przeciągając i upuszczając na tę gałąź.

  • Użyć polecenia git merge, aby scalić swoje gałęzie.

Tworzy to nową kompilację przejściową, która duplikuje produkcyjną bazę danych i uruchamia ją na serwerze zaktualizowanym najnowszymi zmianami z Twojej gałęzi.

Gdy baza danych będzie gotowa, kliknij Połącz, aby uzyskać do niej dostęp.

Zainstaluj moduł

Zainstaluj moduł z aplikacji Aplikacje. Ponieważ moduł może nie pojawić się bezpośrednio na liście aplikacji, zaktualizuj listę aplikacji, aktywując tryb programisty i klikając Zaktualizuj listę aplikacji ‣ Zaktualizuj.

Informacja

Moduł nie jest instalowany automatycznie, ponieważ celem kompilacji przejściowej jest przetestowanie zachowania zmian tak, jak byłyby one w produkcyjnej bazie danych, więc nie chcesz, aby moduł był instalowany automatycznie.

Wdróż na produkcję

Po przetestowaniu modułu w gałęzi przejściowej z danymi produkcyjnymi i przekonaniu się, że jest gotowy do produkcji, możesz scalić swoją gałąź z gałęzią produkcyjną poprzez:

  • Przeciągnięcie i upuszczenie gałęzi przejściowej na gałąź produkcyjną.

  • Użycie polecenia git merge do scalenia gałęzi.

To scala najnowsze zmiany z gałęzi przejściowej do gałęzi produkcyjnej i aktualizuje nimi serwer produkcyjny.

Gdy baza danych będzie gotowa, kliknij Połącz, aby uzyskać do niej dostęp.

Zainstaluj moduł

Zainstaluj moduł z aplikacji Aplikacje. Ponieważ moduł może nie pojawić się bezpośrednio na liście aplikacji, zaktualizuj listę aplikacji, aktywując tryb programisty i klikając Zaktualizuj listę aplikacji ‣ Zaktualizuj.

Dodaj zmianę

Ta sekcja wyjaśnia, jak dodać zmianę w module poprzez dodanie nowego pola w modelu i wdrożenie go.

  1. Z poziomu edytora lub ze swojego komputera otwórz folder modułu ~/src/odoo-addons/my_module, następnie otwórz plik models/models.py, aby go edytować. Po polu opisu:

    description = fields.Text()
    

    dodaj pole datetime:

    start_datetime = fields.Datetime('Start time', default=lambda self: fields.Datetime.now())
    
  2. Otwórz plik views/views.xml i po:

    <field name="value2"/>
    

    dodaj:

    <field name="start_datetime"/>
    
  3. Te zmiany modyfikują strukturę bazy danych poprzez dodanie kolumny do tabeli i modyfikację widoku. Aby zastosować je do istniejącej bazy danych, takiej jak baza produkcyjna, te zmiany wymagają aktualizacji modułu. Jeśli chcesz, aby aktualizacja była wykonywana automatycznie przez platformę Odoo.sh po wypchnięciu zmian, zwiększ wersję modułu w jego manifeście, otwierając __manifest__.py i zastępując:

    'version': '0.1',
    

    wartością:

    'version': '0.2',
    

    Platforma wykryje zmianę wersji i uruchomi aktualizację modułu po wdrożeniu nowej rewizji.

  4. Następnie wypchnij zmiany.

  5. Po przetestowaniu zmian możesz scalić je z gałęzią produkcyjną, na przykład przeciągając i upuszczając gałąź na gałąź produkcyjną w interfejsie Odoo.sh. Ponieważ zwiększyłeś wersję modułu w manifeście, platforma automatycznie zaktualizuje moduł, a Twoje nowe pole będzie natychmiast dostępne. W przeciwnym razie możesz ręcznie zaktualizować moduł z listy aplikacji.

Użycie zewnętrznej biblioteki Pythona

Jeśli chcesz użyć zewnętrznej biblioteki Pythona, która nie jest zainstalowana domyślnie, możesz zdefiniować plik requirements.txt zawierający listę zewnętrznych bibliotek, od których zależą Twoje moduły. Platforma użyje tego pliku do automatycznej instalacji bibliotek Pythona wymaganych przez Projekt.

Informacja

  • Nie jest możliwa instalacja ani aktualizacja pakietów systemowych w bazach danych Odoo.sh (np. pakiety apt). Jednak w szczególnych warunkach pakiety mogą być rozważone do instalacji. Dotyczy to również modułów Pythona wymagających pakietów systemowych do kompilacji oraz modułów Odoo innych producentów.

  • Rozszerzenia PostgreSQL nie są obsługiwane w Odoo.sh, dlatego nie jest możliwa instalacja rozszerzeń (takich jak PostGIS, ltree, …) w bazach danych Odoo.sh.

Na przykład, aby użyć biblioteki Unidecode w swoim module:

  1. Utwórz plik requirements.txt w folderze głównym repozytorium:

    • W edytorze Odoo.sh utwórz i otwórz plik ~/src/user/requirements.txt.

    • Na swoim komputerze utwórz i otwórz plik ~/src/odoo-addons/requirements.txt.

  2. Dodaj do pliku:

    unidecode
    
  3. Możesz teraz używać biblioteki w swoim module, na przykład do usuwania akcentów ze znaków w polu nazwy swojego modelu. W tym celu otwórz plik models/models.py i przed:

    from odoo import models, fields, api
    

    dodaj:

    from unidecode import unidecode
    
  4. Po:

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

    dodaj:

    @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. Zwiększ wersję modułu, aby zainstalować zależność Pythona, edytując manifest modułu __manifest__.py.

  6. Następnie wypchnij zmiany.

    Wskazówka

    Dodaj plik requirements.txt do staging uruchamiając git add requirements.txt.