Componente in Web-Dynpro

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Die Objektorientierung mit ABAP®: Vererbung, Dynamische Programmierung, GUI Controls (u.a. ALV im OO).
7 Beiträge • Seite 1 von 1
7 Beiträge Seite 1 von 1

Componente in Web-Dynpro

Beitrag von Trulchen (Specialist / 241 / 4 / 1 ) »
Hallo, und zwar folgendes Problem.

Ich arbeite mit Web-Dynpro und bin ziemlich neu was die Objektorientierung angeht.

Ich habe eine Componente erstellt die mir den Inhalt einer Internen Tabelle in eine
UI-Tabelle schreiben soll.

Der Inhalt der Internen Tabelle wird in der Methode des Hauptprogramms gefüllt.
Und anschließend wird über den Interfacecontroller die oben genannte Methode aufgerufen.

Nach zahlreichen durch debuggen ist mir klar, das die Daten gar nicht erst in der Interface-Methode ankommen. Also alle Tabellen sind leer etc.

Was muss ich beachten?
Ich habe auch mal versucht meiner Interface-Methode einen Changing Parameter zu geben und dann die interne Tabelle zuzuweißen.
Aber meine Daten gehen einfach verloren :-/

Code: Alles auswählen.

 DATA lo_nd_tabfileinfo_tab TYPE REF TO if_wd_context_node.
  DATA lo_el_tabfileinfo_tab TYPE REF TO if_wd_context_element.
  DATA ls_tabfileinfo_tab TYPE wd_this->Element_tabfileinfo_tab.
  DATA lv_file_name TYPE wd_this->Element_tabfileinfo_tab-file_name.
  DATA lv_file_size TYPE wd_this->Element_tabfileinfo_tab-file_size.
  DATA lv_first_line TYPE wd_this->Element_tabfileinfo_tab-first_line.
  DATA lv_last_line TYPE wd_this->Element_tabfileinfo_tab-last_line.
  DATA tabfileinfo TYPE TABLE OF sdokfilaci.
  DATA it_ui_TABLE TYPE wd_this->Element_tabfileinfo_tab.
  DATA itab_ui_table TYPE TABLE OF wd_this->Element_tabfileinfo_tab.

* navigate from <CONTEXT> to <TABFILEINFO_TAB> via lead selection
  lo_nd_tabfileinfo_tab = wd_context->get_child_node( name = wd_this->wdctx_tabfileinfo_tab ).

* get element via lead selection
  lo_el_tabfileinfo_tab = lo_nd_tabfileinfo_tab->get_element( ).

* @TODO handle not set lead selection
  IF lo_el_tabfileinfo_tab IS INITIAL.
  ENDIF.

* @TODO fill static attributes
* ls_tabfileinfo_tab = xxx->get_yyy( ).

  LOOP AT tabfileinfo INTO it_tabfileinfo.
*ls_tablefileinfo ist dabei eine Zeile deiner Tabelle, sozusagen die Struktur deiner Tabelle gefüllten mit den Werten einer Zeile
    it_ui_table-file_size  = it_tabfileinfo-file_Size.
    it_ui_table-first_line = it_tabfileinfo-first_line.
    it_ui_table-last_line  = it_tabfileinfo-last_line.
    it_ui_table-file_name  = it_tabfileinfo-file_name.

    MOVE-CORRESPONDING it_tabfileinfo TO it_ui_table.

    lo_el_tabfileinfo_tab->set_attribute(
      name =  `FILE_SIZE`
      value = it_ui_table-file_Size ).

* set single attribute
    lo_el_tabfileinfo_tab->set_attribute(
       name =  `FIRST_LINE`
       value = it_ui_table-first_line ).

* set single attribute
    lo_el_tabfileinfo_tab->set_attribute(
       name =  `LAST_LINE`
       value = it_ui_table-last_line ).

* set single attribute
    lo_el_tabfileinfo_tab->set_attribute(
      name =  `FILE_NAME`
      value = it_ui_table-file_name ).
    APPEND it_ui_table TO itab_ui_table.

  ENDLOOP.

  lo_nd_tabfileinfo_tab->BIND_TABLE( new_items = itab_ui_table ).
Ich hoffe ihr könnt mir helfen :)
Liebe Grüße
Julia
Zuletzt geändert von Trulchen am 12.03.2013 09:38, insgesamt 2-mal geändert.

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


Re: Componente in Web-Dynpro

Beitrag von Trulchen (Specialist / 241 / 4 / 1 ) »
Hab jetzt noch mal genau durchdebuggt.
Es liegt an dem MOVE-CORRESPONDING it_tabfileinfo TO it_ui_table.

it_tabfileinfo enthält Daten schreibt es aber nicht in it_ui_table.

An was liegt das?

Re: Componente in Web-Dynpro

Beitrag von a-dead-trousers (Top Expert / 4483 / 231 / 1205 ) »
Kann es vielleicht sein, dass die Felder in it_tabfileinfo und it_ui_table unterschiedliche Namen haben?
Oder unterschiedliche Datentypen?
Dann funktioniert MOVE-CORRESPONDING nicht bzw. nicht richtig.

btw. Ich würde dir eine "etwas andere" Schreibweise deiner Variablen bzw. Typen empfehlen.
IT_ => Interne Tabelle du verwendest es aber als Tabellenzeile (siehe it_ui_TABLE und die Tabelle dazu itab_ui_table)
_TAB => Interne Tabelle du verwendest es aber als Typ für eine Tabellenzeile (siehe wd_this->Element_tabfileinfo_tab)

Besser wäre:

Code: Alles auswählen.

DATA: ui_line TYPE wd_this->Element_tabfileinfo.
DATA: ui_table TYPE TABLE OF wd_this->Element_tabfileinfo.
oder noch besser:

Code: Alles auswählen.

DATA: wa_ui_fileinfo TYPE wd_this->Element_tabfileinfo.
DATA: it_ui_fileinfo TYPE wd_this->Element_tabfileinfo_tab. "= TYPE TABLE OF Element_tabfileinfo.
lg ADT
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Componente in Web-Dynpro

Beitrag von Trulchen (Specialist / 241 / 4 / 1 ) »
Danke ADT für deine Antwort.

DIe Felder der beiden sind die gleiche, habe ich gerade extra noch mal nachgeschaut.....

Sonst noch ne Idee?

Code: Alles auswählen.

  LOOP AT tabfileinfo INTO it_tabfileinfo.
*ls_tablefileinfo ist dabei eine Zeile deiner Tabelle, sozusagen die Struktur deiner Tabelle gefüllten mit den Werten einer Zeile
    it_ui_table-file_size  = it_tabfileinfo-file_Size.
    it_ui_table-first_line = it_tabfileinfo-first_line.
    it_ui_table-last_line  = it_tabfileinfo-last_line.
    it_ui_table-file_name  = it_tabfileinfo-file_name.

    MOVE-CORRESPONDING it_tabfileinfo TO it_ui_table.

    lo_el_tabfileinfo_tab->set_attribute(
      name =  `FILE_SIZE`
      value = it_ui_table-file_Size ).

* set single attribute
    lo_el_tabfileinfo_tab->set_attribute(
       name =  `FIRST_LINE`
       value = it_ui_table-first_line ).

* set single attribute
    lo_el_tabfileinfo_tab->set_attribute(
       name =  `LAST_LINE`
       value = it_ui_table-last_line ).

* set single attribute
    lo_el_tabfileinfo_tab->set_attribute(
      name =  `FILE_NAME`
      value = it_ui_table-file_name ).
    APPEND it_ui_table TO itab_ui_table.

  ENDLOOP.
die Felder von it_tabfileinfo haben auch immer Werte enthalten.
Aber er weißt es einfach nicht it_ui_tabele zu.

( bzw. wa_ui_table) Habe die Namensenänderung berücksichtigt.

Re: Componente in Web-Dynpro

Beitrag von a-dead-trousers (Top Expert / 4483 / 231 / 1205 ) »
hi!

Sind it_tabfileinfo und it_ui_table jetzt Tabellen oder Strukturen?
MOVE-CORRESPONDING funktioniert NUR für Strukturen und auch nur wenn die Felder gleich lauten.
Also wird zum Beispiel das Feld der Struktur A mit dem NAMEN 'ABC' in das Feld mit dem Namen 'ABC' der Struktur B kopiert.

lg ADT
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Componente in Web-Dynpro

Beitrag von Thanatos82 (Expert / 699 / 32 / 123 ) »
Hi,

warum machst du denn unbedingt den MOVE? Du kannst doch deine Variablen direkt binden ohne den Schritt über das zwischenspeichern in einer neuen Variablen?

Also quasi so:

Code: Alles auswählen.

 LOOP AT tabfileinfo INTO it_tabfileinfo.
* -------- Alle Attribute direkt binden --------
    lo_el_tabfileinfo_tab->set_attribute(
      NAME =  `FILE_SIZE`
      VALUE = it_tablefileinfo-file_Size ).

* set single attribute
    lo_el_tabfileinfo_tab->set_attribute(
       NAME =  `FIRST_LINE`
       VALUE = it_tablefileinfo-first_line ).

* set single attribute
    lo_el_tabfileinfo_tab->set_attribute(
       NAME =  `LAST_LINE`
       VALUE = it_tablefileinfo-last_line ).

* set single attribute
    lo_el_tabfileinfo_tab->set_attribute(
      NAME =  `FILE_NAME`
      VALUE = it_tablefileinfo-file_name ).
* ------------------------------------------------------
* -------- neue Tabelle besetzen, sofern überhaupt noch notwendig --------
    MOVE-CORRESPONDING it_tabfileinfo TO it_ui_table.
    APPEND it_ui_table TO itab_ui_table.

  ENDLOOP.
 
Wobei ich ADT recht geben muss, wenn deine beiden Strukturen it_tablefileinfo und it-ui_table nicht exakt die gleichen Wortlaute enthalten, werden nur die wo es zu 100% übereinstimmt übernommen. Es kann mitunter sogar am Bezugstypen liegen, dass manche Variablen beim MOVE-CORRESPONDING Befehl schlichtweg ignoriert werden.
Vergleich doch nochmal beide Strukturen auf die Namen und deren Bezugstypen. Wenn die gleich sind und der Befehl trotzdem nicht das gewünschte ergebnis bringt, dann binde sie doch direkt um zu schauen ob diese Zuweisung wenigstens klappt oder ob du ne sy-subrc <> 0 bekommst.

Grüße ausm Krankenstand,
Matze
Gruß,
der Matze

Re: Componente in Web-Dynpro

Beitrag von Trulchen (Specialist / 241 / 4 / 1 ) »
Habe es jetzt ganz anders gelöst nämlich so:
Ich habe der Methode den Importparameter als Tabelle mitgegeben also den Tabellentyp und noch etwas umgeschrieben und jetzt Funktioniert es ENDLICH !

Code: Alles auswählen.

method FILL_TABINFO .

  DATA lo_nd_tabfileinfo TYPE REF TO if_wd_context_node.
  DATA lo_el_tabfileinfo TYPE REF TO if_wd_context_element.
  DATA ls_tabfileinfo TYPE wd_this->Element_tabfileinfo.
  DATA lv_file_name TYPE wd_this->Element_tabfileinfo-file_name.
  DATA lv_file_size TYPE wd_this->Element_tabfileinfo-file_size.
  DATA lv_first_line TYPE wd_this->Element_tabfileinfo-first_line.
  DATA lv_last_line TYPE wd_this->Element_tabfileinfo-last_line.
  DATA it_tabfileinfo TYPE sdokfilaci.
  DATA: wa_fileinfo TYPE wd_this->Element_tabfileinfo.
  DATA: it_fileinfo TYPE TABLE OF wd_this->Element_tabfileinfo.

* navigate from <CONTEXT> to <TABFILEINFO_TAB> via lead selection
  lo_nd_tabfileinfo = wd_context->get_child_node( name = wd_this->wdctx_tabfileinfo ).

* get element via lead selection
  lo_el_tabfileinfo = lo_nd_tabfileinfo->get_element( ).

* @TODO handle not set lead selection
  IF lo_el_tabfileinfo IS INITIAL.
  ENDIF.

  LOOP AT tabfileinfo INTO it_tabfileinfo.
      MOVE-CORRESPONDING it_tabfileinfo TO wa_fileinfo.
    APPEND wa_fileinfo TO it_fileinfo.
  ENDLOOP.

  lo_nd_tabfileinfo->bind_table( new_items = it_fileinfo set_initial_elements = abap_true ).


endmethod.

Seite 1 von 1

Vergleichbare Themen

0
Antw.
7489
Views
6
Antw.
18100
Views
Web-Dynpro: längeres Dynpro nicht sichtbar
von erzoo24 » 08.03.2017 11:33 • Verfasst in Web-Dynpro, BSP + BHTML
4
Antw.
19635
Views
Web Dynpro ABAP vs. Web Dynpro JAVA
von PatrickJ » 21.06.2007 06:44 • Verfasst in Web Application Server
4
Antw.
6824
Views
Feld aus Dynpro A an Dynpro B übergeben
von SAPAlex » 06.03.2008 17:35 • Verfasst in ABAP® für Anfänger
0
Antw.
2835
Views
BSP in Web Dynpro
von bambuse » 19.04.2007 10:02 • Verfasst in Web-Dynpro, BSP + BHTML

Über diesen Beitrag


Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

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

Aktuelle Forenbeiträge

Schachtsteuerung je nach Auftragsart
vor 4 Stunden von JHM 3 / 544
IF mit AND und OR
vor 5 Tagen von DeathAndPain 10 / 32079

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.