Adatfájlok¶
Az Odoo nagymértékben adatvezérelt, és a modulok meghatározásának nagy része így az általa kezelt különféle rekordok meghatározása: felhasználói felület (menük és nézetek), biztonság (hozzáférési jogok és rekordszabályok), jelentések és egyszerű adatok mind rekordokon keresztül vannak meghatározva.
Szerkezet¶
Az Odoo-ban az adatok meghatározásának fő módja XML adatfájlokon keresztül történik: Az XML adatfájl széles körű szerkezete a következő:
Bármennyi műveleti elem az
odoogyökérelemben
<?xml version="1.0" encoding="UTF-8"?>
<!-- the root elements of the data file -->
<odoo>
<operation/>
...
</odoo>
Az adatfájlok sorban kerülnek végrehajtásra, a műveletek csak a korábban meghatározott műveletek eredményeire hivatkozhatnak
Megjegyzés
If the content of the data file is expected to be applied only once, you
can specify the odoo flag noupdate set to 1. If part of
the data in the file is expected to be applied once, you can place this part
of the file in a <data noupdate=”1”> domain.
<odoo>
<data noupdate="1">
<!-- Only loaded when installing the module (odoo-bin -i module) -->
<operation/>
</data>
<!-- (Re)Loaded at install and update (odoo-bin -i/-u) -->
<operation/>
</odoo>
Alapvető műveletek¶
record¶
A record megfelelően meghatároz vagy frissít egy adatbázis rekordot, a következő attribútumokkal rendelkezik:
model(kötelező)a létrehozandó (vagy frissítendő) modell neve
ida rekord külső azonosítója. Erősen ajánlott megadni
rekord létrehozásakor lehetővé teszi a későbbi meghatározások számára, hogy módosítsák vagy hivatkozzanak erre a rekordra
a rekord módosításához a módosítandó rekord
contexta rekord létrehozásakor használandó kontextus
forcecreatefrissítési módban, hogy létre kell-e hozni a rekordot, ha nem létezik
Külső azonosítót igényel (external id), alapértelmezés szerint
True.
field¶
Minden rekord field címkékből állhat, amelyek meghatározzák a beállítandó értékeket a rekord létrehozásakor. Egy record field nélkül az összes alapértelmezett értéket használja (létrehozás) vagy nem tesz semmit (frissítés).
Egy field rendelkezik egy kötelező name attribútummal, amely a beállítandó mező neve, és különböző módszerekkel határozható meg maga az érték:
- Semmi
ha nem adnak meg értéket a mezőhöz, akkor egy implicit
Falseérték lesz beállítva a mezőre. Használható a mező törlésére vagy az alapértelmezett érték elkerülésére.searcha relational fields esetében egy domain kell, hogy legyen a mező modelljén.
Értékelni fogja a domaint, megkeresi a mező modelljét annak használatával, és a keresés eredményét beállítja a mező értékeként. Csak az első eredményt használja, ha a mező egy
Many2onerefha egy
refattribútum van megadva, annak értékének érvényes external id-nek kell lennie, amelyet megkeresnek és beállítanak a mező értékeként.Elsősorban a
Many2oneésReferencemezőkhöztypeha egy
typeattribútum van megadva, azt a mező tartalmának értelmezésére és átalakítására használják. A mező tartalma külső fájlon keresztül adható meg afileattribútum használatával, vagy a csomópont törzsén keresztül.Elérhető típusok:
xml,htmlkivonja a
fieldgyermekeit egyetlen dokumentumként, kiértékeli a megadott external id-t a%(external_id)sformában. A%%használható a tényleges % jelek kiírására.filebiztosítja, hogy a mező tartalma érvényes fájlútvonal legyen az aktuális modellben, elmenti a párt
module,pathmezőértékkéntcharközvetlenül beállítja a mező tartalmát a mező értékeként módosítás nélkül
base64base64-kódolja a mező tartalmát, hasznos a
fileattribútummal kombinálva, például képadatok csatolmányokba való betöltéséhezinta mező tartalmát egész számmá alakítja és beállítja a mező értékeként
lebegőpontos száma mező tartalmát lebegőpontos számmá alakítja, és beállítja azt a mező értékeként
lista,tömbtartalmaznia kell bármennyi
valueelemet, amelyek ugyanazokkal a tulajdonságokkal rendelkeznek, mint afield, minden elem egy generált tuple vagy lista elemére oldódik fel, és a generált gyűjtemény a mező értékeként van beállítva
kiértékelésolyan esetekben, amikor a korábbi módszerek nem megfelelőek, az
evalattribútumok egyszerűen kiértékelik a megadott Python kifejezést, és az eredményt a mező értékeként állítják be.A kiértékelési környezet különféle modulokat tartalmaz (
time,datetime,timedelta,relativedelta), egy függvényt a külső azonosítók feloldására (ref), és a jelenlegi mezőhöz tartozó modell objektumot, ha alkalmazható (obj)
törlés¶
A delete címke bármennyi korábban meghatározott rekordot eltávolíthat. A következő attribútumokkal rendelkezik:
model(kötelező)a modell, amelyben egy megadott rekordot törölni kell
idegy eltávolítandó rekord külső azonosítója
searchegy domain a modell rekordjainak megtalálásához, amelyeket el kell távolítani
id és search kizárólagosak
függvény¶
A function címke egy metódust hív meg egy modellen, a megadott paraméterekkel. Két kötelező paramétere van: model és name, amelyek sorrendben a modellt és a hívandó metódus nevét adják meg.
Paraméterek adhatók meg eval használatával (aminek egy paraméterek sorozatára kell kiértékelődnie, amellyel a metódust hívják) vagy value elemekkel (lásd list értékek).
<odoo>
<data noupdate="1">
<record id="partner_1" model="res.partner">
<field name="name">Odude</field>
</record>
<function model="res.partner" name="send_inscription_notice"
eval="[[ref('partner_1'), ref('partner_2')]]"/>
<function model="res.users" name="send_vip_inscription_notice">
<function eval="[[('vip','=',True)]]" model="res.partner" name="search"/>
</function>
</data>
<record id="model_form_view" model="ir.ui.view">
...
</record>
</odoo>
Gyorsbillentyűk¶
Mivel az Odoo néhány fontos strukturális modellje összetett és bonyolult, az adatfájlok rövidebb alternatívákat biztosítanak azok meghatározására record tags használatával:
sablon¶
Létrehoz egy QWeb nézetet, amely csak a nézet arch szakaszát igényli, és néhány opcionális attribútumot engedélyez:
ida nézet külső azonosítója
name,inherit_id,priorityugyanaz, mint a megfelelő mező az
ir.ui.view-ben (nb:inherit_idegy külső azonosító kell legyen)primaryha
True-ra van állítva és egyinherit_id-vel van kombinálva, a nézetet elsődlegesnek definiáljacsoportokvesszővel elválasztott csoport külső azonosítók listája
activeindicates whether the view is active. If inactive, its XPath rules won’t be applied, which is thus mainly relevant for views with
inherit_idMegjegyzés
Defining the
activevalue on the<template>node itself comes with a subtlety: it is only considered when creating the record. On subsequent updates, the view will be updated but not itsactivestatus.
asset¶
Creates an asset.
Example
<asset id="website_something.some_style_asset" name="Some style asset" active="False">
<bundle>web.assets_frontend</bundle>
<path>website_something/static/src/some_style.scss</path>
</asset>
Attributes
idthe asset’s external identifier
namesame as the corresponding field on
ir.assetactive(optional)indicates whether the asset is active
Megjegyzés
Same as
<template>, defining theactivevalue on the<asset>node itself comes with a subtlety: it is only considered when creating the record. On subsequent updates, the asset will be updated but not itsactivestatus.
Child elements
<bundle>and<path>required to define the corresponding fields on
ir.asset(thedirectivefield can be controlled using thedirectiveattribute on the<bundle>child)<field>(opcionális)just like in a normal
<record>, to define more field values as needed
CSV adatfájlok¶
Az XML adatfájlok rugalmasak és önleíróak, de nagyon bőbeszédűek, amikor egyszerű rekordok nagy számát kell létrehozni ugyanazon modellből tömegesen.
Ebben az esetben az adatfájlok használhatják a csv formátumot is, ez gyakran így van a hozzáférési jogok esetében:
a fájl neve
model_name.csvaz első sor felsorolja a megírandó mezőket, a különleges
idmezővel a külső azonosítók számára (létrehozás vagy frissítés céljából)minden további sor új rekordot hoz létre
Íme az adatfájl első sorai, amelyek az ország államait határozzák meg res.country.state.csv
"id","country_id:id","name","code"
state_au_1,au,"Australian Capital Territory","ACT"
state_au_2,au,"New South Wales","NSW"
state_au_3,au,"Northern Territory","NT"
state_au_4,au,"Queensland","QLD"
state_au_5,au,"South Australia","SA"
state_au_6,au,"Tasmania","TAS"
state_au_7,au,"Victoria","VIC"
state_au_8,au,"Western Australia","WA"
state_us_1,us,"Alabama","AL"
state_us_2,us,"Alaska","AK"
state_us_3,us,"Arizona","AZ"
state_us_4,us,"Arkansas","AR"
state_us_5,us,"California","CA"
state_us_6,us,"Colorado","CO"
olvasmányosabb formátumban megjelenítve:
azonosító |
country_id:id |
név |
code |
|---|---|---|---|
state_au_1 |
au |
Ausztráliai Fővárosi Terület |
ACT |
state_au_2 |
au |
Új-Dél-Wales |
NSW |
state_au_3 |
au |
Északi Terület |
NT |
state_au_4 |
au |
Queensland |
QLD |
state_au_5 |
au |
Dél-Ausztrália |
SA |
state_au_6 |
au |
Tasmánia |
TAS |
state_au_7 |
au |
Victoria |
VIC |
state_au_8 |
au |
Nyugat-Ausztrália |
WA |
state_us_1 |
us |
Alabama |
AL |
state_us_2 |
us |
Alaszka |
AK |
state_us_3 |
us |
Arizona |
AZ |
state_us_4 |
us |
Arkansas |
AR |
state_us_5 |
us |
Kalifornia |
CA |
state_us_6 |
us |
Colorado |
CO |
Minden sor (rekord) esetén:
az első oszlop a létrehozandó vagy frissítendő rekord külső azonosítója
a második oszlop az ország objektum külső azonosítója, amelyhez kapcsolódni kell (az ország objektumokat előzetesen definiálni kell)
a harmadik oszlop a
res.country.statenamemezőjea negyedik oszlop a
res.country.statecodemezője