Beziehungen Relationships
Beschreibung:
Ein Nachteil von der Budibase DB ist, das in einigen GUI Elementen wie auch im AUtomator die Verknüpften Tabellen Felder nicht angezeigt werden. Aber es gibt Gott sei Dank ein Workaround dafür.
Wir wollen in diesem Beispiel bestellungen kunden zu ordnen.
Ausgangssituation.
In unserem Beispiel haben wir eine Tabelle Kunden und eine Tabelle Bestellungen.
Wir haben die Anzahl der Felder so minimalistisch gelassen, weil es hier ums Prinzip geht
Die Tabelle Kunden hat folgene Felder.
AutoID
Name
Vorname
Die Tabelle Bestellungen hat folgende Felder
AutoID
artikel
anzahl
preis
gesamtpreis
Der Gesamtpreis ist vom Typ Formula. Also ein berechneter Wert.
Die formel dazu heißt
{{ multiply anzahl preis }}
Beziehung herstellen
WIr gehen auf die Tabelle Kunden und erstellen ien neues Feld mit dem Namen bestellung.
als Type wählen wir Relationship
Dann wählen wir die Tabelle aus mit der Verknüpft werden soll.
also Bestellungen
Welche Beziehung soll es sein.
Hier kann ein Kunde mehrere Bestellungen, Also one kunden row -> many bestellungen rows
nun wird auch automatisch ein feld in der tabelle bestellungen angelegt.
Wir müssen nur noch den namen angeben.
Kunden oder kunde macht vielleicht sinn
Über add row fügen wir zwei kunden ein.
Max Mustermann
und Anna Schulz
Jetzt sieht unsere Tabelle Kunden so aus.
Nun legen wir eine Bestellung an, werden aber gleich sehen das da was nicht stimmt bzw blöd ist
Eine neue Row in bestellungen anlegen.
Artikel intel i5
preis 150
anzahl 2
und nun können wir den kunden auswählen.
und da haben wird, es werden die IDs vom Kunden angezeigt.
Ein bisschen blöd sich die ids zu merken wer nun Max oder Anna ist
Grundsätzlich erstell ich noch ein Feld in der tabelle mit dem namen der tabelle und anzeige dran.
Bei Kunden zum Beispiel. kundenanzeige.
Es gibt bei feldern ein Flag das geschaltet werden kann, das dieses als Anzeige Benutzt werden soll, bei Beziehungen.
Wir erstellen ein neues Feld kundenanzeige vom typ Formula
Wir wollen das in diesem Feld der Vorname und Nachname zusammen angezeigt wird.
Das ist die Formel. Über das Blitzsymbol kann man schnell die Formel zusammen klicken.
{{ Vorname }} {{ Name }}
Und nun kommt der Clou. Den schieber use as table display coloumn aktivieren.
In einer tabelle kann das immer nur ein Feld sein. Würded Ihr ein anderes Feld dies einhaken, würde hier der Haken wieder rausgehen.
Nun gehen wir wieder in unsere Bestellungen und wählen den Kunden aus.
Tadaaa, jetzt ist es lesbarer als nur die IDs.
Nun wollen wir natürlich eine App draus bauen.
Allerdings kann Budibase nicht auf die verlinke id zugreifen.
Wir erstellen uns zwei screens.
Eine mit ner Tabelle für die kunden.
Dazu Komponente table block hinzufügen
und die Tabelle kunden auswählen
Jetz konfigurieren wir noch de culoums. Denn die Bestellungen und die Kundenazeige wollen wir da nicht drin haben.
in unserem Beispiel sollen die Bestellungen über einen Button geöffnet werden als modal.
So das alle Bestellungen für den Kunden auf einen Blick sind.N
Und das ist der Grund warum in Budibase ein Workaround nutzen muss, denn Relationship Felder werden nicht angezeigt.
Aber dazu später.
Unser Screen sieht jetzt so aus
Nun erstellen wir einen zweiten screen mit einer Tabelle die die Bestellungen beinhaltet.
ich hab den Screen Details genannt.
Wieder einen Tabell hinzugefügt und die Spalten angepasst.
Die Spalte Kunde brauchen wir nicht, da ja nur bestellungen von einem kunden aufgerufen werden.
Unser Screen sieht dann so aus.
Nun gehen wir in den ersten screen zurück und erstellen einen Button in der Tabelle
Nun auf define actions klicken.
Dort Update State Action hinzufügen
Eine Vaaible mit KUNDENID angeben und dann auf den Blitz klicken
Nun als Wert die ID von der Tabell Kunden angeben.
Über den Asistenten -> Table -> _id
schnell ausgwählt
Nun ein navigate als zwiete Aktion hinzufügen. Dort denn screen details auswählen:
ob im Vollbild oder Modal geöffnet werden soll bleibt euch überlassen.
ich find das Modal aber an Budibase ja so genial, deshalb lass ich Modal drin.
So nun kommt der eigentliche Workaround, aber erstmal schauewn wir uns an, wass denn nicht funktioniert.
Dazu gehen wir in den Screen details.
klicken unseren Dataprovider an
und gehen auf define Filters.
Denn hier wollen wir ja nur die Betsellungen vom kunden mit der ID die vir in die variable gesetzt haben lesen.
Aber hier ist das Problem kein Feld kunden in der auswahl!!!!

Da behlfen wir uns eines kleinen tricks.
Wir gehen die Tabelle Bestellen zurück und fügen ein neues Feld hinzu.
Dieses nennen wir kundenrel.
Ich mach das immer so, das ich in einer tabelle wo ich ein relationsfeld habe, dieses feld nochmals erstelle allerdings mit rel am ende und vom typ formula. Dann nur static und folgende Formel rein.
wichtig unter javascript!!!
wichtig ist auf die Groß und Kleinsschreibung des Feldnamens zu achten.
Deshalb schreib ich alle Feldnamen in tabellen immer alles klein
return $("kunden")[0]._id
Nun in der Tabelle bestellungen das neue Feld erstellen mit Static
Nun nachdem auf dem Blitz geklickt wurde auf Javascript klicken und die oben genannte formel angeben.
wichtig ist auf die Groß und Kleinsschreibung des Feldnamens zu achten.
Deshalb schreib ich alle Feldnamen in tabellen immer alles klein
Nun sieht das ganze so aus und speichern
Nun haben wir einen pointer auf die ID.
Jetzt legen wir noch eine betsellung an, damit wir zwei datensätze haben.
Nachdem wir diese angelegt haben. Sind in unserer Datenbak zwei Kunden und zwei Bestellungen.
Wir haben die Bestellungen jeweils einem Kunden zugeordnet.
Da wir den filter noch definiert haben werden beide angezeigt
Nun wieder auf define filzter im Dataprovider
Jetzt steht kundenrel in der Auswahl. Jippie
Nun die Formel vervollständigen.
Dazu equal auswählen und bindings, dann wird der blitz freigeschaltet.
Dann auf den blitz klicken
unter State werden alle Variablen angezeigt die angelegt wurden.
Nun auf State klicken und die Variable KUNDENID raussuchen.
Wenn wir nachher noch mehrere Screens haben, wir können diese Variable immer wieder überschreiben, beim button. Denn es kann ja immer nur ein fenster gleichzeitig angezigt werden.
Deshalb ist in meinem gesamten Programm auch KUNDENID verwendetbar.
Weil wo ichs brauche schreib ich die neue ID rein, über die Buttons im Home screen oder wo auch immer ich das brauche.
Nun sieht die Formel so aus, noch speichern fertig.
Nun können wir auf preview gehen und auf den Home screen
Nun bei dem jeweiligen Kunden auf bestellungen öffnen klicken
Und eh voila, ein Modal mit den Bestellungen für den Kunden, in diesem Falle Max
Und hier Anna
Wir legen noch eine Bestellung für Anna an.
Dazu wieder in die Data wechseln und eine row anlegen in bestellungen und Anna zuordnen.
Nun hat Anna zwei Bestellungen.
Fertig, kleiner Trick große wirkung, mit dem extra Feld in das die id kopiert wird.



























