menus, actions und views
Menüs
Hier ein Beispiel für einen Menüeintrag.
<menuitem id="menuitem_id" name ="Position/des/Eintrags/im/Baum" action ="action_id" groups ="groupname" sequence="beliebige Zahl"/>
id
Der Name des Menüeintrags, dieser muß Einzigartig sein.
name
Name definiert die Position des Menüeintrags in der Menühierarchie. Jedes "/" setzt den Eintrag um eine Stufe herab. Ist kein Slash vorhanden so befindet sich der Eintrag auf der obersten Ebene.
action
Dies verweist auf das Verhalten das ausgelöst werden soll wenn auf den Menüeintrag geclickt wurde.
sequence
Dies ist eine ganze Zahl(integer) die verwendet wird um die Reihenfolge der Menüeinträge festzustellen. Je höher die Zahl umso weiter unten ist der Eintrag zu finden. Wird das Feld nicht bestimmt so wird ihm automatisch die 10 zugewiesen.
Actions
Actions definieren vom user ausgelöstes Verhalten.
<record model="ir.actions.act_window" id="test_action"> <field name="name">Test Action</field> <field name="res_model">das.model</field> <field name="view_mode">graph</field> <field name="view_id" ref="spezifischer_view"/> <field name="domain">[Filter]</field> </record>
view_mode
Der Typ des Views.
view_id
Der Name des Views der angezeigt werden soll wenn die action ausgelöst wurde.
res_model
Das model welches beeinflusst wird.
domain
Schränkt die Ergebnismenge ein. Nur spezifische Einträge werden angezeigt.
Menuitem und action sind untrennbar miteinander verbunden, zwar kann das action Feld in menuitem leer gelassen werden jedoch hat dieses dann auch kein Verhalten.
Views
Views repräsentieren Datenbankobjekte auf der Oberfläche. Views werden mit XML definiert. Odoo generiert dann daraus die Ansicht im Browser.
Es gibt verschiedene Arten von views.
list
form
search
kanban
gantt
diagram
calendar
Es wird jedoch nur auf list und form eingegangen werden.
Aufbau eines views
<record model="ir.ui.view" id="view_id"> <field name="name">view.name</field> <field name="model">object_name</field> <field name="priority" eval="16"/> <field name="arch" type="xml"> <!-- view content: <form>, <tree>, <graph>, ... --> </field> </record>
Jeder view muss in der Tabelle ir.ui.view registriert werden um von odoo angezeigt zu werden. Wie üblich muss ein einzigartiger Name vergeben werden. Unter model gibt man die Quelle der Daten an(Tabelle). Views können per id oder per (model, typ) angefragt werden, für letzteres entscheidet priority welcher view verwendet wird(die kleinste Zahl hat höchste Priorität). Von arch wird das layout zwischen seinen Anfangs- und Endtags definiert.
Um den Kontext zu wahren sollte dies alles in der selben Datei stehen.
<odoo> <data> <record model="ir.ui.view" id="view_id"> <field name="name">view.name</field> <field name="model">object_name</field> <field name="priority" eval="16"/> <field name="arch" type="xml"> <tree string="Beliebiger Text"> <field name="name"/> </tree> </field </record> <record model="ir.actions.act_window id="test_action"> <field name="name">Test Action</field> <field name="res_model">das.model</field> <field name="view_mode">graph</field> </record> <menuitem id="test_action_menuitem" name="Test Action" action="test_action"/> </data> </odoo>
Hier kann man auf ein Blick sehen wie das menuitem auf die action referenziert. Der tree view zeigt nur das name Feld an, würde man diesen record entfernen so würde odoo alle Felder unformatiert und mit ihrem string Attribut als label anzeigen.