Änderung von Daten mit Hilfe desTabellenpflegedialogs

Um Daten, die in einem Tabellenpflegedialog verarbeitet werden, automatisiert hinzuzufügen, muss ein Funktionsbaustein aufgerufen werden, der dies tut. Die Daten müssen zuvor geprüft sein. Der Funktionsbaustein tut dies leider nicht.Es werden dann aber alle Erweiterungen, die durch Zeitpunkte hinzugefügt wurden, durchlaufen.

Folgendes – zugegebener Maßen durch Copy and Paste zusammengeschusterte Programm – demonstriert das Hinzufügen bzw. die Änderung eines Datensatzes in der Tabelle ZTEST1:

Felder der Tabelle:

  • MANDT
  • MATNR
  • FELD1
  • FELD2

Anmerkungen

Die Tabellendefinition mit OCCURS ist nicht mehr aktuell.

Das Coding ist Halb-generisch… Wo es ohne viel Aufwand möglich war, habe ich versucht, die Tabelle ZTEST1 generisch zu verwenden

  • Zuweisung der Werte in TOTAL
  • SELECT

Allerdings habe ich dies nicht stringent verfolgt:

  • WHERE_Bedingung ist nicht generisch
  • Struktur-Definition ist nicht dynamisch

Dieses Programm soll auch in erster Linie die Verwendung des Bausteins VIEW_MAINTENANCE_LOW_LEVEL demonstrieren. Ich wollte jedoch darauf achten, dass die Verwendung auch einigermaßen variabel möglich ist.

Coding

REPORT.

*== Selection Screen
PARAMETERS matnr TYPE ztest1-matnr DEFAULT ‚1234‘.
PARAMETERS feld1 TYPE ztest1-feld1 DEFAULT ‚TESTFELD1‘.
PARAMETERS feld2 TYPE ztest1-feld2 DEFAULT ‚Hier ist ein Test‘.

*== Macro für die Definition der notwendigen Tabellenstruktur
DEFINE _define_vim_tables.
data: begin of extract_data occurs 01.
include structure &1.
include structure vimflagtab.
data: end   of extract_data.

  data: begin of total_data occurs 01.
include structure &1.
include structure vimflagtab.
data: end of total_data.
END-OF-DEFINITION.

DATA:   sellist     LIKE vimsellist OCCURS 10 WITH HEADER LINE,
fu_to_excl  LIKE vimexclfun OCCURS 10 WITH HEADER LINE,
x_header    LIKE vimdesc    OCCURS 1,
x_namtab    LIKE vimnamtab  OCCURS 1,
hlp_sellist LIKE vimsellist OCCURS 0 WITH HEADER LINE,
corr_keytab LIKE e071k      OCCURS 0.

CONSTANTS viewname TYPE tabname VALUE ‚ZTEST1‘.

*== Definition der notwendigen Tabellen mit MARK- und ACTION-Flag
_define_vim_tables ztest1.

FIELD-SYMBOLS <f> TYPE ANY.

START-OF-SELECTION.

*== Aufbau Selektionskriterien
  CLEAR: sellist.
sellist-viewfield = ‚MATNR‘.
sellist-operator  = ‚EQ‘.
sellist-value     = matnr.
sellist-and_or    = space.
APPEND sellist.

*== Struktur der Tabelle ermitteln
  CALL FUNCTION ‚VIEW_GET_DDIC_INFO‘
EXPORTING
viewname        = viewname
TABLES
x_header        = x_header
x_namtab        = x_namtab
sellist         = hlp_sellist
EXCEPTIONS
no_tvdir_entry  = 3
table_not_found = 5.

  ASSIGN COMPONENT ‚MATNR‘ OF STRUCTURE total_data TO <f>. <f> = matnr.
ASSIGN COMPONENT ‚FELD1‘ OF STRUCTURE total_data TO <f>. <f> = feld1.
ASSIGN COMPONENT ‚FELD2‘ OF STRUCTURE total_data TO <f>. <f> = feld2.
ASSIGN COMPONENT ‚ACTION‘ OF STRUCTURE total_data TO <f>.
SELECT COUNT(*) FROM (viewname) WHERE matnr = matnr.
IF sy-subrc = 0.
*== Satz ist vorhanden: Änderung
<f> = ‚U‘.
ELSE.
*== Satz ist neu
    <f> = ‚N‘.
ENDIF.
APPEND total_data.

*== Aufruf des Bausteins
CALL FUNCTION ‚VIEW_MAINTENANCE_LOW_LEVEL‘
EXPORTING
corr_number               = ‚ ‚
fcode                     = ‚SAVE‘
view_action               = ‚U‘
view_name                 = viewname
TABLES
corr_keytab               = corr_keytab
dba_sellist               = hlp_sellist
dpl_sellist               = hlp_sellist
excl_cua_funct            = fu_to_excl
extract                   = extract_data
total                     = total_data
x_header                  = x_header
x_namtab                  = x_namtab
EXCEPTIONS
function_not_found        = 1
missing_corr_number       = 2
no_value_for_subset_ident = 3
saving_correction_failed  = 4
OTHERS                    = 5.
IF sy-subrc = 0.
COMMIT WORK.
ENDIF.