Direkt zum Hauptinhalt

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

Auswahl_076.png

Über add row fügen wir zwei kunden ein.
Max Mustermann
und Anna Schulz

Jetzt sieht unsere Tabelle Kunden so aus.

Auswahl_077.png

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

Auswahl_078.png

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 }}

Auswahl_079.png

Auswahl_080.png

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.

Auswahl_081.png

Nun gehen wir wieder in unsere Bestellungen und wählen den Kunden aus.
Tadaaa, jetzt ist es lesbarer als nur die IDs.

Auswahl_087.png

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

Auswahl_088.png

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

Auswahl_089.png

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.

Auswahl_090.png

Nun gehen wir in den ersten screen zurück und erstellen einen Button in der Tabelle

Auswahl_091.png

Diesem Button geben wir folgende Eigenschaften. Dazu kilicken wir den Button an.
Nun geben wir den button einen Namen buttonBestellungen anzeigen
Dann Anzeigetexte Betsellungen öffnen.

Auswahl_092.png

Nun auf define actions klicken.
Dort Update State Action hinzufügen

Eine Vaaible mit KUNDENID angeben und dann auf den Blitz klicken

Auswahl_094.png

Nun als Wert die ID von der Tabell Kunden angeben.
Über den Asistenten -> Table -> _id
schnell ausgwählt

Auswahl_093.png

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.

Auswahl_095.png

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!!!!

Auswahl_096.png
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] ? $("kunden")._idmap(x => x._id) : ""

Nun in der Tabelle bestellungen das neue Feld erstellen mit Static

Auswahl_098.png

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

Auswahl_101.pngAuswahl_1020.png

Nun sieht das ganze so aus und speichern

Auswahl_100.png

Nun haben wir einen pointer auf die ID.

Auswahl_102.png

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

Auswahl_103.png

Nun wieder auf define filzter im Dataprovider

Jetzt steht kundenrel in der Auswahl. Jippie

Auswahl_104.png

Nun die Formel vervollständigen.
Dazu equal auswählen und bindings, dann wird der blitz freigeschaltet.
Dann auf den blitz klicken

Auswahl_105.png

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.

Auswahl_106.png

Nun sieht die Formel so aus, noch speichern fertig.

Auswahl_107.png

Nun können wir auf preview gehen und auf den Home screen

Nun bei dem jeweiligen Kunden auf bestellungen öffnen klicken

Auswahl_108.png

Und eh voila, ein Modal mit den Bestellungen für den Kunden, in diesem Falle Max

Auswahl_110.png

Und hier Anna

Auswahl_111.png

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.

Auswahl_112.png

Fertig, kleiner Trick große wirkung, mit dem extra Feld in das die id kopiert wird.