BO Liste rückwärts durchlaufen (Suchanweisung
p)
Aufbau
Wie beim
Service GetBo erwähnt, kann man eine BO-Liste auch rückwärts
durchlaufen. Dies geschieht mit der Suchanweisung p resp.
pe. Dabei ist folgendes zu beachten: Wenn man rückwärts sucht, dann
muss man den Record auf dem man aufsetzen will ganz genau kennen.
Ansonsten setzt die Suche einen Record weiter vorne auf.
Beispiel:
Es soll nach Name gsucht werden.
Im Adress-Stamm existiert eine
Adresse mit dem Namen "Abexim AG".
Mit dem Suchstring "Abexim" wird
"vorwärts" gesucht. (Mit "ne".)
«XSER(getAddr:GetBo)»
«XSER(getAddr:addArg=Addr)»
«XSER(getAddr:addArg=Abexim)»
«XSER(getAddr:addArg=ne)»
«XSER(getAddr:addArg=2)»
«XSER(getAddr:addArg=)»
«XSER(getAddr:addArg=)»
«XSER(getAddr:addArg=)»
«XSER(getAddr:addArg=Addr.LastName,Addr.City,Addr.Number)»
«nXSER(getAddr:execute>getAddrRes)\A»
# Rückabewerte
«XRES(getAddrRes:Addr.LastName)» «XRES(getAddrRes:Addr.City)» «XRES(getAddrRes:Addr.Number)»
Die
Suche liefert folgendes Resultat:
Jetzt wird mit demselben
Suchstring "rückwärts" gesucht. (Mit "pe".)
«XSER(getAddr:GetBo)»
«XSER(getAddr:addArg=Addr)»
«XSER(getAddr:addArg=Abexim)»
«XSER(getAddr:addArg=pe)»
«XSER(getAddr:addArg=2)»
«XSER(getAddr:addArg=)»
«XSER(getAddr:addArg=)»
«XSER(getAddr:addArg=)»
«XSER(getAddr:addArg=Addr.LastName,Addr.City,Addr.Number)»
«nXSER(getAddr:execute>getAddrRes)\A»
# Rückabewerte
«XRES(getAddrRes:Addr.LastName)» «XRES(getAddrRes:Addr.City)» «XRES(getAddrRes:Addr.Number)»
Die
Suche liefert folgendes Resultat:
Das liegt in der Art begründet
wie wir suchen. Wird der String "Abexim" gefunden und folgen innerhalb des
Namens noch weitere Zeichen, dann ist die Bedingung ne erfüllt und
die Adresse mit dem Namen "Abexim AG" wird gefunden und angezeigt. Wird
mit demselben String aber rückwärts gesucht, dann wird keine Adresse mit
diesem Namen gefunden. Folglich wird mit pe dann der nächste
Datensatz angezeigt welcher vor dem String "Abexim" liegt. Diese
Besonderheit muss man berücksichtigen wenn man rückwärts sucht.
Will
man mit pe genau den Namen "Abexim AG" finden, muss man auch genau nach
diesem String suchen. Also so:
«XSER(getAddr:GetBo)»
«XSER(getAddr:addArg=Addr)»
«XSER(getAddr:addArg=Abexim AG)»
«XSER(getAddr:addArg=pe)»
«XSER(getAddr:addArg=2)»
«XSER(getAddr:addArg=)»
«XSER(getAddr:addArg=)»
«XSER(getAddr:addArg=)»
«XSER(getAddr:addArg=Addr.LastName,Addr.City,Addr.Number)»
«nXSER(getAddr:execute>getAddrRes)\A»
# Rückabewerte
«XRES(getAddrRes:Addr.LastName)» «XRES(getAddrRes:Addr.City)» «XRES(getAddrRes:Addr.Number)»
Es
empfiehlt sich also bei der Suche mit "pe" einen klar definierten und
bekannten Startpunkt zu setzen. Ausgehend von diesem Startpunkt sollte es
dann kein Problem sein, rückwärts zu listen.
Beispiel
# Service definieren. Es sollen drei Adressen gelesen werden.
«XSER(MeinService:GetBo)»
«XSER(MeinService:args=Addr,Abexim AG,pe,2,3,,,)»
#
# Rückgabe definieren
«XSER(MeinService:addArg=Addr.LastName,Addr.City,Addr.Number)»
#
# Ausführen des Service
«XSER(MeinService:execute>MeinServiceRes)»
#
# Ausgeben des Ortes von den Zeilen 1 - 3 des Resultates
# Da wir rückwärts gesucht haben, müssen wir nun die Ausgabe auch mit der letzten Zeile beginnen.
# (Je nach Anforderung kann das natürlich anders sein)
Result-Objekt dritte Zeile: «XRES(MeinServiceRes:Addr.City,3)\A»
Result-Objekt zweite Zeile: «XRES(MeinServiceRes:Addr.City,2)\A»
Result-Objekt erste Zeile: «XRES(MeinServiceRes:Addr.City,1)\A»
#
# Ausführen des "redo". Es werden erneut drei Adressen gelesen.
«Redo(«XRES(MeinServiceRes:redo,p,,3)\A»)»
#
# Ausgeben des Ortes von den Zeilen 1 - 3 des neuen Resultates
Result-Objekt redo dritte Zeile: «XRES(MeinServiceRes:Addr.City,3)\A»
Result-Objekt redo zweite Zeile: «XRES(MeinServiceRes:Addr.City,2)\A»
Result-Objekt redo erste Zeile: «XRES(MeinServiceRes:Addr.City,1)\A»
Hier
der Ausschnitt aus den Adressen die gelesen werden.
Ausgabe 1
Das
Resultat der ersten
Ausgabe:
Madetswil
Giswil
Bassersdorf
Ausgabe 2
Das
Resultat der zweiten
Ausgabe:
Zürich
Zumikon
Dietikon