0

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

null
    • Frank_Schafer
    • vor 5 Jahren
    • Gemeldet - anzeigen

    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

    • pmuellerff
    • vor 5 Jahren
    • Gemeldet - anzeigen

    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?

    • Frank_Schafer
    • vor 5 Jahren
    • Gemeldet - anzeigen

    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]
    end
     

    Dabei 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 

    • Frank_Schafer
    • vor 5 Jahren
    • Gemeldet - anzeigen

    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]
    end 

    VG Frank

    • Leonid_Semik
    • vor 5 Jahren
    • Gemeldet - anzeigen

    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

    • Torsten_Stang.1
    • vor 5 Jahren
    • Gemeldet - anzeigen

    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

    • Frank_Schafer
    • vor 5 Jahren
    • Gemeldet - anzeigen

    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?

    • Leonid_Semik
    • vor 5 Jahren
    • Gemeldet - anzeigen

    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

    • pmuellerff
    • vor 5 Jahren
    • Gemeldet - anzeigen

    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.

    • Leonid_Semik
    • vor 5 Jahren
    • Gemeldet - anzeigen

    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.

    • pmuellerff
    • vor 5 Jahren
    • Gemeldet - anzeigen

    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