Anwendung / Praxis

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:
aid03.jpg
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:
aid04.jpg
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.
aid05.jpg

Ausgabe 1

Das Resultat der ersten Ausgabe:
Madetswil
Giswil
Bassersdorf

Ausgabe 2

Das Resultat der zweiten Ausgabe:
Zürich
Zumikon
Dietikon