Massendatenänderung von Mehrfachauswahl-Feldern berechnen
Ich möchte per Massendatenänderung einem Mehrfachauswahl-Feld mehrere noch nicht zugeordnete Werte zuweisen, ohne die bereits zugewiesenen Werte zu überschreiben.
11 Antworten
-
Hmmm - dann mach das doch... ;)
Nutze dafür die Option berechneten Wert zuweisen und ermittle darin den korrekten Wert. Wenn der alte Wert erhalten bleiben soll dann weise diesen in der Funktion „neu“ zu.
VG Frank
-
Prima, Frank, du hast meine Frage in eigenen Worten neu formuliert. Jetzt braucht es nur noch die Konkretisierung des WIE. Zum Beispiel beinhaltet das Mehrfachauswahlfeld die Auswahlmöglichkeiten A, B, C, D, E. Dreißig ausgewählte Datensätze beinhalten bisher die Werte A oder B. Durch die Massendatenänderung sollen alle dreißig Datensätze zusätzlich die Werte D und E zugewiesen bekommen. Nach der Berechnung gibt es dann Datensätze der Art MFAF=A, D, E und MFAF= B, D, E. Wie lautet die Berechnungsformel?
-
Hallo,
wenn es diese bisher begrenzten Möglichkeiten A oder B gibt dann würde ich dies wie folgt machen:
switch MFAF do
case 1:
MFAF := [1, 4, 5]
case 2:
MFAF := [2, 4, 5]
default:
MFAF := [4, 5]
endDabei gehe ich davon aus, dass A=1, B=2, C=3, D=4, E=5 ist und arbeite mit dem numerischen Wert der Optionen. Bei mehr möglichen bestehenden Optionen bzw. Optionskombinationen wird es kompliziert...
VG Frank
-
Ach ja ... über die Massendatenänderung muss es natürlich statt der Zuweisung einen Rückgabewert geben - sieht dann so aus:
switch MFAF do
case 1:
[1, 4, 5]
case 2:
[2, 4, 5]
default:
[4, 5]
endVG Frank
-
Ich sehe hier ein Problem bei Felder, welch z.B. A und B oder A und C beinhalten. Man muss dann alle Optionen in Switch () aufzählen. Besser wäre eine uniwerselle Formel. Die Anname nehhme ich von Frank: A=1, B=2, C=3, D=4, E=5. Die formel für Massendatenänderung:
---
let myNumbers := numbers(MFAF);
for i from 0 to cnt(myNumbers) + 3 do
if i < cnt(myNumbers) then
item(myNumbers, i)else switch i do
case cnt(myNumbers) + 1:
4
case cnt(myNumbers) + 2:
5
end
end
end
---
So werden einfach D und E am Ende angehängt. Die Idee mit Anhängen von Daten an einen Array ist übrigens von Günther (Datenbank 222-NinoxScripting in dem Webinar Team).
Leo
-
Hallo,
kann ich nicht mit concat(chosen(Mehrfachauswahlfeld)) den Inhalt in einen kommagetrennten String schreiben, diesen String dann um den gewünschten Eintrag mit Komma getrennt erweitern und mit split() wieder in's Feld schreiben?
lg, Torsten
-
Das ist ja eine interessante Konstellation ... das bedeutet ja, dass Rückgabewerde einer Schleife in einer Massendatenänderung automatisch kombiniert werden - damit hätte ich nicht gerechnet.
Funktioniert das nur in der Massendatenänderung? Gibt es eine andere Art in Ninox ein bestehendes Array zu erweitern?
-
Ich habe früher immer mit concat in Text umgewandelt dann den Text ergänzt und dann mit split zurück in Array, aber die Schleife ist viel eleganter
-
Moin Frank, Leonid und Torsten,
Ninox hat mir folgende Lösung angeboten, die genau das erreicht, was ich mir vorstelle:
unique(numbers('Mein Mehrfachauswahlfeld'), 2, 7)
Dabei sind die Werte 2 und 7 im Beispiel die Indexnummern der zusätzlich zu setzenden Werte.
Vielen Dank für eure Unterstützung.
-
Das ist ja COOL. Also unique() gibt ein Array zurück. D.h. unique([1, 2, 3], [4, 5, 6]) ergibt [1,2,3,4,5,6]. Ich vermute es gibt auch ein paar geheimtipps wie ich zwei arrays sonst zusammenführen kann.
-
Hi Leonid, ich finde diese Lösung auch elegant. Ohne den Ninox Support wäre ich nicht darauf gekommen. Ich wünsche mir eine ausführliche Übersicht der Ninox Syntax; vielleicht gibt es das ja zeitnah von Ninox.
Vielen Dank nochmals für die Unterstützung - für mich ist die Anfrage nun umfassend beantwortet.
Content aside
- vor 5 JahrenZuletzt aktiv
- 11Antworten
- 3203Ansichten