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:
typeaz aktuális akció kategóriája, meghatározza, hogy mely mezők használhatók és hogyan értelmezhető az akció
namerö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:
Falseha 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_idmeghatározza, hogy melyik modellhez van kötve a művelet
Megjegyzés
Szerver műveletek esetén használja a
model_id-t.binding_typemeghatá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 kontextuális menüjében fog megjelenni.
reportMeghatározza, hogy a művelet a kötött modell kontextuális menüjében fog megjelenni.
binding_view_typesa 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_modelmodell, amelyhez nézeteket kell bemutatni
viewsa 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 (orFalse). If no id is provided, the client should fetch the default view of the specified type for the requested model (this is automatically done byfields_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 listres_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, aholidaz 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 betarget(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 amain-t acurrenthelyett a kenyérmorzsák törléséhez. Alapértelmezés szerintcurrent.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
viewslistában (legalább egyFalseview_id-val)view_idsM2M1 a nézet objektumokhoz, meghatározza a
viewskezdeti tartalmátMegjegyzés
Az Act_window nézetek tisztán definiálhatók az
ir.actions.act_window.viewsegí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_idsakció 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_idspecifikus nézet hozzáadva a
viewslistához, ha annak típusa része aview_modelistának és még nincs kitöltve aview_idsné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 aview_ids-ból (sequenceszerint rendezve)ha a
view_iddefiniálva van és típusa még nincs kitöltve, adja hozzá annak(id, type)elemétminden 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ó:
urla 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/oldalonself: 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:
ida 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_idAz Odoo modell, amely a művelethez kapcsolódik.
state
code: Python kódot hajt végre acodeargumentumon keresztül.object_create: Új rekordot hoz létre acrud_model_idmodellből afields_linesspecifikációk szerint.object_write: Frissíti a jelenlegi rekord(ok)at afields_linesspecifikációk szerintmulti: Több műveletet hajt végre achild_idsargumentumon 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
actionnevű 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.
One2manya mezőkkel:col1ir.model.fieldsbeállítása az érintett modellben (crud_model_idlétrehozásokhoz,model_idfrissítésekhez)valueérték a mezőhöz, amelyet a
typealapján értelmeznektype(érték|hivatkozás|egyenlet)Ha
value, avaluemezőt szó szerinti értékként értelmezik (esetleg átalakítva), haequation, avaluemező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:
modelmodell objektum, amely a művelethez van kapcsolva amodel_idáltalrecord/recordsrekord/rekordhalmaz, amelyen a művelet kiváltódik, lehet üres is.envOdoo környezetdatetime,dateutil,time,timezonemegfelelő Python moduloklog: log(message, level='info')naplózási funkció, amely a hibakeresési információkat rögzíti az ir.logging táblábanWarningkonstruktor aWarningkivé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_namenincs megadva. Egyébként csak emlékeztetőként/leírásként hasznos, amikor egy listában keresünk egy jelentéstmodel(kötelező)a modell, amelyről a jelentése szól
report_type(alapértelmezett=qweb-pdf)vagy
qweb-pdfPDF jelentésekhez, vagyqweb-htmlHTML jelentésekhezreport_name(kötelező)a qweb sablon neve (external id), amelyet a jelentés megjelenítésére használnak
print_report_namepython kifejezés, amely meghatározza a jelentés nevét.
groups_idMany2manymező azokhoz a csoportokhoz, amelyek jogosultak megtekinteni/használni az aktuális jelentéstmultiha
Trueértékre van állítva, a művelet nem jelenik meg egy űrlap nézetben.paperformat_idMany2onemező 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_useha
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)
attachmentpython kifejezés, amely meghatározza a jelentés nevét; a rekord elérhető
objectvá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.
taga 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 amain-t acurrenthelyett, hogy törölje a kenyérmorzsákat. Alapértelmezés szerintcurrent.
{
"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.
Lásd még
Scheduled Actions (ir.cron)¶
Előre meghatározott gyakorisággal automatikusan kiváltott műveletek.
nameName of the scheduled action (Mainly used in log display)
interval_numberKét műveletvégrehajtás közötti interval_type mértékegység száma
interval_typeA gyakorisági intervallum mértékegysége (
minutes,hours,days,weeks,months)model_idModell, amelyen ezt a műveletet hívni fogják
codeA művelet kód tartalma. Lehet egy egyszerű hívás a modell metódusára :
model.<method_name>()
nextcallA művelet következő tervezett végrehajtási dátuma (dátum/idő formátum)
priorityPriority 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.