Ansicht
Dokumentation
RS_INT_SELOPT_RESTRICT - Interne Verwendung: RESTRICTIONS bei Freien Abgrenzungen
ROGBILLS - Synchronize billing plans Fill RESBD Structure from EBP Component StructureDiese Dokumentation steht unter dem Copyright der SAP AG.
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.
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.
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.
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.
* 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
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 fUr 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_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 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
PROGRAMRESTRICTION
Ausnahmen
EMPTY_OPTION_LISTINVALID_KIND
INVALID_SIGN
REPEATED_KIND_A
SELOPT_WITHOUT_OPTIONS
SELOPT_WITHOUT_SIGNS
Funktionsgruppe
SLDBROGBILLS - Synchronize billing plans General Material Data
Diese Dokumentation steht unter dem Copyright der SAP AG.
Length: 15651 Date: 20240523 Time: 112418 sap01-206 ( 211 ms )