This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
it:openerp:general [2025/06/24 07:32] 20.171.207.8 old revision restored (2025/05/30 23:25) |
it:openerp:general [2025/06/24 08:34] (current) 20.171.207.8 old revision restored (2025/05/30 23:26) |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== OpenERP ====== | ====== OpenERP ====== | ||
- | ===== zu klärende Fragen zum Einstieg | + | ====== Server Konfigurationsdatei ====== |
- | * wie werden gelöschte Datensätze behandelt? (aus Tabelle gelöscht und wohin?) | + | * Damit kann man scheinbar einen Login hinterlegen - praktisch |
- | * Anbindung an OpenOffice | + | * Auto-Save für Formulare |
- | * Zuordnung Users zu partners | + | * [[http:// |
- | * res.partner' | + | |
- | ====== OpenERP Entwicklung ====== | + | ====== Standardmäßig extended view für admin setzen |
- | [[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 14: | ||
</ | </ | ||
- | ===== Felder anhand von Status sperren ===== | + | ====== Felder anhand von Status sperren |
<code python> | <code python> | ||
' | ' | ||
Line 24: | Line 20: | ||
| | ||
| | ||
- | ===== Spalten Create_Date und Write_Date einblenden: ===== | + | ====== Spalten Create_Date und Write_Date einblenden: |
<code python> | <code python> | ||
_columns = { | _columns = { | ||
Line 32: | Line 28: | ||
</ | </ | ||
- | ===== 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 34: | ||
</ | </ | ||
- | ===== 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 51: | ||
</ | </ | ||
- | === Übersetzung der message === | + | ===== Übersetzung der message |
In der .po Datei | In der .po Datei | ||
< | < | ||
Line 68: | Line 64: | ||
"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 73: | ||
</ | </ | ||
- | ===== 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 108: | ||
return{' | return{' | ||
</ | </ | ||
- | ==== Context => auf übergeordnete Felder zugreifen === | + | |
+ | ====== Context => auf übergeordnete Felder zugreifen | ||
<code xml> | <code xml> | ||
<field name=" | <field name=" | ||
Line 129: | Line 127: | ||
</ | </ | ||
- | ===== 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 133: | ||
</ | </ | ||
- | ===== Filter durch Context setzen ===== | + | ====== Filter durch Context setzen |
<code xml> | <code xml> | ||
Line 145: | Line 143: | ||
# 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 156: | ||
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 176: | ||
- | ===== 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 203: | ||
} | } | ||
</ | </ | ||
- | ===== 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 216: | ||
| | ||
----------------- | ----------------- | ||
- | ===== 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 242: | ||
</ | </ | ||
- | == Readonly | + | ====== Feldattribute in Abhängigkeit vom Status setzen, z.B. readonly |
<code python> | <code python> | ||
Line 247: | Line 252: | ||
<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 325: | ||
- | ===== 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 336: | ||
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 365: | ||
<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 390: | ||
- | ===== Controller Ebene ===== | + | ====== |
+ | <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: | ||