Programmatische Anlage einer Klasse
I’d rather write code that writes code than write code
mir unbekannter Autor
Dieses Zitat passt sehr gut zu dem hier vorgestellten Code-Schnipsel. Mit diesem kleinen Programm zeige ich dir exemplarisch, wie man per Programm eine Klasse im Repository anlegen kann. Es wird die folgende Klasse angelegt:
CLASS zcl_test_007 DEFINITION
PUBLIC
CREATE PUBLIC.
PUBLIC SECTION.
INTERFACES zif_test .
METHODS demo .
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS zcl_test_007 IMPLEMENTATION.
METHOD demo.
* demo implementation
ENDMETHOD.
METHOD zif_test~if_test.
* demo interface implementation
ENDMETHOD.
ENDCLASS.
Anlegen einer Klasse
Aber nun zu dem spannenden Teil: Der Anlage der Klasse. Es werden alle notwendigen Bestandteile mitgegeben. Bei den meisten verwendeten Tabellen des Bausteins SEO_CLASS_CREATE_COMPLETE beziehen sich auf Datenbankviews, so dass man einfach bei vorhandenen Klassen nachsehen kann, welche Attribute welche Werte erhalten sollten. In der Regel kann man dies auch über die Festwerte der jeweiligen Domäne erfahren.
Code
REPORT.
TYPE-POOLS seoc.
PARAMETERS pa_num TYPE num03 DEFAULT 1.
START-OF-SELECTION.
DATA t_attributes TYPE seoo_attributes_r.
DATA t_methods TYPE seoo_methods_r.
DATA t_method_sources TYPE seo_method_source_table.
DATA t_interfaces TYPE seor_implementings_r.
DATA s_class TYPE vseoclass.
s_class = VALUE #(
clsname = |ZCL_TEST_{ pa_num }|
descript = |Test class number { pa_num }|
langu = sy-langu
exposure = 2
fixpt = abap_true
state = 1 ). "implemented
t_attributes = VALUE #(
( clsname = s_class-clsname
cmpname = 'DEMO'
descript = 'Demo attribute'
exposure = 2 "public
attdecltyp = 0 "instance
state = 1
) ).
t_methods = VALUE #(
( clsname = s_class-clsname
cmpname = 'DEMO'
descript = 'demo method'
langu = sy-langu
exposure = 2 "public
mtddecltyp = 0 "instance
state = 1
) ).
t_method_sources = VALUE #(
( cpdname = 'DEMO' source = VALUE #( ( `* demo implementation` ) ) )
( cpdname = 'ZIF_TEST~IF_TEST' source = VALUE #( ( `* demo interface implementation` ) ) ) ).
t_interfaces = VALUE #(
( clsname = s_class-clsname
refclsname = 'ZIF_TEST'
exposure = 2 "public
state = 1
reltype = 1 ) ).
"Create class
CALL FUNCTION 'SEO_CLASS_CREATE_COMPLETE'
EXPORTING
devclass = '$TMP'
overwrite = space
version = seoc_version_active
suppress_dialog = abap_true " Parameter missing in 702
method_sources = t_method_sources
CHANGING
implementings = t_interfaces
class = s_class
attributes = t_attributes
methods = t_methods
EXCEPTIONS
existing = 1
is_interface = 2
db_error = 3
component_error = 4
no_access = 5
other = 6
OTHERS = 7.
WRITE: / sy-subrc.
- Automatisches Eingabefeld [SAPGUI] - 9. Oktober 2025
- So verhinderst du Jobstarts zur falschen Zeit - 15. September 2025
- [apple] iCloud-Photos herunterladen - 21. Juli 2025


