Problem bei Eingabe von * (Stern) oder gar nichts

BusinessServerPages; Erstellung von Webapplikationen.

Problem bei Eingabe von * (Stern) oder gar nichts

Postby Alva1590 » Tue Aug 19, 2003 12:54 pm

Hi,
nachdem sich (dank Steff) das Problem mit der Übergabe von int. Tab.´s an die nächste Seite gelöst hat geht jetzt dafür etwas anderes nicht mehr ... :?

Bei meiner Suchfunktion wird auf der Startseite anhand einer eingebenen doknr über einen FB nach Doku´s gesucht, diese dann in erg_tab gespeichert, an die nächste Seite übergeben u. dort in Listform ausgegeben.

Nach Eingabe von * oder gar keiner Eingabe bei doknr sollen eigentlich alle Dok´s i.d. erg_tab stehen. Das hat auch schon mal so funktioniert, aber seitdem ich erg_tab so an die nächste Seite übergebe:
Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. navigation->set_parameter( name = 'ERG_TAB' value = ERG_TAB ).
  2.  
GeSHi ©

ist dafür auf der nächsten Seite doknr und erg_tab ohne Inhalt, wenn vorher * oder nix eingeben worden ist. Bei anderen Eingaben funktioniert die Übergabe von doknr aber einwandfrei.

Wenn ich allerdings erg_so an die nächste Seite übergebe:
Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1.      navigation->set_parameter( 'ERG_TAB' ) .
  2.  
GeSHi ©

wird doknr auch dann an die nächste Seite übergeben, wenn * oder nix eingegeben worden ist. Allerdings hat dann erg_tab keinen Inhalt mehr, weil man so ja keine int. Tab. übergeben kann ...

Nachdem bei mir das Debugging auch nicht so fungiert wie´s im Buch beschrieben steht kann ich nur über die Bildschirmausgabe meiner Seitenattribute nach Fehlern suchen. Aber das ist noch ein anderes Thema ...

Weiß jemand von euch Rat was es mit dem * auf sich hat?

Danke, Anja
Alva1590
.....
.....
 
Posts: 4387
Joined: Mon Dec 02, 2002 3:01 pm

Postby Walter4536 » Wed Aug 20, 2003 9:37 am

Hi Anja,

mit dem asterisk (*) funktioniert es eigentlich problemlos. Mit blanks kann es nicht funktionieren, denn was Du übermittelst sind blanks, die Initialwerte in ABAP bei Feldern vom Typ c bzw. String sind.
Bist Du sicher, dass Du den '*' nicht irgendwo überschreibst?

Die Übergabe sieht bei mir so aus: (OnInputProcessing, Seite 'default2.htm')

Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1.          navigation->use_auto_submit_form( ).
  2.          navigation->set_parameter( 'MAXTR' ).
  3.          navigation->set_parameter( 'DOKNR' ).
  4.          navigation->set_parameter( name = 'WA_TAB' value = wa_tab ).
  5.          navigation->set_parameter( name = 'FL_TAB' value = lt_sflight ).
  6.          navigation->goto_page( 'liste2.htm' ).
  7.  
GeSHi ©


Gruß,
Steff
Walter4536
...
...
 
Posts: 315
Joined: Mon Dec 02, 2002 12:09 pm

Postby Eric408 » Wed Aug 20, 2003 11:05 am

Hallo Anja,

vielleicht liegt es am Datentyp des Formularfeldes. Wenn Du einen "zahlentyp" (Numerisch, Integer, etc.) verwendest, kommen alphanumerische Werte nicht an (* ist ja keine Zahl) und das Feld müsste leer erscheinen.

Grüße,
Stefan
Eric408
..
..
 
Posts: 40
Joined: Fri Mar 14, 2003 7:11 pm

Postby Alva1590 » Mon Aug 25, 2003 11:44 am

Hallo Stefan,
also meine Formularfelder habe ich auf der Quell- u. Zielseite als String und als autom. Seitenattribute deklariert. Für die Ergebnistab. (erg_tab) hab ich unter Typdefinitionen eine Struktur angelegt, auf die ich mich bei den Seitenattributen bezieh:
Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. types: begin of Z_WEBLINKLIST,
  2.            DOKNR(25) type c,
  3.            DOKAR(3) type C,
  4.            DOKTL(3) type C,
  5.            DOKVR(2) type C,
  6.            DWNAM(12) type C,
  7.            DOKST(2) type C,
  8.            AENNR(12) type C,
  9.            DKTXT(40) type C,
  10.            DOSTX(16) type C,
  11.        end of Z_WEBLINKLIST.
  12.  
  13. types: Z_ERG_TAB type table of Z_WEBLINKLIST.
  14.  
GeSHi ©

Seitenattribute:
Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. ERG_TAB  TYPE    Z_ERG_TAB
  2. DOKNR     TYPE    STRING
  3. ...
  4.  
GeSHi ©

Eventhandler OnInputProcessing:
Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. navigation->use_auto_submit_form( ).
  2. navigation->set_parameter( 'MAXTR' ).
  3. navigation->set_parameter( 'DOKNR' ).
  4. navigation->set_parameter( name = 'ERG_TAB' value = ERG_TAB ).
  5. navigation->next_page( 'TOLISTE' ).
  6.  
GeSHi ©


Mein Problem ist, daß wenn ich als doknr einen * eingebe die Übertragung der Attribute und(!) der erg_tab auf die nächste Seite nicht funktioniert. Geb ich aber z.B. *7 ein funktioniert es. Wenn ich aber die erg_tab nicht übertragen laß (die o.a. Zeile navigation->... auskommentiere) funktioniert die Übertragung der Attribute, auch wenn ich * eingebe :?

Ich hab jetzt schon mal die Reihenfolge der set_parameter verändert u. für erg_tab einen neuen Namen eingeführt, aber nix hilft :(

Weiß von euch jemand Rat?

Danke schonmal vorab,
Anja
Alva1590
.....
.....
 
Posts: 4387
Joined: Mon Dec 02, 2002 3:01 pm

Postby Walter4536 » Mon Aug 25, 2003 2:52 pm

Hi Anja,

das könnte auch ein bug sein. Probier mal Hinweis 596706 (falls zutreffend). Welchen WAS hast Du? Wie ist der Kernelstand? Kannst Du in der sm51, Button 'Release Informationen' sehen.
Wenn das ganze nämlich mit '*7' funktioniert, ansonsten aber nicht, dann hört sich das nach Fehler an. Ach ja, 458669 gibt vielleicht auch noch den einen oder anderen hilfreichen Tip :-)

Gruß,
Steff
Walter4536
...
...
 
Posts: 315
Joined: Mon Dec 02, 2002 12:09 pm

Postby Alva1590 » Mon Aug 25, 2003 4:03 pm

:)
Alva1590
.....
.....
 
Posts: 4387
Joined: Mon Dec 02, 2002 3:01 pm

Postby Alva1590 » Tue Aug 26, 2003 10:27 am

Hi Steff,

ich hab gerade herausgefunden woran es liegt! :)

Es liegt nicht am * selber sondern an der Größe der übergebenen erg_tab! Und die ist natürlich bei einer Selektion von * nur durch die max. Trefferanzahl (maxtr) begrenzt. maxtr war bei mir standardmäßig 100. Ich hab maxtr auf 10 gesetzt und schon funktioniert die Selektion mit *

Jetzt weiß ich zwar woran es liegt, aber versteh´n tu ich es trotzdem nicht, da doch durch use_auto_submit_form die zu übertragene Datenmenge nicht mehr begrenzt sein soll??? Das hieße doch, daß das bei mir gar nicht funktioniert, oder? :?

Verwirrte Grüße,
Anja
Alva1590
.....
.....
 
Posts: 4387
Joined: Mon Dec 02, 2002 3:01 pm

Postby Walter4536 » Tue Aug 26, 2003 12:34 pm

Hi Anja,

eigentlich sollte die Menge nicht mehr begrenzt sein, denn durch use_auto_submit_form werden die Daten mit der POST-Methode übertragen. Da gibt es eigentlich keine Beschränkung (theoretisch). Aber ich würde mir dennoch überlegen, ob es nicht doch besser ist, das Design Deiner Webanwendung grundsätzlich nochmals zu überdenken. Soviele Daten hin und her zu schicken in den Requests ist nicht so gut (Performance). Ich würde eher versuchen, die Datenmenge, die Du im Rahmen eines Request verschicksts, möglichst klein zu halten. Daher bietet sich in so einem Falle die Verwendung einer Applikationsklasse an, in der Du die Daten halten kannst über mehrere Seitenabrufe hinweg.

Eine andere Möglichkeit wäre, den Select nicht im OnInputProcessing zu machen, sondern im Event OnInitialization der Folgeseite. Dann müsstest Du nur wenige Parameter übertragen (maxtr und docid, soweit ich gesehen habe). Wenn der select nichts zurückliefert, navigierst Du einfach zurück und gibst eine Fehlermeldung aus. :D

Viele Grüße,
Steff
Walter4536
...
...
 
Posts: 315
Joined: Mon Dec 02, 2002 12:09 pm

Postby Alva1590 » Tue Aug 26, 2003 3:57 pm

Hi Steff,
ja das mit der Applikationklasse hat mir ja schon anfangs jemand vorgeschlagen, aber da müßte ich mich wirklich erstmal einarbeiten u. außerdem will es mir nicht in den Kopf, daß diese olle Methode nicht funzt. Ich will ja eigentlich nur vermeiden, daß ich ein u. denselben FB zur Ermittlung der erg_tab mehrmals aufrufen muß, da dadurch ja auch DB-Zugriffe entstehen ...

Mir ist jetzt noch was ganz anderes aufgefallen:
use_auto_submit_form sendet doch nur Daten, die innerhalb eines Formulars stehen. Meine Daten (erg_tab) werden aber im OnInputProcessing durch einen FB-Aufruf ermittelt. Der Sprung dorthin wird zwar aus dem Formular heraus gestartet (durch Buttonklick), aber sind dann die im Eventhandler ermittelten Daten auch im Formular verfügbar? Oder müßte ich dort vielleicht ein hidden-Feld erstellen u. dort die erg_tab zwischenspeichern bevor ich auf die nächste Seite navigiere?

Was meinst Du dazu?

Schöne Grüße, Anja
Alva1590
.....
.....
 
Posts: 4387
Joined: Mon Dec 02, 2002 3:01 pm

Postby Walter4536 » Tue Aug 26, 2003 7:09 pm

Hi Anja,

wenn Du so vorgehst, dass Du nur die Selektionskriterien übermittelst (maxtr, docid), dann brauchst Du den select nur einmal machen, nämlich im OnInitialization-Event der Folgeseite (liste2.htm). Wenn die sql-Abfrage kein Ergebnis bringt, dann wieder zurücknavigieren auf die erste Seite (default2.htm).

Die im Eventhandler ermittelten Daten sind auf jeden Fall im body-content des requests vorhanden, da die BSP-runtime diese Daten in den request schreibt (das ist dann genauso, wie wenn Du die Daten in der form hättest). Du kannst das ja mal debuggen. Breakpoint setzen im OnInitialziation der Folgeseite, auf der folgenden Anweisung:

data: lt_fields type tihttpnvp.

CALL METHOD request->get_form_fields
CHANGING
fields = lt_fields.

Dann kannst Du Dir genau anschauen, was übertragen wird.

Alternativ kann Du Dir auch den kompletten request mal anzeigen lassen. Dazu musst Du in die Transaktion SMICM und dort im Menü Springen, Tracelevel, Setzen (auf 2 oder 3). Über Springen, Tracefile anzeigen kannst Du dann sehen, wenn Du Deine BSP-Applikation nutzt, was an Daten übermittelt wird per http.

Gruß,
Steff
Walter4536
...
...
 
Posts: 315
Joined: Mon Dec 02, 2002 12:09 pm


Return to BSP + BHTML

Who is online

Users browsing this forum: No registered users and 11 guests