Generisch Feldwert auslesen und aktualisieren

Aus SAP-Wiki
Wechseln zu: Navigation, Suche

Es kann der Fall vorkommen, dass erst zur Laufzeit sich entscheidet, von welchem Feld einer Struktur ein Wert gelesen wird, bzw. zurückgeschrieben werden muss.

Anwendungsfall Generisch ALV-Feld ändern mit Popupwert

In einem Praxis-Anwendungsfall war die Anforderung, dass einzelne Zellen einer ALV-Liste änderbar sein sollten. Dies wurde realisiert, indem per Doppelklick der Wert einer Zelle in einem Popup-Dialog (Funktionsbaustein 'POPUP_GET_VALUES') angezeigt wurde und hier änderbar war. Dieser geänderte Wert musste dann in die Zeile/Workingarea zurückgeschrieben werden.

Das ist nicht trivial, weil sich erst zur Laufzeit entscheidet, auf welchem Feld der Doppelklick passierte. Daher kann dieser Feldname nicht hart im Coding eingetragen werden.

Hier kann man mit dem Befehl "Assign component" zur Laufzeit den betreffenden Feldwert in ein Feldsymbol schreiben. Durch Aktualisierung dieses Feld-Symboles wird automatisch auch die Struktur LS_ALV_FI aktualisiert, da das Feldsymbol nur einen Zeiger auf das Strukturfeld darstellt.

In der Struktur RS_SELFIELD steht u. a. der Feldname, auf den in der ALV-Liste ein Doppelklick passierte.

form alv_user_command                                       "#EC CALLED
  using r_ucomm     type sy-ucomm
        rs_selfield type slis_selfield.

  Field-Symbols: <fs_value> type any.

 "Das Field-Symbol bekommt nun den Typ des Feldnamens, der in RS_SELFIELD-FIELDNAME steht
  assign component rs_selfield-fieldname of structure ls_alv_fi to <fs_value>. 

  ... (Popupfunktionalität Funktionsbaustein POPUP_GET_VALUES, neuer Wert in LS_FIELDS-VALUE)

 "Das Field-Symbol <FS_VALUE> bekommt den Wert von LS_FIELDS-VALUE zugewiesen
  <fs_value> = ls_fields-value.

endform.

In dem Feldsymbol <FS_VALUE> steht nun abschließend der aktualisierte Wert.

Anwendungsfall Generische Field-Symbol-Tabelle aktualisieren

field-Symbols: <ft_itab> type table,
               <fs_itab> type any,
               <fs_kunnr> type kunnr.

if <ft_itab> is ASSIGNED.

  loop at <ft_itab> ASSIGNING <fs_itab>.
    assign COMPONENT 'ZZKNDNR' of STRUCTURE <fs_itab> to <fs_kunnr>.

    <fs_kunnr> = ...
  endloop.

endif.

Anwendungsfall alle Felder der generischen Struktur lesen

Über eine DO-ENDDO-Schleife und den Befehl

ASSIGN COMPONENT SY-INDEX OF STRUCTURE <structure_fieldsymbol> TO <feld_fieldsymbol>.

lassen sich alle Felder eines generischen Field-Symbols auslesen und weiterverarbeiten.

FIELD-SYMBOLS: <fs_zeile> TYPE any,
               <fv_feld> TYPE any.

DO.
  ASSIGN COMPONENT sy-INDEX OF STRUCTURE <fs_zeile> TO <fv_feld>.
  IF sy-subrc NE 0.
    EXIT.
  ENDIF.
  WRITE: / <fv_feld>.
ENDDO.

Web-Links