feat: content import system - Markdown parser, importer, 7 decks + 3 tutorials + 5 cheatsheets
Dieser Commit ist enthalten in:
Ursprung
1c59b667f2
Commit
6a504254b0
17 geänderte Dateien mit 2658 neuen und 0 gelöschten Zeilen
143
edu/content/cheatsheets/windows-cheatsheet.md
Normale Datei
143
edu/content/cheatsheets/windows-cheatsheet.md
Normale Datei
|
|
@ -0,0 +1,143 @@
|
|||
# Window-Architektur Cheat Sheet
|
||||
|
||||
## Klassenhierarchie
|
||||
```
|
||||
wBaseWindow (Wurzel - keine Superklasse)
|
||||
+-- wMainWindow (eigenstaendige Fenster: wOrders, wParts...)
|
||||
+-- wSubWindow (eingebettete Panels: wOrder, wOrderItems...)
|
||||
```
|
||||
|
||||
## Wichtigste Instanzvariablen
|
||||
|
||||
### Auf ALLEN Fenstern (von wBaseWindow):
|
||||
| Variable | Zweck |
|
||||
|----------|-------|
|
||||
| `ioCode` | Business-Logik-Objekt |
|
||||
| `iiRef2SubWindow` | Referenz auf aktives SubWindow |
|
||||
| `ibControl2SubWindow` | `kTrue` = Commands gehen an SubWindow |
|
||||
| `ilList` | Haupt-Datenliste |
|
||||
| `irRow` | Aktuelle Datenzeile |
|
||||
| `inEDMode` | Bearbeitungsmodus |
|
||||
| `icCurrTabPane` | Aktiver Tab-Reiter |
|
||||
|
||||
### Nur auf wSubWindow:
|
||||
| Variable | Zweck |
|
||||
|----------|-------|
|
||||
| `iiRef2Parent` | Referenz ZURUECK zum Elter |
|
||||
| `icFormWindow` | Name fuer Rechte-Check |
|
||||
| `icSubWindow` | SubWindow-Feldname |
|
||||
|
||||
## DAS zentrale Pattern: Command-Delegation
|
||||
```omnis
|
||||
## Auf jedem Fenster identisch:
|
||||
If $cinst.ibControl2SubWindow
|
||||
Do iiRef2SubWindow.$cXxx() ## -> Weiter ans SubWindow
|
||||
Else
|
||||
Do $cinst.ioCode.$cXxx() ## -> Business-Logik
|
||||
End If
|
||||
```
|
||||
|
||||
## Lebenszyklus
|
||||
|
||||
### $construct (SubWindow meldet sich an):
|
||||
```omnis
|
||||
Do inherited
|
||||
Set reference iiRef2SubWindow to $cinst.$objs.wSubWindow.$ref
|
||||
Set reference iiRef2Parent to pRef2Parent
|
||||
Do iiRef2Parent.$setControl2SubWindow(kTrue) ## KONTROLLE UEBERNEHMEN
|
||||
```
|
||||
|
||||
### $destruct (SubWindow meldet sich ab):
|
||||
```omnis
|
||||
If iiRef2Parent
|
||||
Do iiRef2Parent.$setControl2SubWindow(kFalse) ## KONTROLLE ZURUECKGEBEN
|
||||
End If
|
||||
Do ilList.$define()
|
||||
Do irRow.$define()
|
||||
```
|
||||
|
||||
### $closeWindow (delegiert nach oben):
|
||||
```omnis
|
||||
Do iiRef2Parent.$closeWindow() ## Parent schliesst das Fenster
|
||||
```
|
||||
|
||||
### $EnableTabPane (sperrt Tabs nach oben):
|
||||
```omnis
|
||||
Do iiRef2Parent.$EnableTabPane($cinst.inEDMode) ## Parent sperrt seine Tabs
|
||||
```
|
||||
|
||||
## Command-Fluss Beispiel (Sales/wOrders)
|
||||
```
|
||||
User klickt [Edit]
|
||||
-> wOrders.$cEdit (wMainWindow)
|
||||
-> $closeRelatedWindow()
|
||||
-> ibControl2SubWindow = kTrue
|
||||
-> wOrder.$cEdit (wSubWindow Ebene 1)
|
||||
-> ibControl2SubWindow = kTrue
|
||||
-> wOrderItems.$cEdit (wSubWindow Ebene 2)
|
||||
-> ibControl2SubWindow = kFalse
|
||||
-> ioCode.$cEdit() == oOrderItems.$cEdit()
|
||||
-> HIER passiert die Aktion!
|
||||
```
|
||||
|
||||
## Alle delegierten Commands
|
||||
|
||||
### wMainWindow (mit $closeRelatedWindow):
|
||||
`$cEdit`, `$cCancel`, `$cAudit`, `$cNextVersion`
|
||||
|
||||
### wSubWindow (ohne $closeRelatedWindow):
|
||||
`$cEdit`, `$cCancel`, `$cInsert`, `$cDelete`, `$cSave`, `$cPrint`, `$cAudit`, `$cNextVersion`, `$cFirst`, `$cLast`
|
||||
|
||||
## Referenz-Kette
|
||||
```
|
||||
iiRef2SubWindow iiRef2SubWindow
|
||||
MainWindow ----------> SubWindow ----------> SubSubWindow
|
||||
<---------- <----------
|
||||
iiRef2Parent iiRef2Parent
|
||||
```
|
||||
|
||||
## Cross-Library Vererbung
|
||||
```
|
||||
# Innerhalb solution2-Library:
|
||||
wMeinFenster extends wSubWindow
|
||||
|
||||
# Aus anderer Library (Sales, Manufacturing...):
|
||||
wMeinFenster extends solution2.wSubWindow ## Library-Prefix noetig!
|
||||
```
|
||||
|
||||
## TabPane-Konvention
|
||||
```
|
||||
TabPane-Objekt heisst IMMER: TP
|
||||
Zugriff: $cwind.$objs.TP.$enableTabPanes(pEDMode)
|
||||
```
|
||||
|
||||
## 7 Goldene Regeln
|
||||
```
|
||||
1. ibControl2SubWindow bestimmt ALLES
|
||||
2. $construct: inherited aufrufen = Kette aufbauen
|
||||
3. $destruct: Kontrolle zurueckgeben
|
||||
4. Commands fliessen ABWAERTS (Main -> Sub -> SubSub)
|
||||
5. TabPane-Sperren fliessen AUFWAERTS (Sub -> Parent)
|
||||
6. $closeWindow delegiert AUFWAERTS
|
||||
7. ioCode ist der letzte Stopp (kein SubWindow aktiv)
|
||||
```
|
||||
|
||||
## Debugging Quick-Check
|
||||
```omnis
|
||||
# 1. Wer hat die Kontrolle?
|
||||
Calculate lDebug as $cinst.ibControl2SubWindow
|
||||
|
||||
# 2. Ist SubWindow-Referenz gueltig?
|
||||
If iiRef2SubWindow
|
||||
# Referenz existiert
|
||||
End If
|
||||
|
||||
# 3. Welches SubWindow ist aktiv?
|
||||
Calculate lClass as iiRef2SubWindow.$classname
|
||||
|
||||
# 4. Hat $construct inherited aufgerufen?
|
||||
# -> Breakpoint in wSubWindow.$construct setzen
|
||||
|
||||
# 5. Ist Superklasse korrekt?
|
||||
# -> Class Inspector -> Superclass pruefen
|
||||
```
|
||||
Laden …
Tabelle hinzufügen
Einen Link hinzufügen
In neuem Issue referenzieren