Ansicht
Dokumentation

RSISW_DTEL_INPUT_CHECK - DD: Simulation der Eingabeprüfungen des DYNP für ein ABAP Dictionary Feld

RSISW_DTEL_INPUT_CHECK - DD: Simulation der Eingabeprüfungen des DYNP für ein ABAP Dictionary Feld

RFUMSV00 - Advance Return for Tax on Sales/Purchases   ABAP Short Reference  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

Funktionalität

Mit Hilfe dieses Bausteins können Sie die auf einer Eingabemaske für ein Feld, durchgeführten Eingabeprüfungen simulieren. Die zu prüfende Eingabe ist dabei im IMPORT-Parameter VALUE zu übergeben. Hält dieser Wert der Eingabeprüfung nicht stand, so ist in den EXPORT-Parametern MSGID, MSGTY, MSGNO, MSGV1, MSGV2, MSGV3, MSGV4 die Nachricht spezifiziert, die auf der Eingabemaske bei Eingabe des angegebenen Wertes erscheinen würde. Die Eingabe hält der Prüfung also stand, wenn der Parameter MSGID initial ist.

Über den IMPORT-Parameter VALUE_IS_EXTERNAL kann festgelegt werden, ob der Inhalt von VALUE als externe oder als interne Darstellung des Wertes angesehen werden soll. Im ersten Fall muß der VALUE zugeordnete Aktualparameter vom Typ C sein, im zweiten Fall muß er den Typ des zu behandelnden Feldes besitzen. Besitzt der Parameter einen anderen Typ, so ist das Ergebnis des Bausteins undefiniert.

Die Spezifikation des zu behandelnden Feldes muß in jedem Fall durch einen Bezug zu einem Feld des ABAP Dictionary erfolgen. Zur Definition dieses Bezuges stehen Ihnen mehrere Mechanismen zur Verfügung:

Zum Einen kann das zu behandelnde Feld durch Angabe einer Referenz auf das ABAP Dictionary beschrieben werden. Hierzu muss der IMPORT-Parameter TABNAME einen nicht initialen Wert besitzen. Ist dann der IMPORT-Parameter FIELDNAME ebenfalls nicht initial, so wird das hierdurch beschriebene Feld des ABAP Dictionary als Referenz verwendet. Ist FIELDNAME dagegen initial, so wird das durch TABNAME gegebene Datenelement als Referenz verwendet.
Ist das so referierte Objekt im ABAP Dictionary nicht definiert, so wird die Ausnahme NO_DDIC_FIELD ausgelöst.

Ist der IMPORT-Parameter TABNAME dagegen initial, so wird die Beschreibung des zu behandelnden Feldes direkt aus dem den Funktionsbaustein rufenden Programm genommen. Ist der IMPORT-Parameter FIELDNAME ebenfalls initial, so wird die Definition des dem IMPORT-Parameter VALUE zugeordneten Aktualparameters als Referenz zu Grunde gelegt. Ist dieser Aktualparameter nicht mit Bezug auf das ABAP Dictionary angelegt worden, so wird die Ausnahme NO_DDIC_FIELD ausgelöst.

Ist dagegen der Parameter TABNAME initial, der Parameter FIELDNAME aber nicht, so muß im IMPORT-Parameter CALLING_PROGRAM der Name des den Funktionsbaustein rufenden Programms stehen. In diesem Programm muß dann das Bezugsfeld als globales Feld mit Bezug zum ABAP Dictionary definiert sein. Ist der Inhalt des IMPORT-Parameters STRUCNAME nicht initial, so muß eine Feldleiste des durch STRUCNAME gegebenen Namens existieren, das ein Feld des durch FIELDNAME gegebenen Namens besitzt. Diese Komponente wird dann als Bezugsfeld verwendet. Ist STRUCNAME dagegen initial, so muß ein Feld des durch FIELDNAME gegebenen Namens existieren, das als Bezugsfeld verwendet wird. Existiert das so spezifizierte Bezugsfeld nicht oder besitzt es keinen Bezug zum ABAP Dictionary, so wir die Ausnahme NO_DDIC_FIELD ausgelöst.

Die Eingabe wird von diesem Baustein den normalen Typprüfungen sowie gegebenenfalls den im ABAP Dictionary vorgegebenen Festwertprüfungen und Fremdschlüsselprüfungen unterzogen. Besitzt das referierte ABAP Dictionary Feld eine Prüftabelle, die (neben dem Mandantenfeld) mehr als ein Schlüsselfeld besitzt, so sind die Inhalte weiterer Felder (der Fremdschlüsselfelder) bei der Prüfung zu berücksichtigen. Es gibt nun mehrere Möglichkeiten, diesem Baustein den Inhalt eines solchen Fremdschlüsselfeldes mitzuteilen:

  1. Im CHANGING-Parameter ADDITIONAL_FIELDS kann eine Zeile für das Fremdschlüsselfeld übergeben werden. Dabei ist das Fremdschlüsselfeld über die Komponenten TABNAME und FIELDNAME zu spezifizieren. In der Komponente VALUE ist eine Referenz auf ein Datenobjekt zu übergeben, das den Wert des entsprechenden Feldes enthält. Dabei ist die Komponente EXTERNAL zu setzen, wenn der Wert in externer Darstellung vorliegt. Außerdem muß die Komponente FOUND den Wert 'X' erhalten, um zu dokumentieren, daß das Fremdschlüsselfeld tatsächlich zur Verfügung steht.
  2. Ist im IMPORT-Parameter CALLING_PROGRAM der Name des aufrufenden Programms übergeben, so wird versucht, die Fremdschlüsselfelder, für die in ADDITIONAL_FIELDS kein Eintrag steht, im aufrufenden Programm als globale Variablen zu identifizieren. Diese Identifikation erfolgt dabei über Namensgleichheit. Ist der IMPORT-Parameter STRUCNAME dabei nicht initial, so wird der durch ihn gegebene Name an Stelle des Namens der zu prüfenden Tabelle benutzt. Die Inhalte dieser Variablen werden dabei als interne Darstellung des Inhalts der Fremdschlüsselfelder interpretiert.

Wurde für das zu prüfende Feld eine Fremdschlüsselprüfung durchgeführt, so besteht der CHANGING-Parameter ADDITIONAL_FIELDS nach dem Aufruf aus der Liste der Fremdschlüsselfelder (außer dem Prüffeld und ggf. dem Mandantenfeld). Dabei steht in der Komponente FOUND jeweils, ob für das Feld überhaupt ein Wert bestimmt werden konnte. In der Komponente VALUE steht dann eine Referenz auf ein Datenobjekt, das den Wert, der für das Feld angenommen wurde, in interner Darstellung enthält.

ACCEPT_ALL_INITIAL: Flag, ob Initialwerte in den Fremdschlüsselfeldern akzeptiert werden sollen. Falls ACCEPT_ALL_INITIAL = 'X', gilt folgendes: Sind Fremdschlüsselfelder mit Initialwerten belegt (z.B. CHAR-Felder mit SPACE), dann wird kein Fehler geliefert, wenn die entsprechenden Einträge nicht in der Prüftabelle sind. Der Default für ACCEPT_ALL_INITIAL ist jedoch SPACE, d.h. auch Initialwerte in den Fremdschlüsselfeldern werden geprüft.

Mengenschnittstelle: Ist der IMPORT-Parameter FIELDNAME = '*', dann findet die Prüfung für alle Felder von TABNAME statt, die entweder Festwerte oder Fremdschlüssel haben. Hierzu sind die zu prüfenden Eingaben im IMPORT-Parameter VALUE_LIST zu übergeben. Ist die so referierte Tabelle nicht gemäß der Definition von TABNAME typisiert, so wird die Ausnahme NO_DDIC_FIELD ausgelöst. In FAILURE_TAB werden diejenigen Felder ausgegeben, für die die Eingabeprüfungen negativ waren, samt der Nachrichten, die dafür vom Dynpro ausgegeben werden. Für Festwerte wird die Nachricht 00 002 ausgegeben. Für Fremdschlüssel wird die Nachricht 00 058 im Default-Fall ausgegeben. Falls ein Feld sowohl einen Festwert als auch einen Fremdschlüssel besitzt und die Eingabe schlägt fehl, dann kommen beide Zeilen in FAILURE_TAB vor. Für die strukturübergreifenden Fremdschlüsselfelder sollte beim Aufruf der CHANGING-Parameter ADDITIONAL_FIELDS mit übergeben werden. Strukturübergreifende Fremdschlüssel sind Fremdschlüssel, bei denen auch Felder beteiligt sind, die nicht aus der Fremdschlüsseltabelle sind. Wie dieser Parameter zu füllen ist, ist oben beim Punkt 1 zu entnehmen.

Beispiel

In einem Programm ist ein strukturiertes Datenobjekt sflight_wa vom Typ SFLIGHT definiert. Vor der Verarbeitung des Inhalts soll geprüft werden, ob der Inhalt des Feldes CONNID gültig ist. Hierzu dient die folgende Programmstrecke:

PROGRAM ZZTEST.
DATA sflight_wa TYPE SFLIGHT. " Muß global definiert sein
DATA: repid TYPE SY-REPID, " Diese
msgid TYPE SY-MSGID, " Variablen
msgty TYPE SY-MSGTY, " können
msgno TYPE SY-MSGNO, " auch
msgv1 TYPE SY-MSGV1, " lokal
msgv2 TYPE SY-MSGV2, " definiert
msgv3 TYPE SY-MSGV3, " sein
msgv4 TYPE SY-MSGV4.

sflight_wa-CARRID = 'LH'. " Beispiel
sflight_wa-CONNID = '0400'. " Beispiel

repid = SY-REPID.
CALL FUNCTION 'DDUT_INPUT_CHECK'
EXPORTING
CALLING_PROGRAM = repid
STRUCNAME = 'SFLIGHT_WA'
VALUE = sflight_wa-CONNID
IMPORTING
MSGID = msgid
MSGTY = msgty
MSGNO = msgno
MSGV1 = msgv1
MSGV2 = msgv2
MSGV3 = msgv3
MSGV4 = msgv4.
IF NOT msgid IS INITIAL. " Eintrag nicht legal
MESSAGE ID msgid TYPE msgty NUMBER msgno
WITH msgv1 msgv2 msgv3 msgv4.
EXIT.
ENDIF.

Wäre der CHANGING-Parameter ADDITIONAL_FIELDS beim Aufruf des Funktionsbausteins mit einer leeren Tabelle versorgt gewesen, so enthielte er nach dem Aufruf eine Zeile. In dieser würde gelten: TABNAME = 'SFLIGHT'. FIELDNAME = 'CARRID'. VALUE ist eine Referenz auf ein Datenobjekt mit Inhalt 'LH'. FOUND = 'X', EXTERNAL = ' '.

Hinweise

  1. Eine direkte Übergabe von SY-REPID an den IMPORT-Parameter CALLING_PROGRAM ist nicht möglich, da die Auswertung erst nach Start des Funktionsbausteins erfolgt.
  2. Wird der zu prüfende Wert in interner Darstellung übergeben, so werden nur Festwertprüfung und Fremdschlüsselprüfung durchgeführt.
  3. Ist das aufrufende Programm so generisch, daß es die zusätzlichen Fremdschlüsselfelder zunächst nicht kennt, so kann der Funktionsbaustein zunächst aufgerufen werden, um ggf. in ADDITIONAL_FIELDS die Liste der zusätzlich benötigten Felder zu erhalten. Durch weitere Programmlogik kann in dieser Liste dann jeweils das Datenobjekt, auf das die Komponente VALUE zeigt, gefüllt und das Kennzeichen FOUND gesetzt werden. Danach kann der Baustein noch einmal aufgerufen werden, um nun die Prüfung tatsächlich durchzuführen.
  4. Wurde für das spezifizierte Feld gar keine Fremdschlüsselprüfung durchgeführt oder besitzt der betreffende Fremdschlüssel außer dem Prüffeld und dem Mandantenfeld keine weiteren Fremdschlüsselfelder, so ist die Tabelle ADDITIONAL_FIELDS nach Aufruf des Funktionsbausteins leer.
  5. Eine Festwertprüfung wird nur durchgeführt, falls das zu prüfende Feld vom Typ CHAR oder NUMC ist (entspricht dem Verhalten auf Eingabemasken).
  6. Ist der IMPORT-Parameter VALUE initial, so wird keine Prüfung durchgeführt (entspricht dem Verhalten auf Eingabemasken).
  7. Kann der Wert eines Fremdschlüsselfeldes (außer dem Mandantenfeld und dem Prüffeld) nicht identifiziert werden, so wird die Fremdschlüsselprüfung dennoch durchgeführt. Dabei wird für dieses Feld der Initialwert angenommen (entspricht dem Verhalten auf Eingabemasken).
  8. Erfüllt der zu prüfende Wert alle Prüfungen und ist der EXPORT-Parameter VALUE_INTERNAL versorgt, so wird die interne Darstellung des zu prüfenden Wertes mit dem Befehl MOVE nach VALUE_INTERNAL übertragen. Kommt es dabei zu einem (abfangbaren) Laufzeitfehler, so wird die Ausnahme ILLEGAL_MOVE ausgelöst.
  9. Wird gemäß den oben beschriebenen Regeln ein Datenobjekt als Fremdschlüsselfeld der zu prüfenden Fremdschlüsselbeziehung identifiziert, kann aber sein Inhalt nicht fehlerfrei in ein Feld übertragen werden, das den Typ des zugehörigen ABAP Dictionary Feldes hat, so wird ebenfalls die Ausnahme ILLEGAL_MOVE ausgelöst.

Weiterführende Informationen





Parameter

ACCEPT_ALL_INITIAL
ADDITIONAL_FIELDS
FAILURE_TAB
I_ROLLNAME
MSGID
MSGNO
MSGTY
MSGV1
MSGV2
MSGV3
MSGV4
NO_FORKEY_CHECK
VALUE
VALUE_INTERNAL
VALUE_IS_EXTERNAL
VALUE_LIST

Ausnahmen

ILLEGAL_MOVE
NO_DDIC_FIELD

Funktionsgruppe

RSISW_TOOLS

SUBST_MERGE_LIST - merge external lists to one complete list with #if... logic for R3up   RFUMSV00 - Advance Return for Tax on Sales/Purchases  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 13607 Date: 20240523 Time: 104856     sap01-206 ( 277 ms )