16 · Regeln
regel bei neu Kommentar
neu Meldung
feld an = eintrag.beitrag.autor
feld text = eintrag.autor.name " hat auf deinen Beitrag geantwortet"Eine Regel ist das Einzige, was eine Fibel-App von selbst tut. Alles andere geschieht, weil jemand auf etwas geklickt hat.
Sie steht auf oberster Ebene, nicht im Model und nicht auf einer Seite — denn es geht nicht darum, wo jemand war, sondern was mit einem Datensatz geschieht.
regel bei neu <Model> | wenn ein Datensatz angelegt wird |
regel bei geändert <Model> | wenn er geändert wird |
Der auslösende Datensatz heißt darin eintrag — wie bei sichtbar, änderbar und post.
Was in einer Regel stehen darf
Drei Dinge, und die Liste ist vollständig:
regel bei geändert Bestellung
wenn eintrag.stand == "versandt"
neu Meldung
feld an = eintrag.besteller
feld text = "Deine Bestellung ist unterwegs."
ändere eintrag
feld versandt_am = jetztneu <Model>legt einen Datensatz an.ändere <datensatz>ändert einen — meiständere eintrag, also den auslösenden.wenn/sonstunterscheidet Fälle.
Darin steht je Zeile feld <name> = <wert>. Mehrere Werte nebeneinander werden aneinandergehängt, genau wie bei text "a" b. Steht dort nur einer, bleibt sein Wert, was er ist: feld an = eintrag.autor setzt einen Verweis, keinen Namen.
Kein Löschen und keine Schleife. Beides mit Absicht — siehe unten.
Der wichtigste Satz
Eine Regel löst keine andere aus.
Was eine Regel anlegt oder ändert, läuft nicht noch einmal durch die Regeln und verschickt auch keine Post. Jede Regel läuft genau einmal, je Änderung.
Ohne diesen Satz könnte man eine Endlosschleife hinschreiben, ohne eine zu schreiben: Regel A legt einen B an, die Regel für B legt einen A an, und niemand sieht dem Programm an, dass es nie fertig wird. Fibel sagt über sich, dass ein Programm garantiert terminiert. Das hier ist der Preis dafür, und er ist bewusst bezahlt.
Deshalb gibt es auch keine Schleife in einer Regel: Was für jeden Datensatz einer Liste geschehen soll, lässt sich heute nicht sagen.
Wer darf das?
Eine Regel läuft mit der Vollmacht des Programms, nicht der des Menschen davor. Sie darf also etwas anlegen, das derselbe Mensch über ein Formular nicht anlegen dürfte.
Das ist der Sinn der Sache: Eine Meldung für jemand anderen ist genau das — ein Datensatz, der einem Dritten gehört. Wer die .fibel-Datei schreibt, bestimmt ohnehin alles; die Rechte schützen die Nutzer voreinander, nicht das Programm vor sich selbst.
Was das bedeutet: Lies eine Regel so aufmerksam wie eine Rechteregel.
Was fibel prüfe daran findet
Eine Regel, die auf ein Model zeigt, das es nicht gibt, tut zur Laufzeit einfach nichts. Es geht nichts kaputt — und genau deshalb merkt es niemand. Darum wird beim Prüfen gemeldet:
- ein Model oder Feld, das es nicht gibt (auch
eintrag.tippfehler) - ein Pflichtfeld, das die Regel nicht setzt und das keine Vorgabe hat
ändere <Model>stattändere <datensatz>— es gibt kein „alle ändern"
Wo Regeln laufen
Überall, wo eine Aktion ausgeführt wird: auf dem Server, im Browser bei daten lokal, und in der nativen App. Es ist derselbe Code — es kann keinen Riss geben.
Was noch nicht geht
- Keine Schleife. „Hänge alle meine offenen Posten an diese Bestellung" braucht eine Änderung an mehreren Datensätzen auf einmal. Das ist der Warenkorb, und er fehlt weiterhin.
- Kein Löschen.
- Nichts Zeitgesteuertes.
regel täglich 08:00steht auf der Liste, gibt es aber nicht. Regeln hängen heute immer an einer Datenänderung. - Keine Regel auf Löschen.
regel bei gelöschtgibt es nicht.
Zurück zur Übersicht