Das Notes Forum
Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: skywook am 21.12.11 - 09:12:47
-
Hallo,
Ich möchte gerne das Listenfeld manuell "sortieren".
Im Listenfeld stehen folgende Werte (in folgender Reihenfolge):
Bearbeitung
Eingabe
Fortführung
Kontrolle
Archiv
Das Listenfeld wird über ein Zusatzfeld befüllt = "Formel für Auswahl verwenden"
Nun würde ich gerne über einen Button z.B. den Wert "Eingabe" an erster Stelle oder auch 2 Stellen nach unten verschieben.
Ich kann natürlich die Liste zerlegen und in neuer Reihenfolge aufbauen. Aber gibt es nicht eine einfachere Lösung?
-
Ich wüßte keine einfachere Lösung.
Mit @Member kannst Du die Position des markierten Elements und mit @Subset die Elemente davor und danach ermitteln, dann baust Du alles wieder zusammen.
Sinngemäß so (verschieben um eine Position nach oben)
Position ermitteln (@Member (Liste; Wert))
Elemente bis 1 vor Position (@Subset; Liste; Position - 1) : Wert : Alle Elemente ab 1 vor Position (@Subset mit negativem Vorzeichen, @Replace um Wert zu entfernen)
-
Das Handling mit Listen ist die einfache Lösung.
Ansonsten kann man alternativ auf Script und Array-Funktionen setzten. Solange es nur um das hoch/runterschieben geht würde es genügen, innerhalb der Liste/des Arrays die Werte zu tauschen. Dafür ist es immer gut Vorgänger, Nachfolger, Start und Ende zu kennen. Listenschengelei ist Informatik-Grundlagenwissen. Wenn es um Start/Ende/Löschen/Hinzufügen geht, wird es spannender.
Das Ganze macht aber aus meiner Sicht nur und richtig Sinn, wenn die Liste nicht direkt aus einer Formel kommt, sondern die Anordnung in einem Feld gespeichert ist und über die "Schiebefunktion" manipuliert und dann refresht werden kann.
Immer eine coole Funktion wenn es um Listen und Formelsprache geht: @transform
zum Beispiel:
Schnellfix-Implementierung mit Mehrfachwerte-Feld "test", Formel auf eine Schaltfläche, in der Liste wird der Wert "3" nach oben durchgeschoben. Der Wert "3" läßt sich natürlich durch eine Variable ersetzen, sollte aber nur 1x vorkommen, sonst wirds bunt.
y := "";
z := "";
first := "";
resultlist := @Transform( test; "x"; @If(y = ""; @Do(y:= x; first := x; @Nothing); @If( x = "3";@Do( z := y; y := x; y:z ); y = "3"; @Do(y:= x; @Nothing) ;@Do( z := y; y := x; z ) ) ) ) ;
FIELD test := @If( first = "3" & y = "3"; "3"; first = "3"; first : resultlist : y; y = "3"; resultlist; resultlist : y ) ;
Gruß, Heiko