Ich verwende hierfür gerne Substrukturen mit Aliasnamen.mareikemei92 hat geschrieben:Klar, könnte ich jedes Feld, das ich zur Berechnung brauche, einzeln als Parameter übergeben und die berechneten Felder einzeln zurückgeben. Aber vielleicht gibt es ja eine ganz einfache Möglichkeit und ich kenne sie nur noch nicht
Code: Alles auswählen.
TYPES:
BEGIN OF ts_interface,
param1 TYPE char1,
param2 TYPE char2,
END OF ts_interface.
TYPES:
BEGIN OF ts_grid01,
field01 TYPE char10.
INCLUDE TYPE ts_interface AS interface01.
TYPES END OF ts_grid01.
TYPES:
BEGIN OF ts_grid02,
field02 TYPE char20.
INCLUDE TYPE ts_interface AS interface01.
TYPES END OF ts_grid02.
FORM fill_interface CHANGING cs_interface TYPE ts_interface.
IF cs_interface-param1 EQ 'X'.
cs_interface-param2 = 'XX'.
ENDIF.
ENDFORM.
...
DATA:
ls_grid01 TYPE ts_grid01,
ls_grid02 TYPE ts_grid02.
ls_grid01-field1 = 'Hier passiert was'.
ls_grid01-param1 = 'X'.
PERFORM fill_interface CHANGING ls_grid01-interface01. "param2 = 'XX'
ls_grid02-field2 = 'Hier passiert nix'.
PERFORM fill_interface01 CHANGING ls_grid02-interface. "param2 = ' '
Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
mareikemei92
Das klingt machbar, werde ich mal ausprobierena-dead-trousers hat geschrieben:Ich verwende hierfür gerne Substrukturen mit Aliasnamen.mareikemei92 hat geschrieben:Klar, könnte ich jedes Feld, das ich zur Berechnung brauche, einzeln als Parameter übergeben und die berechneten Felder einzeln zurückgeben. Aber vielleicht gibt es ja eine ganz einfache Möglichkeit und ich kenne sie nur noch nicht
Man fasst alle Felder, die man in den Schnittstellen braucht, in eigene Strukturen zusammen und bindet diese dann anstatt der EInzelfelder als .INCLUDE in die Strukturen des ALV-Grids ein. Den eingebundenen Includes werden Alias-Namen gegeben und diese können dann beim Schnittstellen-Aufruf verwendet werden:Der Einfachheit halber mit Forms, weil dass schneller zu Tippen gehtCode: Alles auswählen.
TYPES: BEGIN OF ts_interface, param1 TYPE char1, param2 TYPE char2, END OF ts_interface. TYPES: BEGIN OF ts_grid01, field01 TYPE char10. INCLUDE TYPE ts_interface AS interface01. TYPES END OF ts_grid01. TYPES: BEGIN OF ts_grid02, field02 TYPE char20. INCLUDE TYPE ts_interface AS interface01. TYPES END OF ts_grid02. FORM fill_interface CHANGING cs_interface TYPE ts_interface. IF cs_interface-param1 EQ 'X'. cs_interface-param2 = 'XX'. ENDIF. ENDFORM. ... DATA: ls_grid01 TYPE ts_grid01, ls_grid02 TYPE ts_grid02. ls_grid01-field1 = 'Hier passiert was'. ls_grid01-param1 = 'X'. PERFORM fill_interface CHANGING ls_grid01-interface01. "param2 = 'XX' ls_grid02-field2 = 'Hier passiert nix'. PERFORM fill_interface01 CHANGING ls_grid02-interface. "param2 = ' '
Ich hatte die Schnittstelle als "TYPE ANY" deklariert, aber dann kam schon in der Methode selbst ein Syntaxfehler, wenn ich auf ein Feld der Struktur zugreifen wollte.black_adept hat geschrieben:Suchst du „TYPE ANY“?
Code: Alles auswählen.
DATA: BEGIN OF ls_known_fields,
known_field_1 type matnr,
known_field_2 type vkorg,
known_field_3 type abap_bool,
END OF ls_known_fields.
MOVE-CORRESPONDING cs_data TO ls_known_fields.
* Hier kannst du jetzt auf deine Felder zugreifen mit Namen
IF ls_known_field-known_field_1 = 'MATNR1'.
ls_known_field-known_field_2 = 'HUGO'.
ls_known_field-known_field_3 =abap_true.
ENDIF.
MOVE-CORRESPONDING ls_known_fields to cs_data
Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
mareikemei92
Die Strukturen sind alle im eigenen Namensraum, also das ist nicht das Problem. Ich möchte die Methode zentral halten, um bei Änderungen nur eine Methode anpassen zu müssen und nicht wie im Moment fünf (die alle das gleiche machen).black_adept hat geschrieben:Wenn dir a-d-ts Weg zu kompliziert ist oder du an den Strukturen nicht groß rumfummeln darfst:Code: Alles auswählen.
DATA: BEGIN OF ls_known_fields, known_field_1 type matnr, known_field_2 type vkorg, known_field_3 type abap_bool, END OF ls_known_fields. MOVE-CORRESPONDING cs_data TO ls_known_fields. * Hier kannst du jetzt auf deine Felder zugreifen mit Namen IF ls_known_field-known_field_1 = 'MATNR1'. ls_known_field-known_field_2 = 'HUGO'. ls_known_field-known_field_3 =abap_true. ENDIF. MOVE-CORRESPONDING ls_known_fields to cs_data