Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: LisaS am 10.09.03 - 11:47:05
-
Hallo,
ich habe folgendes Problem:
Ich habe in der Maske ein Text Feld 'Sortierung', welches eine Kapitelnummer enthält.
in einer Ansicht werden dann die Dokumente nach diesen Kapitelnummern Sortiert.
Problem:
2.2.1.1
2.2.1.10
2.2.1.11
2.2.1.2
2.2.1.3
....
2.2.1.9
Was muß ich machen damit 2.2.1.10 nach 2.2.1.9 angezeigt wird und nicht nach 2.2.1.1?
Gruß
Hitcher
-
.........Bei TextToNumber(Sortierung) kommt ein @Error???
Gruß
Hitcher
-
Wenn Du @TextToNumber ("2.2.2.1") versuchst - ja: Ist ja nicht in eine Zahl umwandelbar.
Bernhard
-
Hi,
zwei Möglichkeiten fallen mir ein :
1) Du änderst die Kapitelnummern ab auf z.B. 2.1.1.01 etc.
2) Du baust zusätzliche Sortierspalten mit ein, in der ersten Spalte wird nach dem 1. Teil der Kapitelnummer sortiert, in der 2. Spalte nach dem 2. Teil der Kapitelnummer, etc.
-
@all:
Danke für die inspiration....
Ich habe jetzt die Kapitel in einzelne Ziffern aufgebröselt und stelle diesen ensprechend viele Nullen voran.
Dann Füge ich alles zusammen und sortiere danach.
Aus 2.2.10.5 wird 0002000200100005.
Mit dieser Lösung kann ich mit jeder Ziffer in den vierstelligen Bereich kommen, was bei Bedarf aber noch erweiterbar wäre.
Die einzelnen Ziffern hol ich mir einfach aus dem Dokument
Hier der Code (etwas unübersichtlich.. :-\):
@If(@Length(@Text(KapNr))=1;"000"+@Text(KapNr);@If(@Length(@Text(KapNr))=2;"00"+@Text(KapNr);_
@If(@Length(@Text(KapNr))=3;"0"+@Text(KapNr);@Text(KapNr))))_
+@If(@Length(@Text(UKapNr))=1;"000"+@Text(UKapNr);@If(@Length(@Text(UKapNr))=2;"00"+@Text(UKapNr);_
@If(@Length(@Text(UKapNr))=3;"0"+@Text(UKapNr);@Text(UKapNr))))_
+@If(UKapNr_1="";@If(@Length(@Text(SCPos))=1;"000"+@Text(SCPos);@If(@Length(@Text(SCPos))=2;"00"+@Text(SCPos);_
@If(@Length(@Text(SCPos))=3;"0"+@Text(SCPos);@Text(SCPos))));_
@If(@Length(@Text(UKapNr_1))=1;"000"+@Text(UKapNr_1);@If(@Length(@Text(UKapNr_1))=2;"00"+@Text(UKapNr_1);_
@If(@Length(@Text(UKapNr_1))=3;"0"+@Text(UKapNr_1);@Text(UKapNr_1)))))_
+@If(UKapNr_1="";"0000";@If(@Length(@Text(SCPos))=1;"000"+@Text(SCPos);@If(@Length(@Text(SCPos))=2;"00"+@Text(SCPos);_
@If(@Length(@Text(SCPos))=3;"0"+@Text(SCPos);@Text(SCPos)))))
Gruß
Hitcher
-
Damit das etwas übersichtlicher wird:
KapNrText := @Right ("0000" + @Text(KapNr); 4);
usw.
HTH,
Bernhard
-
@Bernhard:
Man sieht das jetzt ordentich aus und ich breche mir einen mit @if ab.....
KapNrText := @Right ("0000" + @Text(KapNr); 4);
UKapNrText := @Right ("0000" + @Text(UKapNr); 4);
SCPosText:=@Right ("0000" + @Text(SCPos); 4);
UKapNr_1Text:=@Right ("0000" + @Text(UKapNr_1); 4);
KapNrText+UKapNrText+@If(UKapNr_1="";SCPosText;UKapNr_1Text)+@If(UKapNr_1="";"0000";SCPosText)
Danke für den Tip.
Gruß
Hitcher
-
Hallo, Hitcher,
ich bin heute per Zufall auf eine Anforderung gestossen, deren Lösung wohl auch Dein Kapitel-Problem noch einfacher lösen würde.
Annahme: Du hast EIN Feld "KapitelNr" in Deinen Docs mit Inhalt wie "1.0.15.10".
In der Ansicht soll das aber ordentlich sortiert dargestellt werden, als wenn der Feldinhalt wäre "0001.0000.0015.0010".
Weitere Felder oder Operationen in Masken sind nicht erwünscht.
Der / den Ansicht/en wird/werden dann folgende versteckte Spalte/n hinzugefügt:
REM "Mache aus String KapitelNr eine Liste:";
lstKapitelNr1 := @Explode (KapitelNr; ".");
REM "Normiere alle Listenelemente:";
lstKapitelNr2 := @Right ("0000" + lstKapitelNr1; 4);
REM "Bilde aus
"0001"
"0000"
"0015"
"0010"
wieder einen String und verwende ihn für die Ansicht:";
@Implode (lstKapitelNr2; ".")
Ich habe den Code oben jetzt nicht in Deinem Kontext getestet, sondern eben einfach mal so abgewandelt und hingeschrieben, aber das sollte so auch bei Dir funktionieren.
Verlache keiner die guten, alten @functions ;-)
Bernhard
-
Hallo Bernhard,
Das sieht gut aus :o, ich werde das mal testen.
Je schlanker der Code desto besser ist das ja...
Gruß
Hitcher