# Flashcard Deck: $ Notation **Thema**: Das Omnis $-Notationssystem **Schwierigkeit**: Anfaenger -> Fortgeschritten **Karten**: 30 --- ## Karte 1 | Basis **Q:** Was bedeutet `$cinst` in Omnis? **A:** Die aktuelle Instanz - aequivalent zu `this` in JavaScript oder `self` in Python. Zeigt auf das aktuelle Window/Objekt. --- ## Karte 2 | Basis **Q:** Wie liest du den Inhalt eines Feldes "customerName" auf dem aktuellen Window? **A:** `Calculate lVal as $cinst.$objs.customerName.$contents` --- ## Karte 3 | Basis **Q:** Wie SETZT du den Inhalt eines Feldes? Warum geht `= ` nicht? **A:** `Do $cinst.$objs.customerName.$contents.$assign("Meier")` - Man muss `$assign()` verwenden, weil Notation-Pfade Objekte sind, keine einfachen Variablen. --- ## Karte 4 | Basis **Q:** Was ist der Unterschied zwischen `$objs` und `$bobjs`? **A:** `$objs` = Objekte auf dem aktuellen Fenster/Form. `$bobjs` = "Background objects" / Objekte auf einer Superklasse (geerbte Objekte). --- ## Karte 5 | Basis **Q:** Was gibt `$clib` zurueck? **A:** Die aktuelle Library (das Omnis-Projekt / .lbs Datei), in der der Code laeuft. --- ## Karte 6 | Basis **Q:** Wie greifst du auf eine andere Klasse in der gleichen Library zu? **A:** `Do $clib.$classes.ClassName.$open() Returns lRef` --- ## Karte 7 | Mittel **Q:** Was bedeutet `$ctask`? **A:** Der aktuelle Task - eine Art globaler Kontext/Session. Task-Variablen (`tVar`) leben hier. --- ## Karte 8 | Mittel **Q:** Wie machst du ein Feld unsichtbar? **A:** `Do $cinst.$objs.fieldName.$visible.$assign(kFalse)` --- ## Karte 9 | Mittel **Q:** Wie rufst du eine Methode auf einem anderen Objekt auf? **A:** `Do iMyObject.$methodName(param1, param2) Returns lResult` --- ## Karte 10 | Mittel **Q:** Was ist `$cols` bei einer Liste? **A:** Die Spalten-Sammlung einer Liste. `lList.$cols.$add('name', kCharacter, kSimplechar, 255)` fuegt eine Spalte hinzu. --- ## Karte 11 | Mittel **Q:** Wie zaehlt man die Zeilen einer Liste? **A:** `Calculate lCount as lList.$linecount` --- ## Karte 12 | Mittel **Q:** Was macht `$line`? **A:** Gibt die aktuelle Zeilennummer einer Liste zurueck oder setzt sie. `Do lList.$line.$assign(5)` springt zu Zeile 5. --- ## Karte 13 | Mittel **Q:** Wie greifst du auf den Wert einer Spalte "price" in der aktuellen Zeile einer Liste zu? **A:** `Calculate lPrice as lList.price` (wenn `$line` gesetzt ist) oder `Calculate lPrice as lList.[lRow].price` fuer eine bestimmte Zeile. --- ## Karte 14 | Fortgeschritten **Q:** Was ist `$sendall()`? **A:** Fuehrt einen Befehl fuer ALLE Zeilen einer Liste aus - wie `forEach` in JS. Beispiel: `Do lList.$sendall($ref.price.$assign($ref.price * 1.19))` (19% MwSt auf alle Preise) --- ## Karte 15 | Fortgeschritten **Q:** Was bedeutet `$ref` in `$sendall`? **A:** `$ref` ist die Referenz auf die aktuelle Zeile innerhalb von `$sendall` - wie der Callback-Parameter in `Array.forEach(item => ...)`. --- ## Karte 16 | Fortgeschritten **Q:** Wie findest du eine Zeile in einer Liste per Suche? **A:** `Do lList.$search(lList.id = lSearchID)` - Setzt `$line` auf die gefundene Zeile. `#F` (Flag) zeigt Erfolg. --- ## Karte 17 | Fortgeschritten **Q:** Was ist `$getAllCols()`? **A:** Laedt alle Spalten einer Datenbankabfrage in die Liste, ohne sie einzeln zu benennen. --- ## Karte 18 | Basis **Q:** Was macht `kTrue` vs `kFalse`? **A:** Omnis-Konstanten fuer Boolean true/false. Immer mit `k`-Praefix (k = Konstante). --- ## Karte 19 | Mittel **Q:** Wie oeffnest du ein Window (Fenster)? **A:** `Do $clib.$windows.wMyWindow.$open('*') Returns lWinRef` --- ## Karte 20 | Mittel **Q:** Was bedeutet der `'*'` Parameter bei `$open`? **A:** Oeffnet das Fenster als neue Instanz. Ohne `'*'` wird eine bestehende Instanz wiederverwendet. --- ## Karte 21 | Fortgeschritten **Q:** Wie iterierst du ueber alle Objekte auf einem Window? **A:** `For each $cinst.$objs as lObj` - wie `for (const el of document.querySelectorAll('*'))` in JS. --- ## Karte 22 | Fortgeschritten **Q:** Was ist der Unterschied zwischen `$cclass` und `$cinst`? **A:** `$cclass` = die Klasse (Bauplan/Template), `$cinst` = die konkrete Instanz (laufendes Objekt). Wie `MyClass` vs `myInstance` in JS. --- ## Karte 23 | Basis **Q:** Wie gibt eine Methode einen Wert zurueck? **A:** `Quit method lReturnValue` - aequivalent zu `return lReturnValue` in JS. --- ## Karte 24 | Mittel **Q:** Was ist `$event`? **A:** Die Standard-Event-Handler-Methode einer Klasse. Wird bei UI-Events aufgerufen (wie `onClick`). Parameter `pEventCode` enthaelt den Event-Typ. --- ## Karte 25 | Fortgeschritten **Q:** Unterschied `$event` vs `$eventclient` bei Remote Forms? **A:** `$event` = laeuft auf dem SERVER. `$eventclient` = laeuft im BROWSER (JavaScript). Fuer schnelle UI-Reaktionen `$eventclient` verwenden. --- ## Karte 26 | Fortgeschritten **Q:** Wie greifst du von einer Instanz auf die Instanz-Variable eines anderen offenen Windows zu? **A:** `Calculate lVal as $iwindows.wOtherWindow.$ivar.iMyVariable` --- ## Karte 27 | Mittel **Q:** Was macht `$add()` bei einer Liste? **A:** Fuegt eine neue leere Zeile am Ende hinzu. `Do lList.$add()`. Danach Werte setzen mit `Calculate lList.colName as "wert"`. --- ## Karte 28 | Mittel **Q:** Wie loeschst du eine Zeile aus einer Liste? **A:** `Do lList.$remove(lList.$line)` - entfernt die aktuelle Zeile. Oder `Do lList.$remove(5)` fuer Zeile 5. --- ## Karte 29 | Fortgeschritten **Q:** Was ist `$define()` bei einem Schema/Query? **A:** Definiert die Spaltenstruktur. `Do lSchema.$define(col1, col2, ...)` - wie ein CREATE TABLE fuer eine Omnis-Datenstruktur. --- ## Karte 30 | Fortgeschritten **Q:** Wie navigierst du durch die gesamte Omnis-Objekthierarchie? **A:** Von oben: `$root` -> `$libs` -> Library -> `$classes` -> Class -> `$methods` / `$objs` / `$ivars`. Alles ist ein Baum mit `$` Pfaden! --- ## Spaced Repetition Tracking | Karte | Zuletzt | Naechste | Schwierigkeit | |-------|---------|----------|---------------| | (wird beim Ueben gefuellt) | | | |