Infos zu den neuen dynamischen Auswahlfeldern
Wegen großer Nachfrage ... Hier ein paar grundlegende Infos zu den neuen dynamischen Auswahlfeldern. Nach aktuellem Kenntnisstand, zusammengestellt nach bestem Wissen und Gewissen, aber natürlich ohne Gewähr. Korrekturen und Ergänzungen sind ausdrücklich erwünscht.
BASICS
Mit Auswahlfeldern lassen sich Listen mit vorgegebenen Einträgen erstellen, von denen der Nutzer einen oder auch mehrere als ausgewählt markieren kann. Bei normalen Auswahlfeldern werden die Einträge manuell als feste Werte in den Feldoptionen hinterlegt, bei dynamischen werden sie aus vorhandenen Tabellen eingelesen.
Da den dynamischen Auswahlfeldern immer ein "select" zugrunde liegt, beanspruchen sie mehr Ressourcen als normale Auswahlfelder. Mehrere dynamische Auswahlfelder können also die Performance beeinträchtigen. Eine Umstellung sollte deshalb gut überlegt sein. Sie ist grundsätzlich bspw. dann sinnvoll, wenn
a) sich die Einträge des Auswahlfeldes häufig ändern
b) das Auswahlfeld mit denselben Einträgen mehrfach in der Datenbank benötigt wird
c) über die Auswahl auf Daten der Auswahltabelle zugegriffen werden soll
OPTIONEN
Zu finden sind die neuen Auswahlfelder in der Feldliste (ganz unten), die man über "Felder bearbeiten" im Zahnrad-Menü oder im Administratormodus unten in der Leiste öffnet. Zur Einrichtung gibt es folgende zusätzliche Optionen:
"Dynamic values"
Hier wird per "select" auf die Tabelle verwiesen, aus der die anzuzeigenden Werte gelesen werden sollen. Dabei sind auch Sortierungen und Filter möglich. Beispiel:
(select Mitarbeiter) order by Nachname
"Name des dynamischen Wertes"
Hier wird angegeben, welche Inhalte der unter "Values" zugeordneten Tabelle in der Auswahlliste angezeigt werden sollen. Dabei können auch mehrere Felder und Strings kombiniert werden. Wird nichts angegeben, zeigt Ninox im Auswahlfeld nur die Nummern der Datensätze an. Beispiel:
Nachname + ", " + Vorname
Über "Farbe-" und "Symbol des dynamischen Wertes" können optional auch noch Felder der entsprechenden Datentypen aus der ´zugeordneten Tabelle gelesen werden. Auf diese Weise lassen sich auch die Einträge dynamischer Auswahlfelder mit Farben und Symbolen versehen.
AUSWERTUNG
Mögliche Rückgabewerte bei der Abfrage dynamischer Auswahlfelder sind entweder die Texte der gewählten Einträge oder die Nummern der zugeordneten Datensätze. Enthält das Auswahlfeld also bspw. fünf verschiedene Namen der Tabelle 'Mitarbeiter', dann entspricht der Rückgabewert der internen Datensatznummer des gewählten Namens in der Mitarbeiter-Tabelle.
Anhand dieser Nummer kann man bei Bedarf auf die betreffenden Datensätze und deren Felder zugreifen. Dazu gibt es zwei Möglichkeiten:
1.) Direkt über record():
record(Mitarbeiter, number(DynAuswahl)).Datenfeld
2.) Durch Ermittlung der ID:
let myNr := number(DynAuswahl);
let myID := first((select Mitarbeiter)[number(Nr) = myNr])
myID.Datenfeld
Wie bei normalen Mehrfachauswahlfeldern werden auch bei den dynamischen die gewählten Werte immer als Array zurückgegeben. Leider kann man umgekehrt kein Array an das Auswahlfeld übergeben, um Einträge als ausgewählt zu markieren. Ein Nutzer namens Tekl hat herausgefunden, dass Ninox bei den dynamischen Mehrfachauswahlfeldern mit hexadezimalen Werten arbeitet und eine mögliche Lösung dafür entwickelt. Der Thread findet sich im User-Forum:
https://ninox.com/de/forum/technische-hilfe-5ab8fe445fe2b42b7dd39ee8/dynamische-auswahlfelder-in-skripten-nutzen-605a1334b7e1d62b6241a1a7
RÜCKGABEWERTE
Hier noch mal alle Rückgabewerte der dynamischen Auswahlfelder im Überblick:
Feldtyp "Auswahl (dynamisch)", DAF
DAF
Rückgabe: Angezeigter Textwert des gewählten Eintrags als String, z. B. "B".
number(DAF)
Rückgabe: Nummer des gewählten Datensatzes als Zahl, z. B. 2.
text(DAF) und raw(DAF)
Rückgabe: Nummer des gewählten Datensatzes als String, z. B. "2".
Feldtyp "Mehrfachauswahl (dynamisch)", DMFAF
DMFAF
Rückgabe: Array mit den angezeigten Textwerten, z. B. ["B", "D","E"]
numbers(DMFAF)
Rückgabe: Array mit den Nummern der gewählten Datensätze als Zahlen, z. B. [2,4,5]
text(DMFAF) und raw(DMFAF)
Rückgabe: Hexadezimaler Wert als String, z. B. "b1"
20 Antworten
-
Hallo Copytexter,
wir haben uns hier ja schon öfter über die grottenschlechte Dokumentation von NINOX ausgetauscht.
Vielen Dank für Deinen Eintrag, der eigentlich zu den Basics der Entwickler gehören sollte.
Ich bin von NINOX wirklich begeistert, aber dieses Beispiel zeigt wieder mal, dass es da noch viel zu
zu verbessern gibt. NIcht jeder von uns ist ein "Copytexter" oder ein "Leo". Vielen Dank an Euch beide und die vielen anderen,
die in diesem Forum immer wieder für die manchmal geradezu "geniale" Hilfe sorgen. -
Soll "Dynamic Values" im Funktionseditor bearbeitet werden, so ist das derzeit wohl nur im Text-Modus möglich. Dazu kommt, dass (zumindest bei mr) nur die erste Tabelle von zweien im visuellen Modus bereit steht. Die (bei mir) zweite Tabelle mit dem Listenfeld taucht hier nicht auf. Entsprechend werden uch im Textmodus in der linken Spalte nur die Feldnamen der ersten Tabelle aufgelistet. Außerdem habe ich mich irritieren lassen von der Fehlermeldung "on the fly" oberhalb des Editors beim Eintippen von "select". - Der Editor sollte bitte nachgebessert werden.
-
Super erklärt. Vielen Dank für Deine Mühe! Ninox lebt wirklich vom tollen Forum!
-
@Holzi: Ja, zu den neuen dynamischen Auswahlfeldern hätte Ninox gerne ein paar Infos zur Handhabung mitliefern können. Gerade die Zuweisung von Werten ist auch für mich noch ein Buch mit sieben Siegeln. Einfachen dynAF kann man numerische Werte zuweisen, und sie werden offenbar auch registriert, aber nicht angezeigt. Und bei dynMFAF geht es anscheinend nur über den Hexadezimal-Weg, den ich aber als unnötig kompliziert empfinde. Ich hoffe, da tut sich demnächst noch was.
@RaIp: Ich arbeite nie mit dem visuellen Editor und kann deshalb auch nichts dazu sagen. Ich vermute, dass er ursprünglich eher für Formeln gedacht war. Davon abgesehen ist der Editor ja überall derselbe, also für mich jetzt kein besonderes Thema im Zusammenhang mit dynamischen Auswahlfeldern. Und was spricht dagegen, schnell "select Tabelle" einzutippen?
-
Kurze Frage,
wie bekomme ich in der Druckengine die Werte des DynMFAF als Text ausgegeben? Bei einem DynAF geht das ja wunderbar mit "record(Mitarbeiter, number(DynAuswahl)).Datenfeld", text(dynMFAF) funktioniert nicht, Hat jemand eine Idee?
Viele Grüße und frohe Ostern!
-
Hallo R.Hartung,
---
let myArr:=for i in numbers(dmulti) do
record(Mitarbeiter,i).Datenfeld
end;
concat(myArr)---
Leo
-
Hallo zusammen,
aus dem Blogeintrag werde ich nicht schlau. Wie genau kann ich nun ein Mehrfachauswahl-Feld dynamisieren? Bei mir gibt es keinerlei Option "dynamic values", wie im Blog dargestellt, sobald ich das Feld anwähle?! Was muss ich da machen?
LG
-
Hallo Pascal,
die dynamischen Felder sind zwei extra feldtypen und haben mit normalen Auswahlfelder nicht zu tun. Die Felder sind nur in tabellenbearbeitungsmodus sichtbar (die zwei letzten unten). Also dynamisieren kannst du die vorhandenen Felder nicht
-
Hallo zusammen,
ich brauche bitte eure hilfe bei folgender Situation:
Ich habe eine Tabelle "Aufträge" mit einer Untertabelle "Anlagen zum Auftrag"
Aus einer weiteren Tabelle "Vorlagen Anlagen zum Auftrag" sollen bei einem Auftrag erforderliche Begleitunterlagen abgefragt und eingefügt werden.
Dazu habe ich in der Tabelle "Aufträge" ein Dynamisches Mehrfachauswahlfeld plaziert, welches mit select die Inhalte aus der Tabelle "Vorlagen Anlagen zum Auftrag" anzeigt.
Im DynMFA soll nun angehakt werden welche Anlage dem Auftrag beigefügt wird, und "nach Änderung" dann ein neuer Datensatz in der Untertabelle "Anlagen zum Auftrag" erzeugt. Bei Abwahl soll der betreffende Eintrag wieder gelöscht werden.
Das Anlagen habe ich bereits geschafft, leider aber nur den Datensatz zu erzeugen, die Inhalte (zwei Textfelder "Bezeichnung" und "Bemerkung") bekomme ich nicht aus der Vorlagentabelle übertragen.
Die Abwahl wieder zu löschen hatte ich den Ansatz die Vorlagen-ID mit zu übertragen in ein verstecktes Textfeld, aber weiter als die Idee drehe ich mit seit Stunden im Kreis.
Würde mit über eure Ideen freuen!
Danke
Benny
-
Hallo Benny;
...
let me:=this
if me.DynMFA then
for i in numbers (me.DynMFA) do
let rec:=record ('Vorlagen Anlagen zum Auftrag',i);
let new:=create '
Anlagen zum Auftrag';new.'Aufträge':=me;
new.Bezeichnung:=rec.Bezeichnung;
new.Bemerkung:=rec.Bemerkung
end;
me.DynMFA:=null
end
...
Leo
-
Ach so bei Abwahl:
...
let me:=this
if me.DynMFA then
delete 'Anlagen zum Auftrag';
for i in numbers (me.DynMFA) do
let rec:=record ('Vorlagen Anlagen zum Auftrag',i);
let new:=create 'Anlagen zum Auftrag';
new.'Aufträge':=me;
new.Bezeichnung:=rec.Bezeichnung;
new.Bemerkung:=rec.Bemerkung
end
end
...
-
Perfekte Formel Leo, herzlichen Dank!
-
Hallo zusammen,
hat sich zu dem eintrag von Planox.pro was geändert ?
" Leider kann man umgekehrt kein Array an das Auswahlfeld übergeben, um Einträge als ausgewählt zu markieren."
Ich würde zugern eine vorauswahl treffen, so das diese bei einem neuen Datensatz immer Markiert ist. Zum beispiel in dem man ein Ja/Nein feld bei dem zu markierenden eintrag auf true gesetzt hat... das Array soll dann das DMFA als Markiert kennzeichen.
Die geschichte von Tekl hab ich probiert ( auch wenn ich sie nicht verstehe ) es klappte bei mir nur bis 10 einträge, davon abgesehen ist das zu viel aufwand.
-
Textfeld:= Nr von datensätzen;
DMFA:=Textfeld
Mit einer Nr geht das ja, nur wie bekomme ich mehrere Nr an das DMFA übergeben ???
-
Moin. Ja, bei den dynamischen Mehrfachauswahlfeldern hat sich zwischenzeitlich was geändert. Man kann - ich glaube, seit Version 3.4 - nun auch per Array Einträge als ausgewählt markieren. Wobei dieses Array Datensatznummern der im DMFAF referenzierten Tabelle enthalten muss.
-
Grüße,
mit : ---- for i in Aufgaben['Ja / Nein' = true] do
record(Aufgaben,i) ---- kann ich mir die für die markierung notwendigen Datensatznummern holen. Nur wie kann ich die dann an das DMFA übergeben ?? so das es diese als Markiert darstellt. (DMFA ist natürlich mit den Werten von Aufgaben verbunden) -
Hallo Michi, Versuch auf die Schnelle (muss wieder an mein Gulasch):
let myArray := select Aufgaben['Ja / Nein' = true].number(Nr);
DMFAF := myArray
-
Das war ja einfach,
danke und lass dir dein essen schmecken.
-
Danke, aber bevor ich essen kann, muss ich erst mal kochen. ;)
Content aside
-
9
„Gefällt mir“ Klicks
- vor 2 JahrenZuletzt aktiv
- 20Antworten
- 7389Ansichten
-
7
Folge bereits