dropdownlistbox im tv

ABAP Web Dynpro, BusinessServerPages; Erstellung von Webapplikationen.
11 Beiträge • Seite 1 von 1
11 Beiträge Seite 1 von 1

dropdownlistbox im tv

Beitrag von vvursT (ForumUser / 72 / 0 / 0 ) »
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: Alles auswählen.

*#### ERSTELLE DROPDOWNBOX IN SPALTEN: MWSKZ #######
    WHEN 'MWSKZ'.
      DATA:  tb_mwskz TYPE TABLE OF T007S,
             dropdownBox type ref to CL_HTMLB_DROPDOWNLISTBOX.
      SELECT *
      FROM T007S
      INTO TABLE tb_mwskz.

      CREATE OBJECT dropdownBox.
      dropdownBox->id                = p_cell_id.
      dropdownBox->table             = tb_mwskz.
      dropdownBox->nameofkeycolumn   = 'TEXT1'.
      dropdownBox->nameofvaluecolumn = 'MWSKZ'.
      dropdownBox->selection         = m_row_ref->MWSKZ.
      dropdownBox->width             = 'auto'.

      p_replacement_bee = dropdownBox.

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 ?

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Beitrag von Kaiwalker (Specialist / 164 / 0 / 0 ) »
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: Alles auswählen.

      get reference of tb_mwskz into dropdownbox->table.
MfG
Kaiwalker

Beitrag von vvursT (ForumUser / 72 / 0 / 0 ) »
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: Alles auswählen.

*#### ERSTELLE DROPDOWNBOX IN SPALTEN: MWSKZ #######
    WHEN 'MWSKZ'.
      TYPES: BEGIN OF TY_TB_MWSKZ,
               MWSKZ TYPE T007S-MWSKZ,
               TEXT1 TYPE T007S-TEXT1,
             END OF   TY_TB_MWSKZ.

      DATA:  dropdownBox type ref to CL_HTMLB_DROPDOWNLISTBOX,
             TB_MWSKZ    TYPE TABLE OF TY_TB_MWSKZ,
             WA_MWSKZ    TYPE TY_TB_MWSKZ.

      SELECT *
        FROM T007S
        INTO CORRESPONDING FIELDS OF WA_MWSKZ
        WHERE KALSM = 'TAXD'
        AND SPRAS   = SY-LANGU.
        IF SY-SUBRC = 0.
          APPEND WA_MWSKZ TO TB_MWSKZ.
        ENDIF.
      ENDSELECT.


*     DROPDOWNBOX INHALT ÜBERGEBEN
      CREATE OBJECT dropdownBox.
      dropdownBox->id                = p_cell_id.
      get reference of tb_mwskz into dropdownbox->table.
      dropdownBox->nameofkeycolumn   = 'TEXT1'.
      dropdownBox->nameofvaluecolumn = 'MWSKZ'.
      dropdownBox->selection         =  m_row_ref->MWSKZ.
      dropdownBox->width             = 'auto'.

      p_replacement_bee = dropdownBox.
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 ?

Beitrag von Kaiwalker (Specialist / 164 / 0 / 0 ) »
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: Alles auswählen.

data dropdownbox type ref to cl_htmlb_dropdownlistbox.
data d_beetable type ref to cl_bsp_bee_table.
create object d_beetable.
[...]
d_beetable->add( element = dropdownbox ).
p_replacement_bee = d_beetable.
MfG
Kaiwalker

Beitrag von vvursT (ForumUser / 72 / 0 / 0 ) »
genau dasselbe ergebnis :( :( :(
sonst noch irgendeinen vorschlag ?

Beitrag von Kaiwalker (Specialist / 164 / 0 / 0 ) »
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: Alles auswählen.

method if_htmlb_tableview_iterator~render_cell_start .
  data wa_tabfelder type zhtabfelder.
  field-symbols: <comp> type any,
                 <row> type any.

  read table me->it_tabfelder into wa_tabfelder
                              with key tabname = me->m_tabname
                                       f_lfdnr = p_column_index.
  if not p_edit_mode is initial.
  case wa_tabfelder-type.
    when 'T'. " Textfeld --> nichts rendern

    when 'D'. " DropDownBox
      data dropdownbox type ref to cl_htmlb_dropdownlistbox.
      data d_beetable type ref to cl_bsp_bee_table.
      field-symbols: <itab> type standard table.
      data: ref_itab type ref to data.
      create object dropdownbox.
      dropdownbox->id = p_cell_id.
      create data ref_itab type table of (wa_tabfelder-checktable).
      assign ref_itab->* to <itab>.
      if not wa_tabfelder-cond[] is initial.
        select * from (wa_tabfelder-checktable) into table <itab>
                                        where (wa_tabfelder-cond).
      else.
        select * from (wa_tabfelder-checktable) into table <itab>.
      endif.
      dropdownbox->table = ref_itab.
      dropdownbox->nameofkeycolumn = wa_tabfelder-keyfield.
      dropdownbox->nameofvaluecolumn = wa_tabfelder-textfield.
      assign me->m_row_ref->* to <row>.
      assign component wa_tabfelder-field of structure <row>
                       to <comp>.
      dropdownbox->selection = <comp>.
      create object d_beetable.
      d_beetable->add( element = dropdownbox ).
      p_replacement_bee = d_beetable.
    when 'I'. "Icon

    when 'C'. "Checkbox

  endcase.
  endif.
endmethod.
Ich hoffe das hilft dir weiter.

MfG
Kaiwalker

Beitrag von vvursT (ForumUser / 72 / 0 / 0 ) »
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

Beitrag von Kaiwalker (Specialist / 164 / 0 / 0 ) »
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: Alles auswählen.

method if_htmlb_tableview_iterator~render_cell_start . 
  data wa_tabfelder type zhtabfelder. 
  field-symbols: <comp> type any, 
                 <row> type any. 
* Eigenschaften des aktuellen Feldes auslesen
read table me->it_tabfelder into wa_tabfelder 
                              with key tabname = me->m_tabname 
                                       f_lfdnr = p_column_index. 
* nur im Editiermodus weitermachen
  if not p_edit_mode is initial. 
* aktueller Feldtyp 
  case wa_tabfelder-type. 
    when 'T'. " Textfeld --> nichts rendern 

    when 'D'. " DropDownBox 
      data dropdownbox type ref to cl_htmlb_dropdownlistbox. 
      data d_beetable type ref to cl_bsp_bee_table. 
* ein Feldsymbol für meine interne Tabelle erstellen
      field-symbols: <itab> type standard table. 
      data: ref_itab type ref to data. 
* DropDownBox erstellen
      create object dropdownbox. 
      dropdownbox->id = p_cell_id.
* zur Laufzeit eine Tabelle definieren 
      create data ref_itab type table of (wa_tabfelder-checktable). 
      assign ref_itab->* to <itab>. 
* wa_tabfelder-cond ist eine dynamische Where-Klausel
* Daten aus der Datenbanktabelle in die interne Tabelle lesen.
      if not wa_tabfelder-cond[] is initial. 
        select * from (wa_tabfelder-checktable) into table <itab> 
                                        where (wa_tabfelder-cond). 
      else. 
        select * from (wa_tabfelder-checktable) into table <itab>. 
      endif. 
* Da ich schon eine Referenz auf meine interne Tabelle habe --> einfach dem Element table zuweisen
      dropdownbox->table = ref_itab. 
* Name der Spalte, dessen Wert abgespeichert werden soll
      dropdownbox->nameofkeycolumn = wa_tabfelder-keyfield. 
* Name der Spalte, die angezeigt werden soll
      dropdownbox->nameofvaluecolumn = wa_tabfelder-textfield. 
* Den aktuell Selektierten Eintrag  vorselektieren
      assign me->m_row_ref->* to <row>. 
      assign component wa_tabfelder-field of structure <row> 
                       to <comp>. 
      dropdownbox->selection = <comp>. 
* Die beetable erstellen und dieser die DropDownBox übergeben
      create object d_beetable. 
      d_beetable->add( element = dropdownbox ). 
* Dem Parameter p_replacement_bee die beetable übergeben
      p_replacement_bee = d_beetable. 
    when 'I'. "Icon 

    when 'C'. "Checkbox 

  endcase. 
  endif. 
endmethod. 
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: Alles auswählen.

method if_htmlb_tableview_iterator~render_cell_start . 
  field-symbols: <comp> type any, 
                 <row> type any. 
      data dropdownbox type ref to cl_htmlb_dropdownlistbox. 
      data d_beetable type ref to cl_bsp_bee_table. 
* ein Feldsymbol für meine interne Tabelle erstellen
      field-symbols: <itab> type standard table. 
      data: ref_itab type ref to data. 
* DropDownBox erstellen
      create object dropdownbox. 
      dropdownbox->id = p_cell_id.
* zur Laufzeit eine Tabelle definieren 
      create data ref_itab type table of T007S. 
      assign ref_itab->* to <itab>. 
      select * from (wa_tabfelder-checktable) into table <itab>. 
* Da ich schon eine Referenz auf meine interne Tabelle habe --> einfach dem Element table zuweisen
      dropdownbox->table = ref_itab. 
* Name der Spalte, dessen Wert abgespeichert werden soll
      dropdownbox->nameofkeycolumn = 'TEXT1'. 
* Name der Spalte, die angezeigt werden soll
      dropdownbox->nameofvaluecolumn = 'MWSKZ'. 
* Den aktuell Selektierten Eintrag  vorselektieren
      dropdownbox->selection = me->m_row_ref->mwskz.
* Die beetable erstellen und dieser die DropDownBox übergeben
      create object d_beetable. 
      d_beetable->add( element = dropdownbox ). 
* Dem Parameter p_replacement_bee die beetable übergeben
      p_replacement_bee = d_beetable. 

endmethod. 
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

Beitrag von vvursT (ForumUser / 72 / 0 / 0 ) »
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: Alles auswählen.

select * from (wa_tabfelder-checktable) into table <itab>.
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.

Beitrag von Kaiwalker (Specialist / 164 / 0 / 0 ) »
Hallo,
vvursT hat geschrieben:bis auf eine zeile.

Code: Alles auswählen.

select * from (wa_tabfelder-checktable) into table <itab>.
da sollte eigentlich stehen:

Code: Alles auswählen.

select * from T007s into table <itab>.
In dem Feld wa_tabfelder-checktable steht lediglich der Tabellenname der Datenbanktabelle drin, die ich auslesen will.

MfG
Kaiwalker

Beitrag von vvursT (ForumUser / 72 / 0 / 0 ) »
ohmann ey.... danke gott... oder besser... danke kai :D

endlich geht es.... ohman ich bin fast verzweifelt dabei wär es echt schaffbar gewesen selber drauf zu kommen. ich danke dir vielmals endlich geht es :D
ich hoffe nun kann ich dir wieder helfen :)

Seite 1 von 1

Vergleichbare Themen

5
Antw.
1362
Views
DropDownListBox
von KroKro » 19.07.2011 13:44 • Verfasst in ABAP® für Anfänger
3
Antw.
1574
Views
BSP ... DropDownListbox mit Variabler ID
von nacht_falke » 09.09.2004 22:10 • Verfasst in Web-Dynpro, BSP + BHTML
0
Antw.
998
Views
DropDownListBox (disabled)
von Gast » 17.02.2006 12:06 • Verfasst in Web-Dynpro, BSP + BHTML
1
Antw.
2403
Views
ALV Event Dropdownlistbox
von axelk » 02.09.2008 16:15 • Verfasst in Dialogprogrammierung
5
Antw.
5009
Views
Beispiel für DropdownListBox needed
von Gast » 18.05.2004 14:17 • Verfasst in Web-Dynpro, BSP + BHTML

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.