Ansicht
Dokumentation

SELECT_OPTIONS_RESTRICT - Vereinfachung der Handhabung von SELECT-OPTIONS auf dem Selektionsbild

SELECT_OPTIONS_RESTRICT - Vereinfachung der Handhabung von SELECT-OPTIONS auf dem Selektionsbild

General Material Data   General Data in Customer Master  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

Funktionalität

Vereinfachung der Behandlung von SELECT-OPTIONS auf den Selektionsbildern durch Einschränkung der möglichen Selektionsoptionen bzw. Vorzeichen.

Durch Aufruf dieses Funktionsbausteins wird erreicht, daß für ausgewählte Selektionskriterien die Menge der zur Verfügung stehenden Selektionsoptionen eingeschränkt wird. Auch kann die Möglichkeit, Abgrenzungen von der Selektion auszuschließen (SIGN 'E'), abgeschaltet werden.

Die hierdurch festgelegte Menge von Optionen (und Vorzeichen) kann für das Bild 'Mehrfachselektion' erweitert werden.

Für jedes Programm, das im Laufe einer Transaktion Selektionsbilder sendet, kann maximal ein Aufruf erfolgen (bei mehreren Aufrufen für ein Programm wird die Ausnahme REPEATED ausgelöst). Es ist also nicht möglich, für ein Selektionskriterium, das auf zwei Selektionsbildern eines Programms vorkommt, verschiedene Restriktionen festzusetzen. Der Aufruf kann vor dem Senden des ersten Selektionsbildes des Programms (auch vor dem Laden des Programms) erfolgen. Er muß spätestens bei PBO des ersten Sendens eines Selektionsbildes erfolgen (sonst erfolgt die Ausnahme TOO_LATE).

Für einen SUBMIT ('Standard'-Selektionsbild 1000) bedeutet dies, daß der Funktionsbaustein vernünftigerweise bei INITIALIZATION aufgerufen wird. In diesem Fall wird der Report i.a. über eine logische Datenbank ablaufen. Sowohl die logische Datenbank als auch der Report können Restriktionen definieren (sie geben sich durch den Wert des Parameters DB zu erkennen). Während die logische Datenbank dies nur für ihre eigenen (datenbankspezifischen) Selektionskriterien kann, kann der Report die datenbank- und reportspezifischen Selektionskriterien einschränken. Für die datenbankspezifischen Selektionskriterien werden dann nur noch die von beiden Aufrufen erlaubten Vorzeichen und Optionen zugelassen.

Der Aufruf durch die logische Datenbank muß ebenfalls spätestens bei PBO des ersten Selektionsbildes des Reports (bei SUBMIT: Dynpro 1000) erfolgen: dies geschieht vernünftigerweise aus der Routine INIT heraus, die sowohl bei SUBMIT als auch bei freien Aufrufen von Selektionsbildern des Reports (CALL SELECTION-SCREEN) prozessiert wird. Auch von der logischen Datenbank wird nur ein Aufruf akzeptiert.

Im einzelnen ist im Parameter RESTRICTION (vom Typ SSCR_RESTRICT, definiert im Typepool SSCR) folgendes zu übergeben:

Komponente OPT_LIST_TAB:
Dies ist eine Tabelle von Optionenlisten.
Pro Zeile enthält sie ein Feld NAME (10-stellig) mit einem
frei wählbaren Namen für eine Liste von erlaubten Optionen sowie
ein Feld OPTIONS (Struktur RSOPTIONS) mit einem einstelligen
Characterfeld (z.B. EQ, BT, ...) für jede der 10 möglichen
Optionen. Die angekreuzten Optionen gelten als erlaubt.

Komponente ASS_TAB:
Dies ist eine Zuordnungstabelle von Selektionsbildobjekten zu
Optionenlisten und erlaubten Vorzeichen.
Pro Zeile sind zu spezifizieren:
KIND: 'A': die Restriktionen sollen für alle SELECT-OPTIONS gelten.
Beim Aufruf durch die logische Datenbank sind nur
die datenbankspezifischen SELECT-OPTIONS betroffen,
beim Aufruf durch ein anderes Programm alle.
'B': Block auf dem Selektionsbild. Die Restriktionen gelten
für alle SELECT-OPTIONS innerhalb des (im Feld NAME)
genannten Selektionsbildblocks (bei Aufruf durch die
logische Datenbank nur für datenbankspezifische Blöcke),
auch für die SELECT-OPTIONS in Blöcken innerhalb des
genannten Blocks.
'S': die Restriktionen gelten für die (im Feld NAME)
genannte einzelne SELECT-OPTION (bei Aufruf durch die
logische Datenbank nur für datenbankspezifische
SELECT-OPTIONS).
NAME: Bei KIND = 'B' oder 'S': Name des Objekts,
bei KIND = 'A': leer
SG_MAIN: '*': keine Einschränkung des Vorzeichens auf dem
Hauptselektionsbild.
'I': nur Vorzeichen 'I' auf dem Hauptselektionsbild
erlaubt.
SG_ADDY: '*': keine Einschränkung des Vorzeichens auf dem
Bild 'Mehrfachselektion'.
' ': dieselbe Einschränkung des Vorzeichens auf dem
Bild 'Mehrfachselektion' wie auf dem
Hauptselektionsbild.
'N': Keine 'Mehrfachselektion' erlaubt.
OP_MAIN: Name der Optionenliste (aus RESTRICTION-OPT_LIST_TAB)
für das Hauptselektionsbild.
OP_ADDY: Name der Optionenliste (aus RESTRICTION-OPT_LIST_TAB)
für das Bild 'Mehrfachselektion'.
Hierbei ist auf dem Bild 'Mehrfachselektion' immer
mindestens so viel erlaubt wie auf dem
Hauptselektionsbild, d.h. bei 'Mehrfachselektion' zieht
die Vereinigung der Optionenlisten OP_MAIN und OP_ADDY.

Die Restriktionen können also 'von außen nach innen' spezifiziert werden: die mit KIND = 'A' definierten Restriktionen werden für einen Block (KIND = 'B') überschrieben und damit außer Kraft gesetzt. Für innerhalb dieses Blocks geschachtelte Blöcke können wiederum durch eigene 'B'-Zeilen andere Restriktionen aktiviert werden. Schließlich kann jede einzelne SELECT-OPTION (ob innerhalb eines Blocks oder nicht) gezielt mit Restriktionen versorgt werden.

Wirkung zur Laufzeit

Auf den Selektionsbildern werden nur noch die erlaubten Selektionsoptionen und ggfls. nur das Vorzeichen 'I' zugelassen. Sind z.B. die Optionen 'BT' (Intervall) und 'NB' (Intervall ausschließen) beide nicht in der Optionenliste der SELECT-OPTION enthalten, so wird das HIGH-Feld deaktiviert.

Analog werden auf dem Bild 'Mehrfachselektion' nur die dort erlaubten Optionen und Vorzeichen angeboten. Hat das Feld 'SG_ADDY' den Wert 'N', d.h. soll keine 'Mehrfachselektion' erlaubt sein, so wird die Pfeiltaste zur Anwahl der 'Mehrfachselektion' ausgeblendet. Dies entspricht dem statischen Zusatz 'NO-EXTENSION' beim SELECT-OPTIONS-Statement. Ist außerdem auf dem 'Hauptselektionsbild' keine Intervalleingabe zugelassen (d.h. weder 'BT' noch 'NB' gehört zu den erlaubten Optionen), so werden außerdem das 'HIGH'-Feld und der Text 'bis' ausgeblendet.

Da bei 'Mehrfachselektion' i.a. mehr erlaubt ist als auf dem 'Hauptselektionsbild', kann es vorkommen, daß via 'Mehrfachselektion' eine Abgrenzungszeile erfaßt wird, die auf dem 'Hauptselektionsbild' nicht erlaubt ist. In dem Fall wird auf dem 'Hauptselektionsbild' die erste zulässige Zeile angezeigt. Falls keine Zeile auf dem 'Hauptselektionsbild' erlaubt ist, bleiben die Eingabefelder leer, und der 'Mehrfachselektionspfeil' am Ende der Zeile erscheint grün zum Zeichen, daß überhaupt Zeilen vorhanden sind.

Sind (z.B. über veraltete Varianten) Abgrenzungszeilen vorhanden, die weder auf dem 'Hauptselektionsbild' noch auf dem Bild 'Mehrfachselektion' zulässig sind, so erfolgt ein Programmabbruch.

Beispiel

REPORT TESTREP.

* Inkludieren des Typepools SSCR
TYPE-POOLS SSCR.

* Definition des Objekts, das an den Parameter RESTRICTION übergeben
* wird.
DATA RESTRICT TYPE SSCR_RESTRICT.

* Hilfsobjekte zum Füllen von RESTRICT
DATA OPT_LIST TYPE SSCR_OPT_LIST.
DATA ASS TYPE SSCR_ASS.

* Definition der Selektionsbildobjekte
* Erster Block: 3 SELECT-OPTIONS
SELECTION-SCREEN BEGIN OF BLOCK BLOCK_0 WITH FRAME TITLE TEXT-BL0.
SELECT-OPTIONS SEL_0_0 FOR SY-TVAR0.
SELECT-OPTIONS SEL_0_1 FOR SY-TVAR1.
SELECT-OPTIONS SEL_0_2 FOR SY-TVAR2.
SELECT-OPTIONS SEL_0_3 FOR SY-TVAR3.
SELECTION-SCREEN END OF BLOCK BLOCK_0.

* Zweiter Block: 2 SELECT-OPTIONS
SELECTION-SCREEN BEGIN OF BLOCK BLOCK_1 WITH FRAME TITLE TEXT-BL1.
SELECT-OPTIONS SEL_1_0 FOR SY-SUBRC.
SELECT-OPTIONS SEL_1_1 FOR SY-REPID.
SELECTION-SCREEN END OF BLOCK BLOCK_1.

INITIALIZATION.

* Definition der Optionenlisten

* ALL: alle Optionen erlaubt
MOVE 'ALL' TO OPT_LIST-NAME.
MOVE 'X' TO: OPT_LIST-OPTIONS-BT,
OPT_LIST-OPTIONS-CP,
OPT_LIST-OPTIONS-EQ,
OPT_LIST-OPTIONS-GE,
OPT_LIST-OPTIONS-GT,
OPT_LIST-OPTIONS-LE,
OPT_LIST-OPTIONS-LT,
OPT_LIST-OPTIONS-NB,
OPT_LIST-OPTIONS-NE,
OPT_LIST-OPTIONS-NP.
APPEND OPT_LIST TO RESTRICT-OPT_LIST_TAB.

* NOPATTERN: CP und NP verboten
CLEAR OPT_LIST.
MOVE 'NOPATTERN' TO OPT_LIST-NAME.
MOVE 'X' TO: OPT_LIST-OPTIONS-BT,
OPT_LIST-OPTIONS-EQ,
OPT_LIST-OPTIONS-GE,
OPT_LIST-OPTIONS-GT,
OPT_LIST-OPTIONS-LE,
OPT_LIST-OPTIONS-LT,
OPT_LIST-OPTIONS-NB,
OPT_LIST-OPTIONS-NE.
APPEND OPT_LIST TO RESTRICT-OPT_LIST_TAB.

* NOINTERVLS: BT und NB verboten
CLEAR OPT_LIST.
MOVE 'NOINTERVLS' TO OPT_LIST-NAME.
MOVE 'X' TO: OPT_LIST-OPTIONS-CP,
OPT_LIST-OPTIONS-EQ,
OPT_LIST-OPTIONS-GE,
OPT_LIST-OPTIONS-GT,
OPT_LIST-OPTIONS-LE,
OPT_LIST-OPTIONS-LT,
OPT_LIST-OPTIONS-NE,
OPT_LIST-OPTIONS-NP.
APPEND OPT_LIST TO RESTRICT-OPT_LIST_TAB.

* EQ_AND_CP: nur EQ und CP erlaubt
CLEAR OPT_LIST.
MOVE 'EQ_AND_CP' TO OPT_LIST-NAME.
MOVE 'X' TO: OPT_LIST-OPTIONS-CP,
OPT_LIST-OPTIONS-EQ.
APPEND OPT_LIST TO RESTRICT-OPT_LIST_TAB.

* JUST_EQ: nur EQ erlaubt
CLEAR OPT_LIST.
MOVE 'JUST_EQ' TO OPT_LIST-NAME.
MOVE 'X' TO OPT_LIST-OPTIONS-EQ.
APPEND OPT_LIST TO RESTRICT-OPT_LIST_TAB.

* Zuordnung Selektionsbildobjekte --> Optionenliste und Vorzeichen

* KIND = 'A': gilt für alle SELECT-OPTIONS
MOVE: 'A' TO ASS-KIND,
'*' TO ASS-SG_MAIN,
'NOPATTERN' TO ASS-OP_MAIN,
'NOINTERVLS' TO ASS-OP_ADDY.
APPEND ASS TO RESTRICT-ASS_TAB.

* KIND = 'B': gilt für alle SELECT-OPTIONS in Block BLOCK_0,
* also für SEL_0_0, SEL_0_1, SEL_0_2, SEL_0_3
CLEAR ASS.
MOVE: 'B' TO ASS-KIND,
'BLOCK_0' TO ASS-NAME,
'I' TO ASS-SG_MAIN,
'*' TO ASS-SG_ADDY,
'NOINTERVLS' TO ASS-OP_MAIN.
APPEND ASS TO RESTRICT-ASS_TAB.

* KIND = 'S': gilt für die SELECT-OPTION SEL_0_2
CLEAR ASS.
MOVE: 'S' TO ASS-KIND,
'SEL_0_2' TO ASS-NAME,
'I' TO ASS-SG_MAIN,
'*' TO ASS-SG_ADDY,
'EQ_AND_CP' TO ASS-OP_MAIN,
'ALL' TO ASS-OP_ADDY.
APPEND ASS TO RESTRICT-ASS_TAB.

* KIND = 'S': gilt für die SELECT-OPTION SEL_0_3
CLEAR ASS.
MOVE: 'S' TO ASS-KIND,
'SEL_0_3' TO ASS-NAME,
'I' TO ASS-SG_MAIN,
'N' TO ASS-SG_ADDY,
'JUST_EQ' TO ASS-OP_MAIN.
APPEND ASS TO RESTRICT-ASS_TAB.

* Aufruf des Funktionsbausteins
CALL FUNCTION 'SELECT_OPTIONS_RESTRICT'
EXPORTING
RESTRICTION = RESTRICT
* DB = ' '
EXCEPTIONS
TOO_LATE = 1
REPEATED = 2
NOT_DURING_SUBMIT = 3
DB_CALL_AFTER_REPORT_CALL = 4
SELOPT_WITHOUT_OPTIONS = 5
SELOPT_WITHOUT_SIGNS = 6
INVALID_SIGN = 7
REPORT_CALL_AFTER_DB_ERROR = 8
EMPTY_OPTION_LIST = 9
INVALID_KIND = 10
REPEATED_KIND_A = 11
OTHERS = 12.

* Abfragen der Ausnahmen
IF SY-SUBRC NE 0.
...
ENDIF.

...

START-OF-SELECTION.

...

Für die SELECT-OPTION SEL_0_2 gilt also die explizite Zuordnung: auf dem Hauptselektionsbild sind nur die Optionen EQ und CP und das Vorzeichen I erlaubt, während auf dem Bild 'Mehrfachselektion' alle Optionen (Optionenliste 'ALL') und beide Vorzeichen (SG_ADDY = '*') erlaubt sind.

Für die SELECT-OPTION SEL_0_3 gilt ebenfalls die explizite Zuordnung: auf dem Hauptselektionsbild ist nur die Option EQ und das Vorzeichen I erlaubt, während 'Mehrfachselektion' überhaupt nicht zugelassen ist. Daher wird die Pfeiltaste zur Anwahl der 'Mehrfachselektion' ausgeblendet. Da auf dem Hauptbild keine Intervalle zugelassen sind, werden auch das 'HIGH'-Feld und der Text 'bis' ausgeblendet, d.h. die Select-Option erscheint ähnlich wie ein Parameter.

Für die beiden anderen SELECT-OPTIONS von BLOCK_0, also SEL_0_0 und SEL_0_1, gilt das für Block BLOCK_0 spezifizierte: nur Vorzeichen I und keine Intervalle auf dem Hauptselektionsbild, beide Vorzeichen, aber weiterhin keine Intervalle, auf dem Bild 'Mehrfachselektion'.

Für alle SELECT-OPTIONS außerhalb von BLOCK_0, also SEL_1_0 und SEL_1_1, gelten die für KIND = 'A' spezifizierten Restriktionen, d.h. auf dem Hauptselektionsbild keine Muster, aber beide Vorzeichen, auf dem Bild 'Mehrfachselektion' alle Optionen (= Vereinigung von NOPATTERN und NOINTERVLS) und weiterhin beide Vorzeichen.

Hinweise

Dieser Funktionsbaustein solte mit großer Vorsicht angewandt werden, da z.B. in Kombination mit den Zusätzen 'NO INTERVALS' bzw. 'NO-EXTENSION' inkonsistente Situationen entstehen können.

Auch können dadurch Probleme auftreten, daß das HIGH-Feld einer SELECT-OPTION zur Laufzeit ausgeblendet wird: damit sind keine Intervalleingaben mehr möglich. Sind aber andererseits über diesen Funktionsbaustein für diese SELECT-OPTION nur Intervalleingaben erlaubt (nur Optionen 'BT' und 'NB'), so ist überhaupt keine Eingabe mehr zulässig. In diesem Fall wird auch das LOW-Feld deaktiviert.

Desweiteren ist beim Aufruf durch den Report zu beachten, daß die logische Datenbank bereits Restriktionen für ihre SELECT-OPTIONS definiert haben könnte. Da der Durchschnitt aus den durch die logische Datenbank und den Report erlaubten Optionen gebildet wird, kann dies zur Ausnahme 'SELOPT_WITHOUT_OPTIONS' führen.

Verhalten bei Ausnahmen

Tritt beim Aufruf durch die logische Datenbank eine Ausnahme auf, so werden die datenbankspezifischen Restriktionen ignoriert, die reportspezifischen (falls vorhanden) bleiben erhalten.

Tritt beim Aufruf durch den Report eine Ausnahme auf, so bleiben die datenbankspezifischen Restriktionen (falls vorhanden) erhalten, die reportspezifischen werden ignoriert.

In jedem Fall Führt ein Aufruf, der mit einer Ausnahme endet, nie zur Aktivierung von Restriktionen.





Parameter

DB
PROGRAM
RESTRICTION

Ausnahmen

EMPTY_OPTION_LIST
INVALID_KIND
INVALID_SIGN
REPEATED
REPEATED_KIND_A
SELOPT_WITHOUT_OPTIONS
SELOPT_WITHOUT_SIGNS
TOO_LATE

Funktionsgruppe

SLDB

BAL_S_LOG - Application Log: Log header data   Addresses (Business Address Services)  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 17609 Date: 20240523 Time: 095617     sap01-206 ( 218 ms )