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 odoo gyö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

id

a 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

context

a rekord létrehozásakor használandó kontextus

forcecreate

frissí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.

search

a 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 Many2one

ref

ha egy ref attribú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 és Reference mezőkhöz

type

ha egy type attribú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 a file attribútum használatával, vagy a csomópont törzsén keresztül.

Elérhető típusok:

xml, html

kivonja a field gyermekeit egyetlen dokumentumként, kiértékeli a megadott external id-t a %(external_id)s formában. A %% használható a tényleges % jelek kiírására.

file

biztosítja, hogy a mező tartalma érvényes fájlútvonal legyen az aktuális modellben, elmenti a párt module,path mezőértékként

char

közvetlenül beállítja a mező tartalmát a mező értékeként módosítás nélkül

base64

base64-kódolja a mező tartalmát, hasznos a file attribútummal kombinálva, például képadatok csatolmányokba való betöltéséhez

int

a mező tartalmát egész számmá alakítja és beállítja a mező értékeként

lebegőpontos szám

a mező tartalmát lebegőpontos számmá alakítja, és beállítja azt a mező értékeként

lista, tömb

tartalmaznia kell bármennyi value elemet, amelyek ugyanazokkal a tulajdonságokkal rendelkeznek, mint a field, 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és

olyan esetekben, amikor a korábbi módszerek nem megfelelőek, az eval attribú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

id

egy eltávolítandó rekord külső azonosítója

search

egy 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:

id

a nézet külső azonosítója

name, inherit_id, priority

ugyanaz, mint a megfelelő mező az ir.ui.view-ben (nb: inherit_id egy külső azonosító kell legyen)

primary

ha True-ra van állítva és egy inherit_id-vel van kombinálva, a nézetet elsődlegesnek definiálja

csoportok

vesszővel elválasztott csoport külső azonosítók listája

active

indicates whether the view is active. If inactive, its XPath rules won’t be applied, which is thus mainly relevant for views with inherit_id

Megjegyzés

Defining the active value 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 its active status.

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

id

the asset’s external identifier

name

same as the corresponding field on ir.asset

active (optional)

indicates whether the asset is active

Megjegyzés

Same as <template>, defining the active value 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 its active status.

Child elements

<bundle> and <path>

required to define the corresponding fields on ir.asset (the directive field can be controlled using the directive attribute 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.csv

  • az első sor felsorolja a megírandó mezőket, a különleges id mező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.state name mezője

  • a negyedik oszlop a res.country.state code mezője