Anfang des Inhaltsbereichs

Listenzeilen modifizieren Dokument im Navigationsbaum lokalisieren

Um die Zeilen einer fertiggestellten Liste aus dem ABAP-Programm heraus zu modifizieren, verwendet man die Anweisung MODIFY LINE. Zur Angabe der zu modifizierenden Zeile hat man folgende Möglichkeiten:

MODIFY LINE <n> [INDEX <idx>|OF CURRENT PAGE|OF PAGE <p>]
                [<modifications>].

Ohne den ersten Zusatz verändert diese Anweisung die Zeile <n> der Liste auf der ein interaktives Ereignis stattfand (Index SY-LISTI). Mit den Optionen des ersten Zusatzes kann man die zu ändernde Zeile auch folgendermaßen angeben:

– mit INDEX <idx> bezeichnet man die Zeile <n> der Listenstufe mit dem Index <idx>

– mit OF CURRENT PAGE bezeichnet man die Zeile <n> der obersten angezeigten Seite (Seitenzahl SY-CPAGE)

– mit OF PAGE <p> bezeichnet man die Zeile <n> der Seite <p>.

Man kann sich auch auf die zuletzt gelesene Zeile beziehen:

MODIFY CURRENT LINE [<modifications>].

Diese Anweisung verändert die letzte durch Zeilenauswahl ( F2 ) oder die Anweisung READ LINE gelesene Zeile.

Ohne den Zusatz <modifications> stellen obige Anweisungen den aktuellen Inhalt des Systemfelds SY-LISEL in die angegebene Zeile. Der HIDE-Bereich der Zeile wird durch die aktuellen Werte der entsprechenden Felder überschrieben. Dies hat aber keinen Einfluß auf die angezeigten Werte.

Falls die angegebene Zeile geändert werden konnte, wird SY-SUBRC auf 0, ansonsten ungleich Null gesetzt.

Im Zusatz <modifications> stehen verschiedene weitere Möglichkeiten zur Verfügung, um die Zeile zusätzlich zu obigen Änderungen zu modifizieren.

Zeilenformatierung ändern

Man die Formatierung der zu ändernden Zeile mit dem Zusatz LINE FORMAT der Anweisung MODIFY wie folgt beeinflussen:

MODIFY ... LINE FORMAT <option1> <option 2> ... .

Diese Anweisung setzt das Ausgabeformat der gesamten geänderten Zeile gemäß den Formatangaben <option i >. Die möglichen Formatangaben entsprechen denen der Anweisung FORMAT.

Feldinhalte ändern

Man kann die Inhalte von Feldern in der zu ändernden Zeile gezielt mit dem Zusatz FIELD VALUE der Anweisung MODIFY ändern:

MODIFY ... FIELD VALUE <f1> [FROM <g1>] <f2> [FROM <g2>] ... .

Diese Anweisung überschreibt die Inhalte der Felder <f i > in der Listenzeile mit dem aktuellen Inhalt der Felder <f i > bzw. <g i >, ohne dabei letztere zu ändern. Dabei wird gegebenenfalls eine Typkonvertierung nach Typ C vorgenommen.

Bei eventuell mehrfach in einer Zeile vorkommenden Feldern <f i > wird nur das erste bearbeitet. Kommt ein Feld <f i > überhaupt nicht vor, wird der Zusatz ignoriert.

Vorkommende Felder <f i > werden unabhängig davon geändert, welcher aktuelle Inhalt aus dem Feld SY-LISEL in die Zeile geschrieben wurde. Eventuelle Änderungen der Zeile durch SY-LISEL an der Ausgabestelle eines Feldes <f i >, werden durch den Zusatz FIELD VALUE überschrieben.

Feldformatierung ändern

Man kann die Formatierung von Feldern in der zu ändernden Zeile mit dem Zusatz FIELD FORMAT der Anweisung MODIFY wie folgt beeinflussen:

MODIFY ... FIELD FORMAT <f1> <options1> <f2> <options2> ... .

Diese Anweisung setzt das Ausgabeformat der in der Zeile vorkommenden Felder <f i > gemäß den Formatangaben in <options i >. In <options i > können mehrere Formatangaben der Anweisung FORMAT angegeben werden.

Der Zusatz FIELD FORMAT überschreibt feldweise die Angaben des Zusatzes LINE FORMAT. Bei eventuell mehrfach in einer Zeile vorkommenden Feldern <f i > wird nur das erste bearbeitet. Kommt ein Feld <f i > überhaupt nicht vor, wird der Zusatz ignoriert.

Beispiele

Beispiel

Beispiel zur Zeilenformatierung.

REPORT demo_list_modify_line_format LINE-SIZE 40
                                    NO STANDARD PAGE HEADING.

DATA c TYPE i VALUE 1.

WRITE 'Select line to modify the background'.

AT LINE-SELECTION.
  IF c = 8.
    c = 0.
  ENDIF.
  MODIFY CURRENT LINE LINE FORMAT COLOR = c.
  ADD 1 TO c.

Dieses Programm erzeugt eine Ausgabezeile, deren Hintergrundfarbe der Benutzer durch wiederholte Zeilenauswahl abändern kann.

Beispiel

Beispiel zu Feldinhalten.

REPORT demo_list_modify_field_value LINE-SIZE 40
                                    NO STANDARD PAGE HEADING.

DATA c TYPE i.

WRITE: '   Number of selections:', (2) c.

AT LINE-SELECTION.
  ADD 1 TO c.
  sy-lisel(2) = '**'.
  MODIFY CURRENT LINE FIELD VALUE c.

Diese Programm erzeugt eine Ausgabezeile, in welcher der Benutzer durch Zeilenauswahl das Feld C verändern kann. Gleichzeitig werden dabei die ersten beiden Zeichen der Zeile durch das Verändern von SY-LISEL mit zwei Sternen '**' überschrieben.

Beispiel

Beispiel zur Feldformatierung.

REPORT demo_list_modify_field_format NO STANDARD PAGE HEADING.

DATA: box(1) TYPE c, lines TYPE i, num(1) TYPE c.

SET PF-STATUS 'CHECK'.

DO 5 TIMES.
  num = sy-index.
  WRITE: / box AS CHECKBOX, 'Line', num.
  HIDE: box, num.
ENDDO.
lines = sy-linno.

TOP-OF-PAGE.
  WRITE  'Select some checkboxes'.
  ULINE.

AT USER-COMMAND.
  CASE sy-ucomm.
    WHEN 'READ'.
      SET PF-STATUS 'CHECK' EXCLUDING 'READ'.
      box = space.
      DO lines TIMES.
        READ LINE sy-index FIELD VALUE box.
        IF box = 'X'.
          WRITE: / 'Line', num, 'was selected'.
          box = space.
          MODIFY LINE sy-index
                      FIELD VALUE  box
                      FIELD FORMAT box INPUT OFF
                                   num COLOR 6 INVERSE ON.
        ENDIF.
      ENDDO.
  ENDCASE.

Dieses Programm erzeugt eine Grundliste mit dem Status CHECK, in dem der Funktionscode READ (Text Read Lines) die Taste F5 und eine Drucktaste belegt. Der Benutzer kann Ankreuzfelder markieren und danach Read Lines wählen.

Beim Ereignis AT USER-COMMAND werden die Zeilen der Liste über READ LINE gelesen. Angekreuzte Zeilen werden auf einer Verzweigungsliste weiterverarbeitet. Für die Rückkehr zur Grundliste werden in den angekreuzten Zeilen die Ankreuzfelder über MODIFY LINE geleert und mit dem Format INPUT OFF versehen. Zusätzlich wird das Format des Felds NUM geändert.

Der Benutzer kann jetzt nur noch die nicht geänderten Zeilen auswählen.

Ende des Inhaltsbereichs