dropdownlistbox im tv

BusinessServerPages; Erstellung von Webapplikationen.

dropdownlistbox im tv

Postby Henriette5142 » Mon Feb 06, 2006 1:50 pm

Hallo folgendes Problem,
ich will mir in einer bestimmten Zeile des TV eine DropDownListBox rendern lassen. Ich erstelle ein dropdownBox objekt und füge es per bee ein.
nun das problem: ich möchte das attribut der listbox "table" mit einer internen tabelle versorgen die von einer datenbank gefüllt wird.
in diesem fall sieht das so aus.

Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. *#### ERSTELLE DROPDOWNBOX IN SPALTEN: MWSKZ #######
  2.     WHEN 'MWSKZ'.
  3.       DATA:  tb_mwskz TYPE TABLE OF T007S,
  4.              dropdownBox type ref to CL_HTMLB_DROPDOWNLISTBOX.
  5.       SELECT *
  6.       FROM T007S
  7.       INTO TABLE tb_mwskz.
  8.  
  9.       CREATE OBJECT dropdownBox.
  10.       dropdownBox->id                = p_cell_id.
  11.       dropdownBox->table             = tb_mwskz.
  12.       dropdownBox->nameofkeycolumn   = 'TEXT1'.
  13.       dropdownBox->nameofvaluecolumn = 'MWSKZ'.
  14.       dropdownBox->selection         = m_row_ref->MWSKZ.
  15.       dropdownBox->width             = 'auto'.
  16.  
  17.       p_replacement_bee = dropdownBox.
  18.  
  19.  
GeSHi ©
ich möchte also die spalte MWSKZ als wertespalte und die spalte TEXT1 als namensspalte definieren.
wenn ich das debugge kommt ein fehler indem mir mitgeteilt, dass das feld table nicht mit meiner internen tabelle typkompatibel ist.

die tabelle t007s enthält mehrere spalten, dies dürfte aber doch kein problem darstellen oder ?
Henriette5142
..
..
 
Posts: 72
Joined: Wed Nov 30, 2005 12:15 pm

Postby Logan2437 » Tue Feb 07, 2006 10:26 am

Hallo,

Nachdem du mir geholfen hast, kann ich dir nun helfen. :D

Das Attribut "TABLE" der DropDownBpx erwartet eine Referenz auf eine interne Tabelle.
Also würde das folgende dann funktionieren.
Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1.       get reference of tb_mwskz into dropdownbox->table.
  2.  
GeSHi ©


MfG
Kaiwalker
Logan2437
...
...
 
Posts: 169
Joined: Wed Jun 23, 2004 3:52 pm

Postby Henriette5142 » Tue Feb 07, 2006 11:45 am

hi vielen dank für deine antwort. da war ich schon drauf gekommen, aber da es bei mir trotzdem nicht geklappt hatte war ich nicht sicher ob es der richtige weg war.

mein coding sieht jetzt so aus:
Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. *#### ERSTELLE DROPDOWNBOX IN SPALTEN: MWSKZ #######
  2.     WHEN 'MWSKZ'.
  3.       TYPES: BEGIN OF TY_TB_MWSKZ,
  4.                MWSKZ TYPE T007S-MWSKZ,
  5.                TEXT1 TYPE T007S-TEXT1,
  6.              END OF   TY_TB_MWSKZ.
  7.  
  8.       DATA:  dropdownBox type ref to CL_HTMLB_DROPDOWNLISTBOX,
  9.              TB_MWSKZ    TYPE TABLE OF TY_TB_MWSKZ,
  10.              WA_MWSKZ    TYPE TY_TB_MWSKZ.
  11.  
  12.       SELECT *
  13.         FROM T007S
  14.         INTO CORRESPONDING FIELDS OF WA_MWSKZ
  15.         WHERE KALSM = 'TAXD'
  16.         AND SPRAS   = SY-LANGU.
  17.         IF SY-SUBRC = 0.
  18.           APPEND WA_MWSKZ TO TB_MWSKZ.
  19.         ENDIF.
  20.       ENDSELECT.
  21.  
  22.  
  23. *     DROPDOWNBOX INHALT ÜBERGEBEN
  24.       CREATE OBJECT dropdownBox.
  25.       dropdownBox->id                = p_cell_id.
  26.       get reference of tb_mwskz into dropdownbox->table.
  27.       dropdownBox->nameofkeycolumn   = 'TEXT1'.
  28.       dropdownBox->nameofvaluecolumn = 'MWSKZ'.
  29.       dropdownBox->selection         =  m_row_ref->MWSKZ.
  30.       dropdownBox->width             = 'auto'.
  31.  
  32.       p_replacement_bee = dropdownBox.
GeSHi ©


wenn ich extern debugge sehe ich wie die tabelle gefüllt wird und in den zellen die dropdownbox erstellt wird. den attributen werden auch die richtigen werte zugewiesen.

trotzdem ist die dropdownbox leer. kann es vielleicht daran liegen dass ich die tb_mwskz lokal in der methode des iterator erstelle und einlese ?
ich habe leider keine applikationsklasse und kann deswegen nicht auf die tabellen meiner bsp anwendungen zugreifen. hat jemand eine lösung ?
Henriette5142
..
..
 
Posts: 72
Joined: Wed Nov 30, 2005 12:15 pm

Postby Logan2437 » Tue Feb 07, 2006 1:32 pm

Da ich die Tabelle auch erst im Iterator erstelle, kann es schon Mal nicht daran liegen.

Der Fehler liegt wahrscheinlich daran, dass du die dropDownBox direkt an p_replacement_bee übergibst.
Ich habe das bei mir wie folgt gelöst:
Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. data dropdownbox type ref to cl_htmlb_dropdownlistbox.
  2. data d_beetable type ref to cl_bsp_bee_table.
  3. create object d_beetable.
  4. [...]
  5. d_beetable->add( element = dropdownbox ).
  6. p_replacement_bee = d_beetable.
  7.  
GeSHi ©


MfG
Kaiwalker
Logan2437
...
...
 
Posts: 169
Joined: Wed Jun 23, 2004 3:52 pm

Postby Henriette5142 » Tue Feb 07, 2006 1:59 pm

genau dasselbe ergebnis :( :( :(
sonst noch irgendeinen vorschlag ?
Henriette5142
..
..
 
Posts: 72
Joined: Wed Nov 30, 2005 12:15 pm

Postby Logan2437 » Tue Feb 07, 2006 4:04 pm

Da ich nun auch nicht mehr so recht weiter weiß poste ich mal meine if_htmlb_tableview_iterator~render_cell_start Methode. Vielleicht siehst du da eine Stelle, die du falsch gemacht hast.
Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. method if_htmlb_tableview_iterator~render_cell_start .
  2.   data wa_tabfelder type zhtabfelder.
  3.   field-symbols: <comp> type any,
  4.                  <row> type any.
  5.  
  6.   read table me->it_tabfelder into wa_tabfelder
  7.                               with key tabname = me->m_tabname
  8.                                        f_lfdnr = p_column_index.
  9.   if not p_edit_mode is initial.
  10.   case wa_tabfelder-type.
  11.     when 'T'. " Textfeld --> nichts rendern
  12.  
  13.     when 'D'. " DropDownBox
  14.       data dropdownbox type ref to cl_htmlb_dropdownlistbox.
  15.       data d_beetable type ref to cl_bsp_bee_table.
  16.       field-symbols: <itab> type standard table.
  17.       data: ref_itab type ref to data.
  18.       create object dropdownbox.
  19.       dropdownbox->id = p_cell_id.
  20.       create data ref_itab type table of &#40;wa_tabfelder-checktable&#41;.
  21.       assign ref_itab->* to <itab>.
  22.       if not wa_tabfelder-cond[] is initial.
  23.         select * from &#40;wa_tabfelder-checktable&#41; into table <itab>
  24.                                         where &#40;wa_tabfelder-cond&#41;.
  25.       else.
  26.         select * from &#40;wa_tabfelder-checktable&#41; into table <itab>.
  27.       endif.
  28.       dropdownbox->table = ref_itab.
  29.       dropdownbox->nameofkeycolumn = wa_tabfelder-keyfield.
  30.       dropdownbox->nameofvaluecolumn = wa_tabfelder-textfield.
  31.       assign me->m_row_ref->* to <row>.
  32.       assign component wa_tabfelder-field of structure <row>
  33.                        to <comp>.
  34.       dropdownbox->selection = <comp>.
  35.       create object d_beetable.
  36.       d_beetable->add&#40; element = dropdownbox &#41;.
  37.       p_replacement_bee = d_beetable.
  38.     when 'I'. "Icon
  39.  
  40.     when 'C'. "Checkbox
  41.  
  42.   endif.
  43.  
GeSHi ©


Ich hoffe das hilft dir weiter.

MfG
Kaiwalker
Logan2437
...
...
 
Posts: 169
Joined: Wed Jun 23, 2004 3:52 pm

Postby Henriette5142 » Wed Feb 08, 2006 11:04 am

Hi, also sorry dass ich dir soviel arbeit mache, aber bei manchen schritten blicke ich nicht so ganz durch in deinem code. kannst eventuell etwas kommentieren ? das wäre echt super. ich schaffe es nicht meinen code deinem anzugleichen.

wie mein code aussieht weisst du ja.
ich hab eine wa_mwskz als workarea, zweispaltig
aus der db T007S lese ich aus
tb_mwskz type table of wa_mwskz

ich lese 2 bestimmte spalten aus der T007S in die wa und appende diese

dann muss ich wohl die referenz zur tabelle erstellen und die dann in dropdownBox->table angeben.

aber ich kriegs ned hin, kannst du vielleicht nochmal gucken? vielen dank
Henriette5142
..
..
 
Posts: 72
Joined: Wed Nov 30, 2005 12:15 pm

Postby Logan2437 » Wed Feb 08, 2006 12:55 pm

Ich habe es gerade auch Mal mit der Tabelle T007S ausprobiert. Ich habe eine DropDownBox mit Werten angezeigt bekommen.
Hier noch Mal mein Code mit Kommentaren:
Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. method if_htmlb_tableview_iterator~render_cell_start .
  2.   data wa_tabfelder type zhtabfelder.
  3.   field-symbols: <comp> type any,
  4.                  <row> type any.
  5. * Eigenschaften des aktuellen Feldes auslesen
  6. read table me->it_tabfelder into wa_tabfelder
  7.                               with key tabname = me->m_tabname
  8.                                        f_lfdnr = p_column_index.
  9. * nur im Editiermodus weitermachen
  10.   if not p_edit_mode is initial.
  11. * aktueller Feldtyp
  12.   case wa_tabfelder-type.
  13.     when 'T'. " Textfeld --> nichts rendern
  14.  
  15.     when 'D'. " DropDownBox
  16.       data dropdownbox type ref to cl_htmlb_dropdownlistbox.
  17.       data d_beetable type ref to cl_bsp_bee_table.
  18. * ein Feldsymbol für meine interne Tabelle erstellen
  19.       field-symbols: <itab> type standard table.
  20.       data: ref_itab type ref to data.
  21. * DropDownBox erstellen
  22.       create object dropdownbox.
  23.       dropdownbox->id = p_cell_id.
  24. * zur Laufzeit eine Tabelle definieren
  25.       create data ref_itab type table of &#40;wa_tabfelder-checktable&#41;.
  26.       assign ref_itab->* to <itab>.
  27. * wa_tabfelder-cond ist eine dynamische Where-Klausel
  28. * Daten aus der Datenbanktabelle in die interne Tabelle lesen.
  29.       if not wa_tabfelder-cond[] is initial.
  30.         select * from &#40;wa_tabfelder-checktable&#41; into table <itab>
  31.                                         where &#40;wa_tabfelder-cond&#41;.
  32.       else.
  33.         select * from &#40;wa_tabfelder-checktable&#41; into table <itab>.
  34.       endif.
  35. * Da ich schon eine Referenz auf meine interne Tabelle habe --> einfach dem Element table zuweisen
  36.       dropdownbox->table = ref_itab.
  37. * Name der Spalte, dessen Wert abgespeichert werden soll
  38.       dropdownbox->nameofkeycolumn = wa_tabfelder-keyfield.
  39. * Name der Spalte, die angezeigt werden soll
  40.       dropdownbox->nameofvaluecolumn = wa_tabfelder-textfield.
  41. * Den aktuell Selektierten Eintrag  vorselektieren
  42.       assign me->m_row_ref->* to <row>.
  43.       assign component wa_tabfelder-field of structure <row>
  44.                        to <comp>.
  45.       dropdownbox->selection = <comp>.
  46. * Die beetable erstellen und dieser die DropDownBox übergeben
  47.       create object d_beetable.
  48.       d_beetable->add&#40; element = dropdownbox &#41;.
  49. * Dem Parameter p_replacement_bee die beetable übergeben
  50.       p_replacement_bee = d_beetable.
  51.     when 'I'. "Icon
  52.  
  53.     when 'C'. "Checkbox
  54.  
  55.   endcase.
  56.   endif.
  57.  
GeSHi ©

zhtabfelder ist eine eigene Struktur, die ich in der BSP-Anwendung fülle und an meinen Iterator per Constuctor übergebe.

Auf deine Bedürfnisse angepasst würde das dann so aussehen:
Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. method if_htmlb_tableview_iterator~render_cell_start .
  2.   field-symbols: <comp> type any,
  3.                  <row> type any.
  4.       data dropdownbox type ref to cl_htmlb_dropdownlistbox.
  5.       data d_beetable type ref to cl_bsp_bee_table.
  6. * ein Feldsymbol für meine interne Tabelle erstellen
  7.       field-symbols: <itab> type standard table.
  8.       data: ref_itab type ref to data.
  9. * DropDownBox erstellen
  10.       create object dropdownbox.
  11.       dropdownbox->id = p_cell_id.
  12. * zur Laufzeit eine Tabelle definieren
  13.       create data ref_itab type table of T007S.
  14.       assign ref_itab->* to <itab>.
  15.       select * from &#40;wa_tabfelder-checktable&#41; into table <itab>.
  16. * Da ich schon eine Referenz auf meine interne Tabelle habe --> einfach dem Element table zuweisen
  17.       dropdownbox->table = ref_itab.
  18. * Name der Spalte, dessen Wert abgespeichert werden soll
  19.       dropdownbox->nameofkeycolumn = 'TEXT1'.
  20. * Name der Spalte, die angezeigt werden soll
  21.       dropdownbox->nameofvaluecolumn = 'MWSKZ'.
  22. * Den aktuell Selektierten Eintrag  vorselektieren
  23.       dropdownbox->selection = me->m_row_ref->mwskz.
  24. * Die beetable erstellen und dieser die DropDownBox übergeben
  25.       create object d_beetable.
  26.       d_beetable->add&#40; element = dropdownbox &#41;.
  27. * Dem Parameter p_replacement_bee die beetable übergeben
  28.       p_replacement_bee = d_beetable.
  29.  
  30.  
GeSHi ©


Wenn das nicht funktioniert, würde ich mal nachsehen, ob überhaupt etwas in der Tabelle T007s steht :)

Kann es zufällig auch sein, dass du die Felder nameofkeycolumn und nameofvaluecolumn vertauscht hast ?

MfG
Kaiwalker
Logan2437
...
...
 
Posts: 169
Joined: Wed Jun 23, 2004 3:52 pm

Postby Henriette5142 » Wed Feb 08, 2006 2:53 pm

hi
also danke erstmal für den aufwand. sorry dass ich dir soviel mühe mache.
ich verstehe deinen code voll und ganz bis auf eine zeile.

Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. select * from &#40;wa_tabfelder-checktable&#41; into table <itab>.
GeSHi ©


deine wa_tabfelder drückt eine zeile deiner tabelle aus dem tableview aus und das checktable ist die spalte in der die dropdownbox angezeigt wird.
aber wieso liest du aus diesem feld den wert in die itab ?

in welchem schritt wird die itab, auf die ich später referenziere, mit den werten aus der t007s gefüllt ?

vielen dank schonmal.
Henriette5142
..
..
 
Posts: 72
Joined: Wed Nov 30, 2005 12:15 pm

Postby Logan2437 » Wed Feb 08, 2006 4:20 pm

Hallo,

vvursT hat geschrieben:bis auf eine zeile.
Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. select * from &#40;wa_tabfelder-checktable&#41; into table <itab>.
GeSHi ©



da sollte eigentlich stehen:
Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. select * from T007s into table <itab>.
GeSHi ©

In dem Feld wa_tabfelder-checktable steht lediglich der Tabellenname der Datenbanktabelle drin, die ich auslesen will.

MfG
Kaiwalker
Logan2437
...
...
 
Posts: 169
Joined: Wed Jun 23, 2004 3:52 pm

Next

Return to BSP + BHTML

Who is online

Users browsing this forum: No registered users and 12 guests