Fibel

16 · Regeln

fibel
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:

fibel
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 = jetzt
  • neu <Model> legt einen Datensatz an.
  • ändere <datensatz> ändert einen — meist ändere eintrag, also den auslösenden.
  • wenn / sonst unterscheidet 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:00 steht auf der Liste, gibt es aber nicht. Regeln hängen heute immer an einer Datenänderung.
  • Keine Regel auf Löschen. regel bei gelöscht gibt es nicht.

Zurück zur Übersicht