Dieser Abschnitt beschreibt die spezielle Funktion Feldauswahl (Transaktion SFAW im Verbund mit Funktionsbausteinen), welche die dynamische Änderung der Attribute von Bildschirmbildern unterstützt.
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.
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.
Um die Feldauswahl aufzurufen, wählt man Werkzeuge → ABAP Workbench →Entwicklung → weitere Werkzeuge →Feldauswahl. Die Pflege erfolgt pro Programm und Bildgruppe.
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:
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.
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.
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.
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.
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.
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.
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.
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.
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.
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:
Nach der Auswahl von Ändern erscheint folgendes Bild:
Bei der Eingabe von 'AA' statt 'LH' für die Fluggesellschaft erscheint dagegen:
Bei der Eingabe von 'LH' ist das Feld SPFLI-AIRPFROM unsichtbar. Bei der Eingabe von 'AA' ist es als Startflughafen sichtbar.
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.
Betrachten wir folgende Felder:
·
Beeinflussende Felder: F4711, F4712
Modifizierbares Feld: M4711
Folgende Fälle sind nur über einen Umweg zu realisieren:
·
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.
·
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:
·
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 = ' ' |
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.
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.