Show TOC Anfang des Inhaltsbereichs

Die Funktion Feldauswahl  Dokument im Navigationsbaum lokalisieren

Dieser Abschnitt beschreibt die spezielle Funktion Feldauswahl (Transaktion SFAW im Verbund mit Funktionsbausteinen), welche die dynamische Änderung der Attribute von Bildschirmbildern unterstützt.

Feldauswahl - Überblick

Mit der Funktion Feldauswahl können die Attribute von Bildschirmfeldern zur Laufzeit dynamisch geändert werden. Diese Sonderfunktion sollte jedoch nur genutzt werden, wenn aus anwendungstechnischen Gründen oft unterschiedliche Feldattribute für ein und dasselbe Bildschirmbild benötigt werden. In diesem Fall gewährleistet die Funktion Feldauswahl eine einheitliche Pflege und einheitliche Regeln und macht so die Änderung von Attributen übersichtlicher.

Grundsätzlich gilt:

·        Alle an der Feldauswahl beteiligten Felder werden in zentralen Feldauswahltabellen gesammelt und über die Pflegetransaktion Feldauswahl gepflegt.

·        Die Pflege erfolgt pro ABAP Programm und Bildgruppe (siehe unten).

·        Auf Dynpros der Bildgruppe "blank" ('_') läuft keine dynamische Feldauswahl ab.

·        Für die zentrale Feldauswahl ist die Modifikationsgruppe SCREEN-GROUP1 reserviert, die nicht gleichzeitig anderweitig belegt werden kann.

·        Wird mit feststehenden Sonderregeln der Feldauswahl gearbeitet, deren Änderung einer Programmänderung gleichkommt, sollte diese Änderung nicht mit der Pflegetransaktion sondern direkt im Programm erfolgen.

Mit der Feldauswahl können zur Laufzeit die folgenden Attribute ein- bzw. ausgeschaltet werden:

·        Eingabe

·        Ausgabe

·        Mussfeld

·        Aktiv

·        Hell

·        Unsichtbar

Über die Feldauswahl bestimmt man die Bedingungen und die Art der Änderungen. Zum Ereignis PBO ruft man einen Funktionsbaustein auf, der die Bedingungen überprüft und ggf. die Attribute ändert.

Bei der Feldauswahl unterscheidet man beeinflussende und modifizierbare Felder. Modifizierbare Felder müssen selbstverständlich Dynprofelder sein. Alle Felder sollten sich auf das ABAP Dictionary beziehen; die entsprechenden Schnittstellenarbeitsbereiche sollten im ABAP-Programm mit TABLESdeklariert werden. Zur Laufzeit werden die Feldinhalte der beeinflussenden Felder von einem Funktionsbaustein ausgewertet und die Attribute der modifizierbaren Felder entsprechend gesetzt.

Zusammenfassung von Bildschirmbildern zu Bildgruppen

Die Pflege der Feldauswahl für ein Programm erfolgt nicht für jedes Bildschirmbild einzeln. Vielmehr können logisch zusammengehörige Bildschirmbilder zu einer Bildgruppe zusammengefaßt werden. Dadurch wird der Pflegeaufwand reduziert. Um ein Bild einer Bildgruppe zuzuordnen, trägt man im Screen Painter in den Dynproattibuten des Bildes einen Namen im Feld Bildgruppe ein.

Aufruf der Feldauswahl

Um die Feldauswahl aufzurufen, wählt man Werkzeuge ABAP Workbench Entwicklung weitere Werkzeuge Feldauswahl. Die Pflege erfolgt pro Programm und Bildgruppe.

Diese Grafik wird im zugehörigen Text erklärt

Als erstes müssen die Dictionary-Namen der an der Feldauswahl beteiligten Felder bekanntgeben werden. Hierfür wählt man Zuordnung der Tabellen zur Bildgruppe und Ändern und gibt die Namen ein, z.B:

Diese Grafik wird im zugehörigen Text erklärt

Nach dem Speichern wählt man Beeinflussende Felder, um alle gewünschten beeinflussenden Felder unter der optionalen Angabe einer Nicht-Bedingung, eines Standardwerts und eines Felds Cust in eine Liste einzutragen, z.B.

Diese Grafik wird im zugehörigen Text erklärt

Die Nicht-Bedingung ist als Vorauswahl zu verstehen: Erfüllt ein beeinflussendes Feld die Nicht-Bedingung, dann ist es für die folgende Bildmodifikation nicht relevant. Die Benutzung der Nichtbedingung kann zu Performanceverbesserungen führen.

Beispiel

Beeinflussendes Feld: SPFLI-CARRID 

Nicht-Bedingung: NE LH

SPFLI-CARRID ist nur dann für die Feldauswahl relevant, wenn sein Inhalt zur Laufzeit ungleich LH ist.

Der Standardwert für die Feldmodifikation wird zur Laufzeit verwendet, falls das System den aktuellen Wert des beeinflussenden Feldes nicht in der Liste der gepflegten Werte findet. Dazu muss für den Standardwert selbst eine Beeinflussung definiert werden. Mit dieser Option können alle die Ausprägungen eines beeinflussenden Feldes, die denselben Einfluss ausüben, mit einem einzigen Eintrag gepflegt werden.

Im Feld Cust kann man entscheiden, ob das entsprechende Feld in der sog. Kundenfeldauswahl benutzt werden kann. Diese Feldauswahlmöglichkeit setzt auf der voreingestellten SAP-Feldauswahl auf und ermöglicht dem Kunden freie Einstellungen der Bildschirmattribute innerhalb des von der Anwendungsentwicklung vorgegebenen Rahmens. Hierzu werden in verschiedenen Anwendungsbereichen spezielle Customizing-Transaktionen angeboten (als Parametertransaktionen auf die Transaktion SFAC; man vergleiche hierzu die Dokumentation zum Funktionsbaustein FIELD_SELECTION_CUSTOMIZE)

Dann müssen alle modifizierbaren Felder über die Auswahl Modifizierte Felder in eine Liste eingetragen werden, z.B.

Diese Grafik wird im zugehörigen Text erklärt

Im Feld Cust kann wieder entschieden werden, ob in speziellen Customizing-Transaktionen diese modifizierbaren Felder benutzt werden dürfen. Ist Cust angekreuzt, dürfen auch Kunden das Feld modifizieren.

Alle beeinflussenden und modifizierbaren Felder bekommen eine interne Nummer, die pro Programm eindeutig ist. Die Nummer wird automatisch beim Generieren in die Modifikationsgruppe SCREEN-GROUP1 der entsprechenden Dynpros gestellt und darf im Screen Painter nicht geändert werden. Durch die Nummernvergabe stellt das System eine Eins-zu-Eins-Beziehung zwischen Feldname und der Modifikationsgruppe SCREEN-GROUP1 her.

Schließlich erstellt man Verknüpfungen zwischen beeinflussenden und modifizierbaren Feldern aus den beiden Listen, indem man angibt, bei welchem Feldinhalt eines beeinflussenden Feldes welches modifizierbare Feld wie beeinflusst wird.

Hierfür können in beiden Listen durch Auswählen oder Doppelklick mit der Maus Felder ausgewählt werden. Für beeinflussende Felder erscheint daraufhin die Liste der modifizierbaren Felder und umgekehrt. In dieser Liste wählt man dann die gewünschte Verknüpfung aus. Daraufhin erscheint eine Liste, in die man die Bedingungen eintragen kann, z.B.

Diese Grafik wird im zugehörigen Text erklärt

Obige Eintragung bewirkt, dass das Feld SPFLI-AIRPFROM auf den Dynpros unsichtbar wird, in deren PBO die entsprechenden Feldauswahl-Funktionsbausteine aufgerufen werden und falls SPFLI-CARRID dann den Wert 'LH' hat.

Kombinationsregeln für einzelne Attribute

Wenn mehrere beeinflussende Felder das gleiche modifizierbare Feld beeinflussen, muss eine Kombinationsregel festlegen, wie diese Beeinflussungen zu verknüpfen sind. Wie ein einzelnes Attribut eines Feldes gesetzt wird, wenn es durch verschiedene Einflüsse ein- und/oder ausgeschaltet wird, kann den folgenden Tabellen entnommen werden. Das Zusammenwirken mehrerer Attribute untereinander wird im Dynproprozessor geregelt.

Eingabe

 

 

 

 

 

Feld 1

 

 

 

‘_’

'X'

Feld 2

‘_’

‘_’

‘_’

 

'X'

‘_’

'X'

 

Ausgabe

 

 

 

 

 

Feld 1

 

 

 

‘_’

'X'

Feld 2

‘_’

‘_’

‘_’

 

'X'

‘_’

'X'

 

Aktiv

 

 

 

 

 

Feld 1

 

 

 

‘_’

'X'

Feld 2

‘_’

‘_’

‘_’

 

'X'

‘_’

'X'

 

Obligatorisch

 

 

 

 

 

Feld 1

 

 

 

‘_’

'X'

Feld 2

‘_’

‘_’

'X'

 

'X'

'X'

'X'

 

Hell

 

 

 

 

 

Feld 1

 

 

 

‘_’

'X'

Feld 2

‘_’

‘_’

'X'

 

'X'

'X'

'X'

 

Unsichtbar

 

 

 

 

 

Feld 1

 

 

 

‘_’

'X'

Feld 2

‘_’

‘_’

'X'

 

'X'

'X'

'X'

 

Bedeutung der Zeichen:
_ = ausgeschaltet (off), X = eingeschaltet (on)

Wenn Feld 1 ein Dynprofeld unsichtbar macht (X), kann Feld 2 daran nichts mehr ändern.

Statische Attribute des Screen-Painter

Bei der Bildmodifikation werden nicht nur die Einträge in der Feldauswahl, sondern auch die Einträge im Screen Painter berücksichtigt, d.h. das Ergebnis der Verknüpfungen der Feldauswahl wird nach denselben Kombinationsregeln mit den Feldattributen im Dynpro verknüpft, wie einzelne Attribute.

Um den vollen dynamischen Modifikationsumfang zu gewährleisten, ist es sinnvoll, im Screen Painter die statische Attribute wie folgt vorzubelegen:

Eingabe = 'X'
Ausgabe = 'X'
Obligatorisch = '_'
Unsichtbar = '_'
Hell = '_'.

Umgekehrt können die folgendermaßen im Screen Painter statisch festgelegten Werte durch keine Feldauswahl mehr geändert werden:

Eingabe = '_'
Ausgabe = '_'
Obligatorisch = 'X'
Unsichtbar = 'X'
Hell = 'X'

Außerdem gilt folgendes: Wird in der Feldauswahl für ein beeinflussendes Feld bei einem Wert die nachfolgende Kombination von Beeinflussungen eingetragen, dann bedeutet diese Kombination keine wirkliche Beeinflussung, da gemäß den Kombinationsregeln die von einem weiteren beeinflussenden Feld (oder dem Dynpro) vorgegebenen Anzeigeattribute nicht geändert werden.

Eingabe = 'X'
Ausgabe = 'X'
Aktiv = 'X'
Obligatorisch = '_'
Hell = '_'
Unsichtbar = '_'

Beim erneuten Einstieg in die Feldauswahl wird eine solche unwirksame Beeinflussung nicht wieder angezeigt. Einzige Ausnahme: Ist für das beeinflussende Feld ein Standardwert definiert, kann die Anzeige und Pflege einer solchen Beeinflussung sinnvoll sein.

Generieren der Feldauswahl

Das Generieren in der Feldauswahl ist dann notwendig, wenn sich an der Liste der modifizierbaren Felder etwas geändert hat. Dabei werden die fortlaufend vergebenen Nummern für die modifizierbaren Felder in die Modifikationsgruppe SCREEN-GROUP1 in den Dynpros des betreffenden ABAP-Programms generiert.

Hierfür wählt man Generieren in der Transaktion SFAW.

Funktionsbausteine zur Feldauswahl

Um die Feldauswahl für ein Dynpro wirksam zu machen, ruft man zum Ereignis PBO entweder den Funktionsbaustein FIELD_SELECTION_MODIFY_ALL oder den Funktionsbaustein FIELD_SELECTION_MODIFY_SINGLE auf. Beide Funktionsbausteine ermitteln die Inhalte der beeinflussenden Felder, wenden ggf. die Kombinationsregel an und führen die Bildmodifikation durch. FIELD_SELECTION_MODIFY_ALL führt die Anweisung LOOP AT SCREEN selbst durch. Bei FIELD_SELECTION_MODIFY_SINGLE hingegen muss LOOP AT SCREEN im Anwendungsprogramm selbst programmiert und der Funktionsbaustein innerhalb dieser Schleife aufgerufen werden. Dabei kann man innerhalb der Schleife eigene, zusätzliche Bildmodifikationen durchführen.

Beispiel für Aufrufe der Funktionsbausteine zum Ereignis PBO:

...

       1.       

CALL FUNCTION 'FIELD_SELECTION_MODIFY_ALL'
     EXPORTING modulpool    = modulpool
               dynprogruppe = dyngrp.

       2.       

LOOPAT SCREEN.
  IF screen_group1 NE space AND
    screen-group1 NE '000'.
    CALL FUNCTION 'FIELD_SELECTION_MODIFY_SINGLE'
         EXPORTING modulpool    = modulpool
                   dynprogruppe = dyngrp.
* eigene Sonderregeln
    MODIFY SCREEN.
  ENDIF.
ENDLOOP.

       3.       

wie 1, nur zusätzlich ein eigene Schleife LOOP AT SCREEN für Sonderregeln

Im Einzelfall ist abzuwägen, welche der Möglichkeiten 2 oder 3 günstiger in der Performance ist.

Die Parameter Modulpool und Bildgruppe bestimmen die Feldauswahl; für sie müssen Beeinflussungen gepflegt sein.

Der Parameter Modulpool legt zudem fest, in welchem im Hauptspeicher geladenen ABAP-Programm die aktuellen Werte der beeinflussenden Felder gesucht werden.

Bein Aufruf der Funktionsbausteine, dürfen die Systemfelder sy-repid und sy-dyngrnicht direkt als Aktualparameter verwendet werden, sondern müssen an geeigneter Stelle anderen Feldern zugewiesen werden z.B.

modulpool = sy-repid.
dyngrp    = sy-dyngr

Als Sonderfall ist denkbar, dass beim Funktionsbausteinaufruf der Parameter Modulpool vom aktuellen sy-repid abweicht.

Wird der Parameter Bildgruppe leer übergeben, so nimmt das System den aktuellen Inhalt von sy-dyngr. Für den Parameter Modulpool ist dies nicht möglich, denn der Wert '_' (blank) verhindert jegliche Feldmodifikation.

Beispiel

Betrachten wir ein ABAP-Programm.

Das Dynpro des zweiten Bildes enthalte folgenden Modulaufruf im PBO:

PROCESS BEFORE OUTPUT.

...

  MODULE MODIFY_SCREEN.

Das Modul MODIFY_SCREEN enthalte den folgenden Funktionsaufruf

MODULE MODIFY_SCREEN OUTPUT.

   CALL FUNCTION 'FIELD_SELECTION_MODIFY_ALL'
        EXPORTING
             dynprogruppe =  'BILD'
             modulpool    =  'SAPMTXXX'
        EXCEPTIONS
             OTHERS       = 1.

Für die Dynprogruppe BILD und das zugehörige ABAP-Programm seien die Beeinflussungen in der Transaktion SFAW wie in obigen Abbildungen gepflegt.

Nach dem Aufruf der Transaktion erfolge folgende Eingabe:

Diese Grafik wird im zugehörigen Text erklärt

Nach der Auswahl von Ändern erscheint folgendes Bild:

Diese Grafik wird im zugehörigen Text erklärt

Bei der Eingabe von 'AA' statt 'LH' für die Fluggesellschaft erscheint dagegen:

Diese Grafik wird im zugehörigen Text erklärt

Bei der Eingabe von 'LH' ist das Feld SPFLI-AIRPFROM unsichtbar. Bei der Eingabe von 'AA' ist es als Startflughafen sichtbar.

Verknüpfungen von beeinflussenden Feldern

Jedes beeinflussende Feld beeinflusst ein modifizierbares Feld unabhängig von anderen Feldern. Eine Verknüpfung von beeinflussenden Feldern ist in manchen Fällen erwünscht und dann nur über die Definition von Hilfsfeldern möglich, die im Anwendungsprogramm vor dem Aufruf des Funktionsbausteins gesetzt werden müssen.

Diese Beschränkung dient der Übersichtlichkeit der Feldauswahl.

Beispiele für Verknüpfungen

Betrachten wir folgende Felder:

·        Beeinflussende Felder: F4711, F4712
Modifizierbares Feld: M4711

Folgende Fälle sind nur über einen Umweg zu realisieren:

ODER-Bedingung und "Eingabebereit"

·        Wenn F4711 = 'A' OR F4712 = 'B',
dann M4711 eingabebereit.

Lösung:

·        H4711 als beeinflussendes Feld in SFAW definieren;
folgende Bedingung in SFAW definieren:
wenn H4711 = 'AB'
dann M4711 Input an (d.h. Eingabe = 'X')

Im Anwendungsprogramm muss vor dem Aufruf des Funktionsbausteins folgendes programmiert werden:

IF f4711 = 'A' OR f4712 = 'B'.
  
h4711 = 'AB'.
ENDIF.

UND-Bedingung und "Obligatorisch"

·        Wenn F4711 = 'A' UND F4712 = 'B',
dann M4711 obligatorisch und nur dann.

Lösung:

·        Pflege in der Feldauswahl:
Wenn H4711 = 'AB',
dann M4711 Mussfeld
(H4711 = 'AB' nur genau mit obiger UND-Bedingung)

Im Anwendungsprogramm programmiert man:

IF f4711 = 'A' AND f4712 = 'B'
   h4711 = 'AB'
ELSE.
   h4711 =....
ENDIF.

Folgende Fälle kann man dagegen direkt abbilden:

UND-Bedingung und "Eingabebereit"

·        Wenn F4711 = 'A' UND F4712 = 'B',
dann M4711 eingabebereit.
also wenn: F4711 <> 'A' ODER F4712 <> 'B', dann ist M4711 nicht
eingabebereit.

Lösung:

Dynpro: M4711 eingabebereit

 

 

 

 

 

 

Feldauswahl:

 

 

 

 

 

 

Beeinflussendes Feld

F4711

Wert 'A'

Input = 'X'

 

 

 

 

 

 

 

 

Wert 'A1'

Input = ' '

 

 

 

 

 

Wert 'AX'

Input = ' '

Beeinflussendes Feld

F4712

Wert 'B'

Input = 'X'

 

 

 

 

 

 

 

 

Wert 'B1'

Input = ' '

 

 

 

 

 

Wert 'BX'

Input = ' '

ODER-Bedingung und "Obligatorisch"

Wenn F4711 = 'A' ODER F4712 = 'B',
dann M4711 Mussfeld.

Lösung:

Dynpro: Obligatorisch ausgeschaltet

 

 

 

 

Beeinflussendes Feld

F4711

Wert 'A',

 

 

 

 

 

 

obligatorisch = 'X'

Beeinflussendes Feld

F4712

Wert 'B',

 

 

 

 

 

 

obligatorisch = 'X'

Die Möglichkeit, eine Nicht-Bedingung bei einem beeinflussenden Feld zu definieren, ergibt weitere Varianten der Feldauswahldefinition.

Berechtigung für die Feldauswahl

Zur Funktion Feldauswahl gehört das Berechtigungsobjekt Zentrale Feldauswahl (S-FIELDSEL). Das Berechtigungsobjekt besteht aus Aktivität und Programmberechtigungsgruppe. Letztere wird den Programmberechtigungen (ABAP Editor) entnommen.

Als Aktivitäten sind möglich:

'02' = Ändern
'03' = Anzeigen
'14' = Generieren Feldauswahlinformation in die Dynpros
'15' = Zuordnung an der Feldauswahl beteiligter Tabellen

Die Änderung einer Feldauswahl entspricht einer Modifikation eines Programmablaufs. Darüber hinaus gibt es in manchen Anwendungen (Beispiel: Arbeitsplätze, vgl. Releaseinfo: Arbeitsplätze: Neue Funktionen zu 3.0A) im Rahmen des Customizings gewisse Möglichkeiten, die Bildschirmattribute eines Feldes kundenspezifisch abzuändern. Diese Änderungen gelten nicht als Modifikationen.

 

Ende des Inhaltsbereichs