1. fejezet: Architektúra áttekintése¶
Többrétegű alkalmazás¶
Az Odoo többrétegű architektúrát követ, ami azt jelenti, hogy a megjelenítés, az üzleti logika és az adat tárolása elkülönül. Pontosabban, háromrétegű architektúrát használ (kép a Wikipédiáról):
A megjelenítési réteg HTML5, JavaScript és CSS kombinációja. A logikai réteg kizárólag Python nyelven íródott, míg az adat réteg csak a PostgreSQL-t támogatja RDBMS-ként.
A modulod hatókörétől függően az Odoo fejlesztés bármelyik rétegben elvégezhető. Ezért, mielőtt továbbmennél, érdemes lehet felfrissíteni az emlékezetedet, ha nincs középszintű tudásod ezekben a témákban.
Ahhoz, hogy végigmenj ezen az útmutatón, szükséged lesz alapvető HTML ismeretekre és középszintű Python tudásra. A haladó témákhoz több ismeretre lesz szükség más területeken. Számos szabadon hozzáférhető útmutató létezik, így nem tudunk egyet sem különösen ajánlani, mivel ez a háttértudásodtól függ.
Referenciaként ez a hivatalos Python útmutató.
Megjegyzés
A 15.0 verzió óta az Odoo aktívan átáll saját fejlesztésű OWL keretrendszer használatára a megjelenítési réteg részeként. A régi JavaScript keretrendszer továbbra is támogatott, de idővel elavulttá válik. Erről bővebben a haladó témákban lesz szó.
Odoo modulok¶
Mind a szerver, mind a kliens kiterjesztések modulokként vannak csomagolva, amelyek opcionálisan betöltődnek egy adatbázisba. Egy modul egy adott célra irányuló funkciók és adatok gyűjteménye.
Az Odoo modulok vagy új üzleti logikát adhatnak hozzá egy Odoo rendszerhez, vagy módosíthatják és kiterjeszthetik a meglévő üzleti logikát. Egy modul létrehozható, hogy hozzáadja az országod számviteli szabályait az Odoo általános számviteli támogatásához, míg egy másik modul támogatást adhat egy buszflotta valós idejű vizualizációjához.
Az Odoo-ban minden modulokkal kezdődik és végződik.
Terminológia: a fejlesztők az üzleti funkcióikat Odoo modulokba csoportosítják. A fő felhasználói modulok Alkalmazásokként vannak megjelölve és megjelenítve, de a modulok többsége nem Alkalmazás. A modulokat kiegészítőknek is nevezhetjük, és azok a könyvtárak, ahol az Odoo szerver megtalálja őket, alkotják az addons_path-t.
Egy modul összetétele¶
Egy Odoo modul tartalmazhat számos elemet:
- Üzleti objektumok
Egy üzleti objektum (pl. egy számla) Python osztályként van deklarálva. Az ezekben az osztályokban definiált mezők automatikusan leképeződnek az adatbázis oszlopaira az ORM rétegnek köszönhetően.
- Objektum nézetek
UI megjelenítés meghatározása
- Adatfájlok
XML vagy CSV fájlok, amelyek a modell adatokat deklarálják:
nézetek vagy jelentések,
konfigurációs adatok (modulok paraméterezése, biztonsági szabályok),
bemutató adatok
és még sok más
- Webes vezérlők
Kérések kezelése webböngészőkből
- Statikus webadatok
A webes felület vagy weboldal által használt képek, CSS vagy JavaScript fájlok
Ezen elemek egyike sem kötelező. Néhány modul csak adatfájlokat adhat hozzá (pl. ország-specifikus könyvelési konfiguráció), míg mások csak üzleti objektumokat adhatnak hozzá. Ezen a képzésen üzleti objektumokat, objektum nézeteket és adatfájlokat fogunk létrehozni.
Modulstruktúra¶
Minden modul egy könyvtár egy modul könyvtáron belül. A modul könyvtárakat a --addons-path opció használatával lehet megadni.
Egy Odoo modul a manifest által van deklarálva.
Amikor egy Odoo modul üzleti objektumokat (azaz Python fájlokat) tartalmaz, azok Python csomagként vannak szervezve egy __init__.py fájllal. Ez a fájl tartalmazza az import utasításokat a modul különböző Python fájljaihoz.
Íme egy egyszerűsített modul könyvtár:
module
├── models
│ ├── *.py
│ └── __init__.py
├── data
│ └── *.xml
├── __init__.py
└── __manifest__.py
Odoo Kiadások¶
Az Odoo két verzióban érhető el: Odoo Enterprise (licencelt és megosztott források) és Odoo Community (nyílt forráskódú). A támogatás vagy frissítések mellett az Enterprise verzió további funkciókat biztosít az Odoo számára. Technikai szempontból ezek a funkciók egyszerűen új modulok, amelyeket a Community verzió által biztosított modulok tetejére telepítenek.
Ready to start? It is now time to write your own application!