menus, actions und views

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"/>


Der Name des Menüeintrags, dieser muß Einzigartig sein.

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.

Dies verweist auf das Verhalten das ausgelöst werden soll wenn auf den Menüeintrag geclickt wurde.

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


Der Typ des Views.

Der Name des Views der angezeigt werden soll wenn die action ausgelöst wurde.

Das model welches beeinflusst wird.

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


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