Hi Moritz,
As you have already mentioned about Performance traces, by description it is clear that you have so many UIBBs on single page and each must be hitting backend system in one or another way.
There might be some code which may be getting executing even if it is not required. so I would like to suggest below point.
Have you created different Feeder Classes for each UIBB component ?
Assuming you have created single Feeder class.
- In Feeder Class always use UIBB ConfigurationId which we define in UIBB Configuration to identify uniquely. We should use this Config Id in our GET_DATA or PROCESS_EVENT methods so that the code required for this UIBB only gets executed when required.
(As GET_DATA method always gets called and we generally write code inside this method while reading)
In every GET_DATA method we should have below code
IF ms_config_id EQ <your UIBB ConfigID>. // Ex FORM UIBB
CASE iv_eventid->mv_event_id. //EVENT
WHEN cl_fpm_event=>gc_event_call_default_ed_page. //Standard Events any
ELSEIF ms_config_id EQ <your UIBB ConfigID2>. // Ex LIST UIBB
// code goes here
ELSEIF ms_config_id EQ <your UIBB ConfigID3>. // Ex SEARCH UIBB
//code goes here
ENDCASE.
ENDIF.
2. Another thing I would suggest to use below event check
CHECK iv_raised_by_own_ui EQ abap_true.
// your code logic
OR
if iv_raised_by_own_ui = abap_true.
This means the Event PROCESS_EVENT or GET_DATA is actually raised by Current UIBB and its not raised by any other UIBB"
//Proceed for code logic
ELSE.
return.
endif.
OR
you can use reverse condition also
if iv_raised_by_own_ui = abap_false.
return
endif.
The Scenario 2 is mainly helpful when using Lead Selection event on LIST UIBB..
Thanks-
Abhishek