12

multi dmulti array

Eine Sammlung an Beispielen und Scripten zu diesen Themen, die ich mal für jemanden erstellt habe (als Nachschlagewerk), dann für mich erweitert, um die unbedingt notwendigen sinnfreien Scripte ergänzt (z.B. RandomDmulti), geordnet, gehübscht und jetzt ein bisschen schade für die Nutzung nur durch uns zwei.

Wie kann ich einem Dmulti verschiedene Farben und Icon zuweisen? Wie bilde ich das Produkt in einem Array? Wie war der Umsatz an Samstagen im Juli 2019? Und welche Personen werden den Beamer auf der Enterprise benutzen? Wer es weiß, für den ist es nichts. Ansonsten sind Grundlagen und etwas erweiterte Nutzung dieser Tools beschrieben und teilweise erklärt und mit Beispielen hinterlegt. Kurz, knapp, locker. 

Natürlich sind diese Lösungen, ein Amalgam aus hier gelesen und selber denken, es gibt also meist auch Alternativen - auch elegantere. Also, wer es nutzen will, viel Spaß damit. Mirko

16 Antworten

null
    • Maurice
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Hallo Mirko,
    das ist wirklich klasse. Da ich viel mit Auswahlfeldern und dynamischen Auswahlfeldern arbeite und jedes Mal überlegen oder in meinen eigenen Umsetzungen nachschauen muss, hilft mir das sehr. Toll systematisch zusammen gestellt und die ein oder andere Idee, was ich noch ergänzen oder verbessern kann, ist dabei. Grüße Maurice

    • Ninox-Professional
    • planoxpro
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Oh, das sieht nach viel Arbeit aus - könnte Anderen selbige aber erleichtern. Sehr schön! 👍

    • Adler
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Vielen Dank 👍

    • Josef_Koenig
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Vielen Dank für die lehrreiche MultiDmulti.ninox - BeispielsDB!

    • Nikotomato
    • vor 1 Jahr
    • Gemeldet - anzeigen

    ... was es alles tolles gibt!!! Bin begeistert. Vielen Dank.

    • john_eans
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Coole Tabelle, besten Dank fürs Teilen!

    Ich hab allerdings "Probleme" mit contains(). Wenn sich z.B. zwei Namen ähneln, kann es zu Fehlern kommen. Fügt man in der Tabelle "dmultiTabelle" beispielsweise Kirk2 und Kirk22 hinzu, werden im Feld "DmultiWithNotActivItems" alle Kirks ausgeblendet, sobald man im Feld "dmulti" Kirk22 auswählt.

    Es gab hier im Forum mal einen Beitrag zum abgleich von Arrays, der genau diese Problem umging, allerdings find ich es jetzt natürlich nichtmehr. Wenn einer den Link hat...würde mich freuen ;-)

    • mirko3
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Hallo Johannes. Lieben Dank für die Meldung. Heute würde ich tatsächlich einiges auch schon wieder anders schreiben, aber dies ist ein echter Bug. Mittlerweile kann contains() ja auch Arrays entgegennehmen und so war es hier, hoffentlich, schnell gelöst. Ich lege mal eine korrigierte Version bei. Nochmal Danke für das feedback. Mirko

      • john_eans
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Mirko Das mit contains() und Arrays ist super.

      Ich hab bei mir (vermutlich eh nicht so clever) auch noch den Fall, dass das Feld "name" identisch sein könnte. Ich hab daher ein bisschen rum probiert und es komplett ohne "name" zum laufen bekommen.

      let isActiv := numbers(dmulti);
      let IsNotActive := for i in select dmultiTabelle do
      if not contains(isActiv, number(i)) then  i  end
      end;
      IsNotActive

      Ich hatte zuvor noch eine Lösung mit cnt().... die will ich der Nachwelt nicht vorenthalten.

      let isActiv := numbers(dmulti);
      let IsNotActive := for i in select dmultiTabelle do
              if not cnt(isActiv[= i]) > 0 then
                  i
              end
          end;
      IsNotActive
      

       

      Eine Frage noch zum Thema passend:
      Ich hab ein "dmulti"-Feld und (um bei deinem Beispiel zu bleiben) das "DmultiWithNotActivItems"-Feld. Auf Basis der Auswahl in letzterem wird z.B. eine Liste erstellt.

      Wenn ich nun die Auswahl im "dmulti"-Feld ändere, dann kann es sein, dass eine im "DmultiWithNotActivItems"-Feld aktivierte Option ausgeblendet wird. Die Liste verändert sich aber nicht.

      Also z.B.:

      • dmulti bietet die Auswahl 1,2,3,4,5.
      •  4 und 5 werden ausgewählt
      • DmultiWithNotActivItems bietet daher die Optionen 1,2,3.
      • 1 und 2 werden ausgewählt.
      • numbers(DmultiWithNotActivItems) zeigt nun "1,2"
      • wenn ich in dmulti nun auch 1 auswähle, steht die Option in DmultiWithNotActivItems nichtmehr zur Verfügung. (soweit gewünscht)
      • numbers(DmultiWithNotActivItems) zeigt aber noch immer "1,2"

      Ist das ein Bug oder macht das Sinn? Hoffe das ist verständlich...

    • mirko3
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Schau mal hier. https://forum.ninox.de/t/x2h79sn
    Das wird wohl die Ursache sein. Ich halte es mittlerweile eher für ein feature, da es vielleicht Fälle gibt, in denen die einmal getroffene Auswahl des dmulti dem Datensatz erhalten bleiben soll, auch wenn ein Feld in der Ursprungstabelle des dmulti gelöscht wird, oder, wie in Deinem Beispiel durch Filter ein Auswahlelement verschwindet. Oder doch ein Käfer. Gruß Mirko

      • UweG
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Mirko Kein Käfer, deine Annahme ist richtig bezüglich der Rückverfolgung.

    • mirko3
    • vor 2 Wochen
    • Gemeldet - anzeigen

    Ich habe ein paar Varianten der Übergabe dynamischer Werte an dmulti und dchoice durch JSON hinzugefügt. Mir erschließt sich noch nicht der Nutzen dieser mit deutlich höherem Codeaufwand verbundenen Variante. Da ich keinen Weg gefunden habe, die Werte direkt aus dem JSON-multi auszulesen, ist diese Form für mich vorerst sinnfrei, zumindest nicht besser. 

    Ein paar der fast zwei Jahre alten Scripte habe ich überarbeitet und teilweise kürzer, übersichtlicher schreiben können und die Tabelle für dynamicValues ist überarbeitet, so wie ich sie heute benutzten würde um verschiedene multi mit nur einer Zusatztabelle zu befüllen. Da ich selbst in Abständen immer mal wieder für ein snippet hineinschaue, habe ich sie aktualisiert und wollte sie euch nicht vorenthalten. Mirko

    • mirko3
    • vor 9 Tagen
    • Gemeldet - anzeigen

    Korrektur. Ausgewählte Werte von dmulti, welche mit JSON gefüllt sind lassen sich seit 3.14.1 mit

    split(text(dmulti), ", ")
    

    und bei dchoice einfach mit

    text(dchoice)

    auslesen. Mirko

      • Fred
      • vor 9 Tagen
      • Gemeldet - anzeigen

      I discovered that a new formula field with:

      text(dmultiJSON_4)
      

      does not work since the basis of the JSON array is not hard coded in the dmulti. If you put the string from the content field into dmultiJSON_4 (and change the code to match), then the above code will work.

      • mirko3
      • vor 9 Tagen
      • Gemeldet - anzeigen

       Hi Fred. Thanks for the answer. This behavior in the code is very puzzling. My database should not be understood here as a reference, more as a suggestion, or as in my case as a snippet memory, because I am so forgetful. I am grateful for hints like the one from you. Mirko

      • Fred
      • vor 9 Tagen
      • Gemeldet - anzeigen

      It was posted in the English side that if you do a select/record to get the data from the contents field then it will work. So something like:

      let xcontent := record(dmulti,1).content;
      let captions := split(xcontent, ",");
      

      at the beginning of dmultiJSON_4.

      • mirko3
      • vor 8 Tagen
      • Gemeldet - anzeigen

       Yes, that's a workaround. It's a pity that such bugs keep popping up in the editor and I don't notice right away that it's not in my head.