Performance of Alt+F8 in Eclipse ABAP Development Tools and ABAP 7.52
I encountered performance issues while using Alt+F8 (execute) in my Eclipse ADT, connected to ABAP backend 7.52 SP 0 (on premise S/4HANA) and SP 1 (Developer Edition).
- Press Alt + F8 or menu Run > Run ABAP Development Object
- Enter the characters of a transaction code or a table (to display its contents)
- You have to wait for the backend to confirm it’s valid before you can run it. When it’s not a value already confirmed (from a previous execution), it takes 10 seconds to confirm and display the value.
- That’s really slow if you compare it to the time of Ctrl + Shift + A or menu Navigate > Open ABAP Development Object, which is less than 1 second. Pressing Ctrl + Shift + A followed by F8 is a fully-valid workaround, but it opens a useless tab that you have to close.
TL;DR With the little modification I propose, it will take less than 1 second. But the code applies only to the versions I mentioned above. I recommend to only use it for Developer Edition (private trial) and use it at your own risk.
If you just want to try it for version 7.52 sp 1, go directly to the Use it chapter. If you want to adapt the tool for the Developer Edition 7.52 sp 4, read the next chapter to understand how I did it, and hopefully you could then propose a Pull Request.
NB: I guess there shouldn’t be any issue with the Developer Edition 1909 (ABAP 7.54).
How I did it
After searching the support database, I found out that the Note 3006480 – Where-used list is not working could contain a fix for this problem, but this fix was available only from 7.53, above my ABAP version 7.52. In that note, SAP created a new method GET_METADATA in the class CL_RIS_SHM_METADATA, containing 15.000 lines of hard-coded values (!) used to initialize an internal table.
I decided to try a custom fix in 7.52 inspired by this 7.53+ correction. First of all, I had to understand what these 15.000 lines could correspond to. I ended up by creating a little ABAP program Z_RIS_SHM_METADATA to mimic what is done in the standard class above, which generates the same big internal table. The program is attached to the github project mentioned in the Use it chapter.
I then used the backend debugger on that program and the DVE tool proposed by Alexander Geppart to generate the ABAP code corresponding to that generated internal table (variable LT_METADATA):
That made a big ABAP code of 56.000 lines!
Note that if you experience performance or blank screen issues with the official tool, try my forked version of DVE (still a bit slow, took 4 minutes to display the ABAP code).
I then enhanced CL_RIS_SHM_METADATA. The syntax check didn’t like a so big VALUE #( … ) statement, so I had to split it into many INSERT statements, and at the same time I tried to compress the lines (“find/replace all” of any good text editor is your friend):
INSERT VALUE ris_s_metadata( TROBJTYPE = '????' LEGACY_TYPE = 'DWY' SEARCH_GROUPS = VALUE #( ( NAME = 'STANDARD' TEXT_REF = `TEXT-S01` ) ( NAME = 'MORE' TEXT_REF = `TEXT-S02` ) ( NAME = 'EINSTELLUNG' ) ) SEARCH_ELEMENTS = VALUE #( ( INDEX = 1 NAME = 'KEY1' TYPE = 'SO' GROUP = 'STANDARD' FOR = 'SDOKMEP-PROP_NAME' ) ( INDEX = 2 NAME = 'XTEXT' TYPE = 'SO' GROUP = 'STANDARD' FOR = 'SDOKMET-DESCRIPT' ) ( INDEX = 3 NAME = 'NEW_LINE' TYPE = 'LF' GROUP = 'STANDARD' ) ... ) ) INTO TABLE LT_METADATA_FB. INSERT VALUE ris_s_metadata( TROBJTYPE = '????' LEGACY_TYPE = 'GP' SEARCH_GROUPS = VALUE #( ...
In the end, that made the incredible low number of 10.000 lines.
How to use it
If you experience the same Alt + F8 performance issue with your Developer Edition 7.52 sp 1, you may try this fix –use it at your own risk–:
- Pull this github project: https://github.com/sandraros/ADT-7.52-Trial-faster-Alt-F8
- The main branch is empty.
- Switch to the branch
- 7.52 SP 0 (on premise S/4HANA)
- 7.52 SP 1 (Developer Edition)
- Try again Alt+F8 (first time it’s “slow” because it compiles)
NB: for 7.52 SP 4, volunteers welcome to propose a Pull Request!