Creation of a Subsystem
- The simplest way to create a subsystem is by copying the CL_DPR_DEMO_SUBSYSTEM to a customer class - for example ZCL_DPR_SUBSYSTEM.
This can be done in SE24. - Comment all the codes of the copied methodes.
- Go to Tab "Attributes"
- Change the "Associated Type" of Attribute 'SR_INSTANCE' to "ZCL_DPR_SUBSYSTEM". - Go to Tab "Methods"
- Select method "GET_INSTANCE"
- And call the "Parameters" of this method
- Change the "Associated Type" of returning parameter to ZCL_DPR_SUBSYSTEM. - Then you have to activate the class/methods with the button "activate".
After the above steps are done, you have a 'blank' subsystem, which still not have any logic.
Initialization and Loading of subsystems
You can place a breakpoint here to see which subsystems are initialised (e.g. when first accessing Project Management in the frontend):
CL_DPR_APPL_OBJECT_MANAGER
CONSTRUCTOR
init_plug_in_subsystems( ).
CL_DPR_APPL_OBJECT_MANAGER
INIT_PLUG_IN_SUBSYSTEMS
Call of the subsystem
Subsystems in Project Management are handled by class CL_DPR_APPL_OBJECT_MANAGER. The subsystems are processed within a loop in the following methods:
CL_DPR_APPL_OBJECT_MANAGER
SAVE
LOOP AT mt_subsystems INTO lr_subsystem.
lv_rc = lr_subsystem->prepare_to_save( ).
...
CL_DPR_APPL_OBJECT_MANAGER
IF_DPR_PROVIDER_TRANSACTION~DO_SAVE
*/- Subsystems
LOOP AT mt_subsystems INTO lr_subsystem.
CLEAR lv_rc.
lv_rc = lr_subsystem->save( ).
...
CL_DPR_APPL_OBJECT_MANAGER
IF_DPR_PROVIDER_TRANSACTION~AFTER_COMMIT
*/- Subsystems
LOOP AT mt_subsystems INTO lr_subsystem.
lr_subsystem->initialize_after_save( ).
ENDLOOP.
CL_DPR_APPL_OBJECT_MANAGER
IF_DPR_PROVIDER_TRANSACTION~BEFORE_SAVE
*/Prepare save
*/- Prepare subsystems first
LOOP AT mt_subsystems INTO lr_subsystem.
lv_rc = lr_subsystem->prepare_to_save( ).
...