Műveletek

Az akciók meghatározzák a rendszer viselkedését a felhasználói műveletekre adott válaszként: bejelentkezés, művelet gomb, számla kiválasztása, …

Az akciók tárolhatók az adatbázisban, vagy közvetlenül szótárként visszaadhatók pl. gomb metódusokban. Minden akció két kötelező attribútummal rendelkezik:

type

az aktuális akció kategóriája, meghatározza, hogy mely mezők használhatók és hogyan értelmezhető az akció

name

rövid, felhasználó által olvasható leírás az akcióról, megjelenhet az ügyfél felületén

Az ügyfél 4 formában kaphat műveleteket:

  • False

    ha bármilyen műveleti párbeszédablak jelenleg nyitva van, zárja be

  • Egy karakterlánc

    ha egy ügyfél művelet egyezik, értelmezze ügyfél művelet címkeként, ellenkező esetben kezelje számként

  • Egy szám

    olvassa be a megfelelő műveleti rekordot az adatbázisból, lehet adatbázis azonosító vagy külső azonosító

  • Egy szótár

    kezelje ügyfél művelet leíróként és hajtsa végre

Kötések

A két kötelező attribútumukon kívül az összes művelet megosztja az opcionális attribútumokat is, amelyeket egy tetszőleges modell kontextuális menüjében való megjelenítéshez használnak:

binding_model_id

meghatározza, hogy melyik modellhez van kötve a művelet

Megjegyzés

Szerver műveletek esetén használja a model_id-t.

binding_type

meghatározza a kötés típusát, ami többnyire azt jelenti, hogy melyik kontextuális menü alatt jelenik meg a művelet

action (alapértelmezett)

Meghatározza, hogy a művelet a kötött modell Művelet kontextuális menüjében fog megjelenni.

report

Meghatározza, hogy a művelet a kötött modell Nyomtatás kontextuális menüjében fog megjelenni.

binding_view_types

a comma-separated list of view types for which the action appears in the contextual menu, mostly „list” and / or „form”. Defaults to list,form (both list and form )

Ablak műveletek (ir.actions.act_window)

A leggyakoribb művelettípus, amelyet egy modell vizualizációinak bemutatására használnak nézeteken keresztül: egy ablak művelet meghatározza a nézettípusok (és esetleg konkrét nézetek) halmazát egy modellhez (és esetleg a modell egy konkrét rekordjához).

Mezői a következők:

res_model

modell, amelyhez nézeteket kell bemutatni

views

a list of (view_id, view_type) pairs. The second element of each pair is the category of the view (list, form, graph, …) and the first is an optional database id (or False). If no id is provided, the client should fetch the default view of the specified type for the requested model (this is automatically done by fields_view_get()). The first type of the list is the default view type and will be open by default when the action is executed. Each view type should be present at most once in the list

res_id (opcionális)

ha az alapértelmezett nézet form, meghatározza a betöltendő rekordot (ellenkező esetben új rekordot kell létrehozni)

search_view_id (opcionális)

(id, name) pár, ahol id az adatbázis azonosítója egy adott keresési nézetnek, amelyet az akcióhoz be kell tölteni. Alapértelmezés szerint a modell alapértelmezett keresési nézetét tölti be

target (opcionális)

meghatározza, hogy a nézetek a fő tartalomterületen (current), teljes képernyős módban (fullscreen) vagy egy párbeszédablakban/előugró ablakban (new) nyíljanak meg. Használja a main-t a current helyett a kenyérmorzsák törléséhez. Alapértelmezés szerint current.

context (opcionális)

további kontextusadatok átadása a nézeteknek

domain (opcionális)

szűrési domain, amelyet implicit módon hozzáad minden nézet keresési lekérdezéséhez

limit (opcionális)

rekordok száma, amelyeket alapértelmezés szerint megjelenít a listákban. Alapértelmezés szerint 80 a web kliensben

Például, a vevők (partner a customer jelzővel beállítva) megnyitásához listás és űrlap nézetekkel:

{
    "type": "ir.actions.act_window",
    "res_model": "res.partner",
    "views": [[False, "list"], [False, "form"]],
    "domain": [["customer", "=", true]],
}

Vagy egy adott termék űrlap nézetének megnyitásához (külön megszerezve) egy új párbeszédablakban:

{
    "type": "ir.actions.act_window",
    "res_model": "product.product",
    "views": [[False, "form"]],
    "res_id": a_product_id,
    "target": "new",
}

Az adatbázisban lévő ablakműveleteknek van néhány különböző mezője, amelyeket az ügyfeleknek figyelmen kívül kell hagyniuk, főként a views lista összeállításához:

view_mode (default= list,form )

vesszővel elválasztott nézettípusok listája sztringként (/!\ Nincs szóköz /!\). Ezek a típusok mind jelen lesznek a generált views listában (legalább egy False view_id-val)

view_ids

M2M1 a nézet objektumokhoz, meghatározza a views kezdeti tartalmát

Megjegyzés

Az Act_window nézetek tisztán definiálhatók az ir.actions.act_window.view segítségével is.

Ha több nézetet tervez engedélyezni a modelljéhez, inkább használja az ir.actions.act_window.view-t az view_ids akció helyett

<record model="ir.actions.act_window.view" id="test_action_tree">
   <field name="sequence" eval="1"/>
   <field name="view_mode">list</field>
   <field name="view_id" ref="view_test_tree"/>
   <field name="act_window_id" ref="test_action"/>
</record>
view_id

specifikus nézet hozzáadva a views listához, ha annak típusa része a view_mode listának és még nincs kitöltve a view_ids nézetek egyikével

Ezeket leginkább akkor használják, amikor műveleteket definiálnak Adatfájlok:

<record model="ir.actions.act_window" id="test_action">
    <field name="name">A Test Action</field>
    <field name="res_model">some.model</field>
    <field name="view_mode">graph</field>
    <field name="view_id" ref="my_specific_view"/>
</record>

will use the „my_specific_view” view even if that’s not the default view for the model.

A views sorozat szerveroldali összetétele a következő:

  • szerezze meg az egyes (id, type) elemeket a view_ids-ból (sequence szerint rendezve)

  • ha a view_id definiálva van és típusa még nincs kitöltve, adja hozzá annak (id, type) elemét

  • minden kitöltetlen típus esetén a view_mode-ban adja hozzá a (False, type) elemet

1

technikai értelemben nem M2M: hozzáad egy sorozat mezőt, és lehet, hogy csak egy nézettípusból áll, nézetazonosító nélkül.

URL műveletek (ir.actions.act_url)

Lehetővé teszi egy URL (weboldal/weboldal) megnyitását egy Odoo műveleten keresztül. Két mező segítségével testreszabható:

url

a cím, amelyet a művelet aktiválásakor meg kell nyitni

target (alapértelmezett= new)

az elérhető értékek a következők:

  • new: megnyitja az URL-t egy új ablakban/oldalon

  • self: megnyitja az URL-t az aktuális ablakban/oldalon (felváltja a jelenlegi tartalmat)

  • download: átirányít egy letöltési URL-re

példa:

{
    "type": "ir.actions.act_url",
    "url": "https://odoo.com",
    "target": "self",
}

Ez lecseréli a jelenlegi tartalmi szakaszt az Odoo kezdőlapjára.

Szerver műveletek (ir.actions.server)

Lehetővé teszi összetett szerver kódok indítását bármely érvényes műveleti helyről. Csak két mező releváns az ügyfelek számára:

id

a futtatandó szerver művelet adatbázis-azonosítója

context (opcionális)

a szerver művelet futtatásakor használandó kontextusadatok

Az adatbázisban tárolt rekordok jelentősen gazdagabbak, és számos specifikus vagy általános műveletet képesek végrehajtani az állapot alapján. Néhány mező (és a hozzájuk tartozó viselkedés) megosztott az állapotok között:

model_id

Az Odoo modell, amely a művelethez kapcsolódik.

state

  • code: Python kódot hajt végre a code argumentumon keresztül.

  • object_create: Új rekordot hoz létre a crud_model_id modellből a fields_lines specifikációk szerint.

  • object_write: Frissíti a jelenlegi rekord(ok)at a fields_lines specifikációk szerint

  • multi: Több műveletet hajt végre a child_ids argumentumon keresztül megadottak alapján.

Állapot mezők

Az állapotától függően a viselkedés különböző mezőkön keresztül van meghatározva. Az érintett állapot minden mező után meg van adva.

code (kód)

Adjon meg egy Python kódrészletet, amelyet a művelet meghívásakor kell végrehajtani

<record model="ir.actions.server" id="print_instance">
    <field name="name">Res Partner Server Action</field>
    <field name="model_id" ref="model_res_partner"/>
    <field name="state">code</field>
    <field name="code">
        raise Warning(record.name)
    </field>
</record>

Megjegyzés

A kódrészlet meghatározhat egy action nevű változót, amelyet a kliensnek visszaadnak, mint a következő végrehajtandó műveletet:

<record model="ir.actions.server" id="print_instance">
    <field name="name">Res Partner Server Action</field>
    <field name="model_id" ref="model_res_partner"/>
    <field name="state">code</field>
    <field name="code">
        if record.some_condition():
            action = {
                "type": "ir.actions.act_window",
                "view_mode": "form",
                "res_model": record._name,
                "res_id": record.id,
            }
    </field>
</record>

megkéri a klienst, hogy nyisson meg egy űrlapot a rekordhoz, ha az megfelel bizonyos feltételnek

crud_model_id (létrehozás)(kötelező)

modell, amelyben új rekordot kell létrehozni

link_field_id (létrehozás)

many2one az ir.model.fields-hez, meghatározza az aktuális rekord m2o mezőjét, amelyre az újonnan létrehozott rekordot be kell állítani (a modelleknek egyezniük kell)

fields_lines (létrehozás/írás)

mezők felülírása a rekord létrehozásakor vagy másolásakor. One2many a mezőkkel:

col1

ir.model.fields beállítása az érintett modellben (crud_model_id létrehozásokhoz, model_id frissítésekhez)

value

érték a mezőhöz, amelyet a type alapján értelmeznek

type (érték|hivatkozás|egyenlet)

Ha value, a value mezőt szó szerinti értékként értelmezik (esetleg átalakítva), ha equation, a value mezőt Python kifejezésként értelmezik és kiértékelik

child_ids (több)

Adja meg a több al-műveletet (ir.actions.server), amelyeket a multi állapotban kell végrehajtani. Ha az al-műveletek maguk is visszaadnak műveleteket, az utolsó kerül visszaküldésre az ügyfélnek, mint a multi saját következő művelete

Értékelési környezet

Számos kulcs elérhető a szerver műveletek értékelési környezetében vagy annak környezetében:

  • model modell objektum, amely a művelethez van kapcsolva a model_id által

  • record/records rekord/rekordhalmaz, amelyen a művelet kiváltódik, lehet üres is.

  • env Odoo környezet

  • datetime, dateutil, time, timezone megfelelő Python modulok

  • log: log(message, level='info') naplózási funkció, amely a hibakeresési információkat rögzíti az ir.logging táblában

  • Warning konstruktor a Warning kivételhez

Jelentés műveletek (ir.actions.report)

Egy jelentés nyomtatását indítja el.

Ha a jelentését <record> tag segítségével definiálja <report> helyett, és azt szeretné, hogy a művelet megjelenjen a modell nézeteinek Nyomtatás menüjében, akkor meg kell adnia a binding_model_id értéket a Kötések hivatkozásból. Nem szükséges a binding_type értékét report-ra állítani, mivel az ir.actions.report implicit módon erre fog alapértelmezni.

name (kötelező)

használatos fájlnévként, ha a print_report_name nincs megadva. Egyébként csak emlékeztetőként/leírásként hasznos, amikor egy listában keresünk egy jelentést

model (kötelező)

a modell, amelyről a jelentése szól

report_type (alapértelmezett=qweb-pdf)

vagy qweb-pdf PDF jelentésekhez, vagy qweb-html HTML jelentésekhez

report_name (kötelező)

a qweb sablon neve (external id), amelyet a jelentés megjelenítésére használnak

print_report_name

python kifejezés, amely meghatározza a jelentés nevét.

groups_id

Many2many mező azokhoz a csoportokhoz, amelyek jogosultak megtekinteni/használni az aktuális jelentést

multi

ha True értékre van állítva, a művelet nem jelenik meg egy űrlap nézetben.

paperformat_id

Many2one mező a jelentéshez használni kívánt papírformátumhoz (ha nincs megadva, a vállalati formátum kerül felhasználásra)

attachment_use

ha True értékre van állítva, a jelentés csak egyszer kerül generálásra, amikor először kérik, és utána a tárolt jelentésből kerül újranyomtatásra, ahelyett, hogy minden alkalommal újra generálódna.

Használható olyan jelentésekhez, amelyeket csak egyszer kell generálni (pl. jogi okokból)

attachment

python kifejezés, amely meghatározza a jelentés nevét; a rekord elérhető object változóként

Ügyfél műveletek (ir.actions.client)

Olyan műveletet indít el, amely teljes egészében az ügyféloldalon van megvalósítva.

tag

a művelet ügyféloldali azonosítója, egy tetszőleges karakterlánc, amelyre az ügyfélnek tudnia kell reagálni

params (opcionális)

egy Python szótár további adatokkal, amelyeket az ügyfélnek kell küldeni az ügyfél műveleti címkével együtt

target (opcionális)

hogy az ügyfél művelet a fő tartalomterületen (current), teljes képernyős módban (fullscreen) vagy egy párbeszédablakban/előugró ablakban (new) legyen megnyitva. Használja a main-t a current helyett, hogy törölje a kenyérmorzsákat. Alapértelmezés szerint current.

{
    "type": "ir.actions.client",
    "tag": "pos.ui"
}

utasítja az ügyfelet, hogy indítsa el az Értékesítési Pont felületet, a szervernek fogalma sincs, hogyan működik a POS felület.

Scheduled Actions (ir.cron)

Előre meghatározott gyakorisággal automatikusan kiváltott műveletek.

name

Name of the scheduled action (Mainly used in log display)

interval_number

Két műveletvégrehajtás közötti interval_type mértékegység száma

interval_type

A gyakorisági intervallum mértékegysége (minutes, hours, days, weeks, months)

model_id

Modell, amelyen ezt a műveletet hívni fogják

code

A művelet kód tartalma. Lehet egy egyszerű hívás a modell metódusára :

model.<method_name>()
nextcall

A művelet következő tervezett végrehajtási dátuma (dátum/idő formátum)

priority

Priority of the action when executing multiple actions at the same time

Advanced use: Batching

When executing a scheduled action, it’s recommended to try batching progress in order to avoid hogging a worker for a long period of time and possibly running into timeout exceptions.

Odoo provides a simple API for scheduled action batching;

self.env['ir.cron']._notify_progress(done=XX:int, remaining=XX:int)

This method allows the scheduler to know if progress was made and whether there is still remaining work that must be done.

By default, if the API is used, the scheduler tries to process 10 batches in one sitting. If there are still remaining tasks after those 10 batches, a new cron call will be executed as soon as possible.

Advanced use: Triggers

For more complex use cases, Odoo provides a more advanced way to trigger scheduled actions directly from business code.

action_record._trigger(at=XX:date)

Biztonság

To avoid a fair usage of resources among scheduled actions, some security measures ensure the correct functioning of your scheduled actions.

  • If a scheduled action encounters an error or a timeout three consecutive times, it will skip its current execution and be considered as failed.

  • If a scheduled action fails its execution five consecutive times over a period of at least seven days, it will be deactivated and will notify the DB admin.