This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
it:openerp:general [2026/04/22 16:03] 47.128.46.74 old revision restored (2025/12/18 07:36) |
it:openerp:general [2026/04/30 20:45] (current) 47.128.47.104 old revision restored (2025/12/31 23:48) |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ====== OpenERP ====== | ====== OpenERP ====== | ||
| - | ===== zu klärende Fragen zum Einstieg ===== | + | ====== Standardmäßig extended view für admin setzen |
| - | * wie werden gelöschte Datensätze behandelt? (aus Tabelle gelöscht und wohin?) | + | |
| - | * Anbindung an OpenOffice | + | |
| - | * Zuordnung Users zu partners | + | |
| - | * res.partner' | + | |
| - | + | ||
| - | ====== OpenERP Entwicklung ====== | + | |
| - | [[openerp: | + | |
| - | + | ||
| - | ===== Standardmäßig extended view für admin setzen ===== | + | |
| <code xml> | <code xml> | ||
| <!-- Set Extended View for Administrator --> | <!-- Set Extended View for Administrator --> | ||
| Line 18: | Line 9: | ||
| </ | </ | ||
| - | ===== Felder anhand von Status sperren ===== | + | ====== Felder anhand von Status sperren |
| <code python> | <code python> | ||
| ' | ' | ||
| Line 24: | Line 15: | ||
| | | ||
| | | ||
| - | ===== Spalten Create_Date und Write_Date einblenden: ===== | + | ====== Spalten Create_Date und Write_Date einblenden: |
| <code python> | <code python> | ||
| _columns = { | _columns = { | ||
| Line 32: | Line 23: | ||
| </ | </ | ||
| - | ===== Encoding ===== | + | ====== Encoding |
| Unbedingt alle Python Dateien mit UTF-8 explizit kodieren, um ASCII-Konvertierungsfehler zu vermeiden. | Unbedingt alle Python Dateien mit UTF-8 explizit kodieren, um ASCII-Konvertierungsfehler zu vermeiden. | ||
| <code python> | <code python> | ||
| Line 38: | Line 29: | ||
| </ | </ | ||
| - | ===== Domain Filter auf one2many Spalte ===== | + | ====== Domain Filter auf one2many Spalte |
| [[http:// | [[http:// | ||
| - | ===== Active Spalte ===== | + | ====== Active Spalte |
| Legt man eine Bool-Spalte namens " | Legt man eine Bool-Spalte namens " | ||
| - | ===== Message an ui ===== | + | ====== Message an ui ====== |
| Line 55: | Line 46: | ||
| </ | </ | ||
| - | === Übersetzung der message === | + | ===== Übersetzung der message |
| In der .po Datei | In der .po Datei | ||
| < | < | ||
| Line 68: | Line 59: | ||
| "die Produktmengeneinheit (ME) des Einkaufs befindet" | "die Produktmengeneinheit (ME) des Einkaufs befindet" | ||
| </ | </ | ||
| - | ===== einen String übersetzen ===== | + | |
| + | ====== einen String übersetzen | ||
| <code python> | <code python> | ||
| from tools.translate import _ | from tools.translate import _ | ||
| Line 76: | Line 68: | ||
| </ | </ | ||
| - | ===== summmen von float fields im tree ==== | + | ====== summmen von float fields im tree ==== |
| <code xml> | <code xml> | ||
| <field name=" | <field name=" | ||
| </ | </ | ||
| - | ===== ein browse-objekt per xml-id holen ===== | + | ====== ein browse-objekt per xml-id holen ====== |
| <code python> | <code python> | ||
| print pool.get(" | print pool.get(" | ||
| </ | </ | ||
| - | ===== kontextsensitive Suchformulare ===== | + | ====== kontextsensitive Suchformulare |
| < | < | ||
| Line 111: | Line 103: | ||
| return{' | return{' | ||
| </ | </ | ||
| - | ==== Context => auf übergeordnete Felder zugreifen === | + | |
| + | ====== Context => auf übergeordnete Felder zugreifen | ||
| <code xml> | <code xml> | ||
| <field name=" | <field name=" | ||
| Line 129: | Line 122: | ||
| </ | </ | ||
| - | ===== Spezifischen View in Field durch context verwenden ===== | + | ====== Spezifischen View in Field durch context verwenden |
| <code xml> | <code xml> | ||
| #zur Verfügung stehen search_view_ref, | #zur Verfügung stehen search_view_ref, | ||
| Line 135: | Line 128: | ||
| </ | </ | ||
| - | ===== Filter durch Context setzen ===== | + | ====== Filter durch Context setzen |
| <code xml> | <code xml> | ||
| Line 145: | Line 138: | ||
| # 1 = filter an, 0 = filter aus | # 1 = filter an, 0 = filter aus | ||
| </ | </ | ||
| - | ===== SQL Constraints ===== | + | |
| + | ====== SQL Constraints | ||
| Im Modul res.groups habe folgende Anweisung entdeckt: | Im Modul res.groups habe folgende Anweisung entdeckt: | ||
| Line 157: | Line 151: | ||
| und nicht zwei. | und nicht zwei. | ||
| - | ===== xml_id in id umwandeln ===== | + | ====== xml_id in id umwandeln |
| <code xml> | <code xml> | ||
| <record id=" | <record id=" | ||
| Line 177: | Line 171: | ||
| - | ===== domain in action window mit xml_id ===== | + | ====== domain in action window mit xml_id |
| <code xml> | <code xml> | ||
| <field name=" | <field name=" | ||
| </ | </ | ||
| - | ===== lambda Ausdrücke in defaults columns ===== | + | ====== lambda Ausdrücke in defaults columns |
| <code python> | <code python> | ||
| Line 204: | Line 198: | ||
| } | } | ||
| </ | </ | ||
| - | ===== defaults überschreiben ===== | + | |
| + | ====== defaults überschreiben | ||
| Hiermit wird der default Wert des Feldes date überschrieben. | Hiermit wird der default Wert des Feldes date überschrieben. | ||
| <code xml> | <code xml> | ||
| <field name=" | <field name=" | ||
| </ | </ | ||
| - | ==== Praktische Parameter der openerp_server.py ==== | + | |
| + | ====== Praktische Parameter der openerp_server.py | ||
| Um nur ein spezifisches Modul beim start neu zu laden: | Um nur ein spezifisches Modul beim start neu zu laden: | ||
| Line 215: | Line 211: | ||
| | | ||
| ----------------- | ----------------- | ||
| - | ===== Model Ebene ===== | + | |
| - | == Felder | + | ====== |
| Wenn das Feld related auf ein one2many Feld zeigt, dann wird dort das erste Element verwendet | Wenn das Feld related auf ein one2many Feld zeigt, dann wird dort das erste Element verwendet | ||
| unter Beachtund der Sortierung (_order). | unter Beachtund der Sortierung (_order). | ||
| - | == Erweitern von Standard Selection Fields == | + | ====== Erweitern von Standard Selection Fields |
| Beispielsweise gibt es bei res.partner ein Auswahlfeld für den Adresstyp. Um diesen | Beispielsweise gibt es bei res.partner ein Auswahlfeld für den Adresstyp. Um diesen | ||
| zu erweitern, muss im __init__.py der eigenen Klasse per Programmcode die neuen Selections | zu erweitern, muss im __init__.py der eigenen Klasse per Programmcode die neuen Selections | ||
| hinzugefügt werden. Geht so: | hinzugefügt werden. Geht so: | ||
| + | |||
| + | <note important> | ||
| + | folgendes Vorgehen eigentlich nicht mehr so notwendig und vereinfacht sich so, dass nur ein weiteres | ||
| + | selection-Feld hinzugefügt werden muss. Dieses ergänzt dann die Auswahlwerte.</ | ||
| <code python> | <code python> | ||
| Line 237: | Line 237: | ||
| </ | </ | ||
| - | == Readonly | + | ====== Feldattribute in Abhängigkeit vom Status setzen, z.B. readonly |
| <code python> | <code python> | ||
| Line 247: | Line 247: | ||
| <group attrs=" | <group attrs=" | ||
| </ | </ | ||
| - | ==== Many2Many Felder Füllen ==== | + | |
| + | ====== Many2Many Felder Füllen | ||
| < | < | ||
| Note: The type of field values to pass in vals for relationship fields is specific: | Note: The type of field values to pass in vals for relationship fields is specific: | ||
| Line 319: | Line 320: | ||
| - | ===== View Ebene ===== | + | ====== Aus einem Tree oder From View einen anderen View per Python-Code |
| - | === View öffnen === | + | |
| - | Aus einem Tree oder From View einen anderen View öffnen | + | |
| <code python> | <code python> | ||
| #wizard erstellen | #wizard erstellen | ||
| - | class open_ref_wizard(wizard.interface): | + | class open_ref_wizard(osv.osv_memory): |
| | | ||
| def open_ref(self, | def open_ref(self, | ||
| Line 331: | Line 331: | ||
| return { | return { | ||
| ' | ' | ||
| + | ' | ||
| ' | ' | ||
| - | ' | + | ' |
| ' | ' | ||
| - | ' | + | ' |
| ' | ' | ||
| ' | ' | ||
| ' | ' | ||
| - | } | + | #weitere parameter: |
| - | + | 'nodestroy': | |
| - | states = { | + | 'views': [(view_id_cal, 'calendar'), (view_id_form, 'form'), (view_id_tree, 'tree')], |
| - | | + | |
| - | 'actions': [], | + | |
| - | ' | + | |
| - | ' | + | |
| - | | + | |
| - | | + | |
| - | } | + | |
| } | } | ||
| } | } | ||
| - | open_ref_wizard(' | + | |
| + | open_ref_wizard() | ||
| </ | </ | ||
| + | <note tip> | ||
| + | |||
| + | <note warning> | ||
| + | |||
| + | ====== Old-Style Wizards ====== | ||
| <code xml> | <code xml> | ||
| <!-- wizard definieren --> | <!-- wizard definieren --> | ||
| Line 360: | Line 360: | ||
| <button string=" | <button string=" | ||
| </ | </ | ||
| - | === Message an UI === | + | ====== Message an UI ====== |
| <code python> | <code python> | ||
| raise osv.osv.except_osv(" | raise osv.osv.except_osv(" | ||
| </ | </ | ||
| - | == Events == | + | ====== Events |
| Felder in Views haben ein " | Felder in Views haben ein " | ||
| [[http:// | [[http:// | ||
| Line 385: | Line 385: | ||
| + | ====== Objekt-ID per XML-ID holen ====== | ||
| + | <code python> | ||
| + | xml_id = " | ||
| + | try: | ||
| + | _, id = self.pool.get(' | ||
| + | except: | ||
| + | id = None | ||
| + | </ | ||
| - | ==== Links ==== | + | @Miki: wo ist die get_object Methode??? |
| + | ====== | ||
| + | <code xml> | ||
| + | < | ||
| + | < | ||
| + | <record model=" | ||
| + | <field name=" | ||
| + | <field name=" | ||
| + | <field name=" | ||
| + | </ | ||
| + | <record model=" | ||
| + | <field name=" | ||
| + | <field name=" | ||
| + | <field name=" | ||
| + | <field name=" | ||
| + | <field name=" | ||
| + | #method must have params(self, | ||
| + | obj.a_cool_method() | ||
| + | |||
| + | </ | ||
| + | </ | ||
| + | |||
| + | |||
| + | < | ||
| + | < | ||
| + | |||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| - | [[it: | + | ====== view.xml ====== |
| + | <code xml> | ||
| + | < | ||
| + | < | ||
| + | <record id=" | ||
| + | <field name=" | ||
| + | <field name=" | ||
| + | <field name=" | ||
| + | <field name=" | ||
| + | <tree string=" | ||
| + | < | ||
| + | <field name=" | ||
| + | <field name=" | ||
| + | <field name=" | ||
| + | < | ||
| + | < | ||
| + | <field name=" | ||
| + | <field name=" | ||
| + | <field name=" | ||
| + | <field name=" | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | <record id=" | ||
| + | <field name=" | ||
| + | <field name=" | ||
| + | <field name=" | ||
| + | <field name=" | ||
| + | < | ||
| + | < | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| - | [[it:openerp:client| OpenERP Client]] | + | <record id=" |
| - | ==== Schnittstellen | + | <field name=" |
| + | <field name=" | ||
| + | <field name=" | ||
| + | <field name=" | ||
| + | <form string=" | ||
| + | <field name=" | ||
| + | <field name=" | ||
| + | <field name=" | ||
| + | <field name=" | ||
| + | <group colspan=" | ||
| + | < | ||
| + | <group colspan=" | ||
| + | <field name=" | ||
| + | <field name=" | ||
| + | < | ||
| + | </ | ||
| + | < | ||
| + | <group colspan=" | ||
| + | <field name=" | ||
| + | | ||
| + | </ | ||
| + | </ | ||
| + | < | ||
| + | <field name=" | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | <record model=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | <field name=" | ||
| + | <field name=" | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | </openerp> | ||
| + | </ | ||
| + | |||
| + | ====== Action-Button und Methode aus Model ====== | ||
| + | |||
| + | **Methode in Model**: | ||
| + | <code python> | ||
| + | def assign_task_to_me(self, | ||
| + | |||
| + | ======= | ||
| + | | ||
| + | </ | ||
| + | |||
| + | **View XML**: | ||
| + | <code xml> | ||
| + | <button name=" | ||
| + | </ | ||
| + | ====== Kontextbezogenes Editieren ====== | ||
| + | <code xml> | ||
| + | <field name=" | ||
| + | </ | ||
| + | |||
| + | ====== SQL Constraints in Python-Klassen ====== | ||
| + | <code python> | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | ] | ||
| + | |||
| + | |||
| + | </ | ||
| + | |||
| + | ====== | ||
| + | <code xml> | ||
| + | <tree colors=" | ||
| + | </ | ||
| - | === Agenda === | ||
| - | == Offene Posten == | ||
| - | [[it: | ||