Skip to Content

Old New ABAP Editor


If you develop now UI for SAP, you use Web IDE. If you are doing backend and ABAP, you use ADT (ABAP in Eclipse). But sometimes you still need to come back to SAP GUI and ABAP Workbench and use the “New” ABAP Editor.

For that rare cases when you are doing ABAP in old fashion way 😉 I have some suggestions, which maybe someone not aware of, and that may help be more productive. In this blog, I will try to explain most useful functions added in ABAP Editor (from my point of view) and will try to collect links to other useful resources related to ABAP Editor for SAP GUI.

Do not expect too much in the beginning, but the list will grow up on demand.


I am long time not responsible for the ABAP Editor in Workbench so I cannot add or fix something. And I am not ABAP Workbench expert in general – I can only give details about that white area where you type your code. But for that white area, I can explain how it was designed and if the thing you want is in or is theoretically possible.

Tips & Tricks

Quick start

It was designed, that when one starts “New” ABAP editor in the ABAP workbench for the first time, he gets an introduction page, explaining new features of the editor. But I never saw this working :).

The page is located aside to ABAP Editor user settings in:

“%APPDATA%\SAP\SAP GUI\ABAP Editor\qstart.htm”
Copy => Win + R => Paste => Enter

And here is most valuable part of the page:


Block / Column Selection

  • Alt + Shift + Left/Right/Up/Down

The ABAP editor allows you not only use standard (called “stream” selection) but also allow to select a rectangular block of text, which does not start from the beginning of the line:

You can select text block using the keyboard commands (Alt + Shift + Arrows) or with a mouse, keeping left Alt key during selection:

After selection, you can apply many of the editing functions in block mode:

  • Delete, Insert, Multi Edit
  • Copy/paste from Clipboard
  • Case conversion
  • Indent etc.

Multi Editing


Null Width Selection

The degenerated version of the block selection is Null Width selection (not visualized 🙂 ), which you can use for indenting of text blocks.


Clipboard Ring or Multi Clipboard or Clipboard History

  • Ctrl + Shift + V

If you want to see all text pieces you have copied during your editing session, just press Ctrl + Shift + V, instead of normal Ctrl + V. Then you get a history of the clipboard items (up to 12, in chronological sequence) where you can select and paste any of the items (it also overwrites current Windows clipboard content).


Case Modification

  • Ctrl + L  -> lower case
  • Ctrl + U -> UPPER CASE
  • Ctrl + K -> sWAP cASE
  • Ctrl + J  -> Capitalize Text
  • Ctrl + T  -> Like in sentence

You can easily modify text case, without using a pretty print function. It works with stream and with block selection.


Lines move

  • Ctrl + Alt + Up/Down

The feature is useful when you need a block of lines, but do not want to overwrite keyboard content. You can move selected block of lines up or down. If no selection is done, the current line is moved.


Line duplicate

  • Ctrl + D

Sometimes it is much faster to duplicate the current line and adjust content than typing it once more.


Word/Line Selection

The ABAP editor supports different kinds of word/line selection:

  • Ctrl + Left/Right to select till word borders
  • Ctrl + Left Mouse Click on a word
  • Left Mouse Click on number margin to select lines


Incremental Search

  • Ctrl + I, Ctrl + Shift + I

In many cases when you want to do a simple text search you can achieve it without calling Find dialog and losing your editing context. Just start Incremental Search mode by pressing Ctrl + I and start typing.

  • Press Ctrl + I to search for next occurrence
  • Ctrl + Shift + I for search of the previous occurrence
  • Backspace to correct your input
  • Esc to exit incremental search mode
  • See editor status bar for current search query


Code Hints

Code Hints were designed as proactive, not intrusive alternative for standard code completing list called by Ctrl + Space. It shall be very prudent to resources, but same time giving the user a way to speed up typing.

Code Hints may suggest syntactical construction, variables and code templates (somewhen before it was also auto correction suggestions in). The editor collects all fitting suggestions, rank them by type, usage count, input method and shows you the best hit. Code Templates are always won against keywords and variables, keywords (syntactical constructions) win against keywords.

Suggest Non-Keywords from the Text

The mentioned option is OFF by default (for some reason), but it brings a lot of value. “Non-Keywords from the Text” means in ABAP scope – your variables. So, if you enable the feature, you get your variables suggested by code hints (code completion list will show them independently of the flag) and this may save some typing effort especially if you are using “self-explaining”, meaningful variable names ;). Especially the flag would be useful, if you are forced to work on systems below SAP_BASIS 7.02, where full blown code completion is not enabled, and this flag and code hints the only “completion” you may get :).


Code Hint Color

When you using Code Hints, you see that it sometimes has light, standard background:

And sometimes it has inverted, dark background:

Have you ever asked yourself: what does this crap mean? 😉

The secret meaning of the Code Hint background color:

  • Light: there is only one suggestion known to the editor. You can safely accept the suggestion by Tab.
  • Inverted (dark): there is more than one suggestion known to the editor and you can call full blown auto-completion list to see all alternatives.

ADT (ABAP in Eclipse) has also emulated implementation of Code Hints in some way, but the “secret knowledge” was lost, and the only inverted color is left 🙂 :


Why my code highlighted differently when I paste it in an email?

You may wonder, why when you copy/paste your code from the editor into email (or any other editor supporting HTML formatting) syntax highlighting of the ABAP code looks different from the one you had in ABAP editor.

ABAP Editor:

MS Outlook:

The reason here – different highlighters that used for rendering of text in both cases. The one in ABAP editor, it is a highly sophisticated one, which works in respect of ABAP grammar available on ABAP system you work (and require fully qualified input), and the second one, is rudimental highlighter, which works based on keywords and can highlight even invalid code, but is not in sync to actual ABAP grammar. On the example above we see that keyword based parser has not highlighted OCCURRENCE, REGEX RESULTS (while in time the editor was written, these keywords were not yet known J ) but has highlighted the VALUE in the second sentence, that has been marked as an error by ABAP parser.

You would not be able to get code pasted into an email, always looking as one in ABAP editor, but you can extend syntax scheme of the keyword based parser, by simply adding missing keywords into abap_spec.xml file in ABAP Editor settings directory to get missing keywords highlighted:

“%APPDATA%\SAP\SAP GUI\ABAP Editor”  -> abap_spec.xml

Add this:

<TextType id="52" name="Keywords" ...>
    <Keyword text="regex"/>
    <Keyword text="occurrence"/>
    <Keyword text="results"/>

And get them also highlighted:


Display list of assigned ABAP Editor keyboard shortcuts

The easiest way to get an overview of currently assigned keyboard shortcuts in your instance of the ABAP editor is a preview of the keyboard mapping scheme file in Internet Explorer (not in Chrome, you need a browser supporting XSLT transformations).

Paste the following path in your Windows Explorer:

%APPDATA%\SAP\SAP GUI\ABAP Editor\keymap.xml

If you are lucky and your default browser is still IE, you will get something like this:

The list is searchable and contains all assigned keyboard shortcuts and command IDs and descriptions for all installed keyboard mapping schemes.
If the command is not on the list, it means, there is no shortcut assigned to it.


ABAP Editor Color schemes

Most of you know that it is possible to change the color of syntax elements shown in ABAP Editor. Using that “Settings” button in the status bar. But most of you a bit lazy to change that consistently and create new color scheme (Dark one for example) in a way that you can use and share with others.

But there are guys who did it. Check this GitHub repository if you want to get alternative color schemes for ABAP editor.


And if you have your own one – share it with the community!


ABAP Editor Code Templates

Probably everyone used the ABAP Editor has also used Code Templates, speeding up typing of routine code. And definitely, there were some cases when you would like to have a new code template for some code block and have not found it among the standard SAP pre-installed ones (for example METHOD/ENDMETHOD.).

Here you can find an extended set of code templates for ABAP Editor which may help.

Feel free to suggest new code templates or request update of existing.

Let us make a world of ABAP Programming better 🙂



You must be Logged on to comment or reply to a post.
  • Wow, this is a really nice blog. Top points for animation! 🙂

    I'm still very much enjoying the old editor though. I know all the cool kids either use Eclipse or at minimum new editor. But to me all that technicolor highlighting is actually distracting. Perhaps I just need some "grumpy ABAPosaurus" theme. 🙂 It's just a personal preference though, don't mean to convince anyone to join the dark side and I have no cookies to offer.

    Thanks for posting, great job!

  • Hi Alexey, I hope you enjoyed your holidays 🙂

    Thanks for this post (and for helping me to fix the bug on the BSP editor 😉 ). This is very useful as even the "cool kids" still need to use the old new editor for the objects not supported by ADT.

    I'm uploading my color scheme on Bruno's github. Unfortunately for Jelena, it will not be an Grumpy ABAPosaurus theme yet.




    • Hi Custodio,

      thanks for the comments and for triggering me to start such a blog!

      I see you have forked the Brunos GitHub repository. I feel that this is not the best way to go, while now there are two sources for AB4 themes. The proper way would be to get from Bruno contributor rights for his repository and upload your theme directly to it. That is what I am planning to do also.

      BR, Alexey.

  • This is bookmarked 🙂 It's amazing the number of modern (I.E 7.40 and newer) systems I come across that still haven't enabled the Eclipse editor.

    BTW, Jelena, nothing wrong with being a dinosaur - remember how long they / we lasted for 🙂

  • /
  • Hi Alexey


    Great blog! I got upset when reading all these thinking I never used most (almost all) of them.


    I must also say that I do not go to Eclipse ADT for backend ABAP development unless I really have to, e.g. for maintaining CDS objects, etc. I have always thought going to Eclipse is the “rare” thing most ABAP developers do for ABAP development. But maybe it’s because I am, too, an ABAPosaurus as in how Jelena defines it. Not so grumpy, though. ?


    When I first started coding in ABAP, there was this consultant using the non-graphical screen editor for maintaining dynpros. I now must be like him to the newbies. Am I?


    Thanks again.


    • Hi Serdar,


      there are enough others like you still preferring to use ABAP Workbench but not ADT, because of different reasons ;). But the SAP strategic direction for ABAP Development is ADT and Web IDE for Fiori / SAP UI5 Apps, so I doubt that there will be significant investments in old development infrastructure. So, if one looks to the future, he needs some when migrating to ADT. IMHO, for "old" ABAPers, benefits of ADT is still giving not so much value to force them migrating to it from ABAP Workbench. And I assume it would be so until all Dynpro based dev/lifecycle tools will be migrating to Eclipse based alternatives. And as one "very much involved" in the development of ABAP Editor control for SAP GUI, I may say Eclipse text editor in ADT is still missing a lot of features of it, however having a lot other, refactoring related features the editor in ABAP Workbench does not have.

      In addition to mentioned, Web IDE also does not help ADT to grow and become a single IDE for SAP...

      Please treat my comments here as my personal opinion, but not SAP opinion. I am not involved in the development of dev tools now, so most probably lacking some insights.

      BR, Alexey.


  • This blog reminds me of the times when AB4 (like it was called these days I believe) was released the 1st time.

    A BIG RELIEF for all ABAP developers who strived at least for a little bit efficiency when writing code in these times!!!

    There were no ADT and if you compare AB4 to its predecessor it comes down to: predecessor had a “Pretty Printer” and a syntax highlighting feature that consisted of printing comments in blue and code in black. Have I missed a feature?

    If one only evaluates the editor comparing to Eclipse there would be hardly a reason to switch to ADT. But there are other IDE features that might make one think twice despite the overall strategy.

    Thanks for introducing AB4 at that point in time!!!

  • Hey Alexey,

    great blog, thanks for sharing!

    Glad I learned about the "Block / Column Selection" - in the past I used to copy code to notepad++ to do just that.

    I read you blog 2 days ago, and just now I could already make use of it, cool!




    • Hi Lutz,

      the editor is wrong 😉

      It is not about Eclipse editor, but about old ABAP Workbench ABAP editor, running inside of SAP GUI.

      But you touched a good point, the difference in keyboards shortcuts between ADT and ABAP Editor from Workbench is dramatic and sometimes even rather critical, as with example with line duplicate 🙂

      I am already in a way of writing comparison table for people using both environments or moving from one to another.

      BR, Alexey.

  • Hello Alexey,

    I like this blog a lot, although I've known most of it. What I use very often are the code templates with variables. Sometimes I would like to create a specific tag, e. g. a date without time and another format like 2017-06-18 instead of 18.06.2017 09:18:57.

    Is it possible to define own tags?

    Thanks in advance.

    BR, Jens


    • Hi Jens,

      unfortunately - not. You can not create your own tags and also can not influence how available tags are inserted (format of date) :/ The only thing you have it is an "interactive" tag which allows you to enter a text you want instead of a placeholder.

      BTW: do you have useful code templates you want to share? Would be nice to extend pre-installed templates. At least METHOD/ENDMETHOD shall be added 😉

      BR, Alexey.

  • Hi Alexey,

    thanks for the info.

    I have several sets of code template to fulfill the different programming guidelines of my customers. They are very similar to each other and include also the SAP standard templates.

    How can I attach the XML file here? Or shell I paste it simply in a comment here? I'm not that familiar with blogs. May there is another way to make the files public here.

    If you like I have the same set for the ADTs.

    BR, Jens


    • Hi Jens,

      sorry I was not able to answer you before.

      Thanks for the templates! I have copied the file (with some adaptations) to my Git repository and will post a link to it here, on the blog. In such way, it would be easier for people to track changes if new templates would be added.

      Once more, thanks a lot for the contribution!

      BR, Alexey.

        • Welcome. Good idea to put it in GitHub.

          At least the template *creexc is not relevant for others, because therefore are specific exception classes required, which I implementent whenever it is possible..

          Yes, give me a hint when you need the ADT code templates..

          BR, Jens


  • Hi all,

    below you find the complete content of the following file.

    Replace red XXX with your windows user. If the folder AppData is hidden, make it visible in the settings/options of the explorer. Open the blue marked file in an editor like notepad and replace the complete content with the attached content.

    C:\Users\XXX\AppData\Roaming\SAP\SAP GUI\ABAP Editor\abap_user.xml

    (Re-)start the SAP GUI editor and have look onto the list of code template. Those starting with a * are ones of me.

    Create a new report and check it out with the following abbreviations, completing with the tab key and follow the popups:




    After that set the cursor below the statement PUBLIC SECTION and enter the following






    Cut out the part METHOD … ENDMETHOD and move into the IMPLEMENTATION part of the local class.

    Check out all others if you like. In the following you find the list of all with a short description, which were maintained, but unfortunately never appear again when maintaining later on.

    If anyone is interested in the templates for the ADTs please let me know.

    BR, Jens


    <?xml version="1.0"?>
    <?xml-stylesheet type="text/xsl" href="lang_user.xslt"?>
    		<Author>Alex Arseniev</Author>
    		<Desc>User specific settings for ABAP</Desc>
    		<Expand key="*meth">
    			<Descr>Method implementation</Descr>
    			<Text>*     %description%\n      %method_name%\n        IMPORTING\n          iv_...               TYPE x..                x..\n        EXPORTING\n          ev_...               TYPE x..\n        CHANGING \n          cv_...               TYPE x..\n        RETURNING\n          value(rv_..   )      TYPE x..\n        RAISING\n          x..\n\n\n  METHOD %method_name%.\n    "-----------------------------------------------------------------*\n    "   %description%\n    "-----------------------------------------------------------------*\n    "&lt;&lt;&lt;  use this block only in local classes  &gt;&gt;&gt;\n    "     --&gt;  IV_...  Description\n    "     &lt;--  EV_...  Description\n    "     &lt;-&gt;  CV_...  Description\n    "     &lt;-|  RV_...  Description\n    "-----------------------------------------------------------------*\n    "&lt;&lt;&lt;  use this block only in local classes  &gt;&gt;&gt;\n    " Change Log\n    "\n    " Date       Author          Description\n    " ---------- --------------- -------------------------------------*\n    " YYYY-MM-DD x               Reference and Description\n    "******************************************************************\n    "Local data definitions\n*    DATA:\n*      lv_...                TYPE x..\n\n    \n  ENDMETHOD.                    "%method_name%\n</Text>
    		<Expand key="*types">
    			<Descr>Definition local types</Descr>
    			<Text>*   l o c a l   t y p e   d e f i n i t i o n\n    TYPES:\n*     description\n      BEGIN OF ltys_...,\n        ...                TYPE x..\n      END   OF ltys_...,\n      ltyt_..              TYPE STANDARD TABLE OF lty_s_...\n</Text>
    		<Expand key="*instmeth">
    			<Descr>Declaration instance method</Descr>
    			<Text>*   i n s t a n c e   m e t h o d s\n    METHODS:\n</Text>
    		<Expand key="while">
    			<Descr>While (§)</Descr>
    			<Text>WHILE |.\n%SurroundedText%\nENDWHILE.</Text>
    		<Expand key="*statevt">
    			<Descr>Static event declaration</Descr>
    			<Text>*   s t a t i c   e v e n t s\n    CLASS-EVENTS:\n      |</Text>
    		<Expand key="*alias">
    			<Descr>Aliases of interface components</Descr>
    			<Text>*   a l i a s e s\n    ALIASES:\n*     Message types\n      mc_msgty_e           FOR  if_xo_const_message~error,\n      mc_msgty_i           FOR  if_xo_const_message~info,\n      mc_msgty_s           FOR  if_xo_const_message~success,\n      mc_msgty_w           FOR  if_xo_const_message~warning,\n*     Sign and options\n      mc_sign_i            FOR  if_fsbp_const_range~sign_include,\n      mc_opt_eq            FOR  if_fsbp_const_range~option_equal,\n      mc_opt_ne            FOR  if_fsbp_const_range~option_not_equal,\n      mc_opt_cp            FOR  if_fsbp_const_range~option_contains_pattern,\n      mc_opt_bt            FOR  if_fsbp_const_range~option_between.\n*     Description  \n      x..                  FOR  x..\n\n</Text>
    		<Expand key="*privsec">
    			<Descr>Declaration private section</Descr>
    			<Text>* P R I V A T E   S E C T I O N\n  PRIVATE SECTION.\n</Text>
    		<Expand key="*tables">
    			<Descr>DDIC Tables and structures</Descr>
    			<Text>* t a b l e s   /   s t r u c t u r e s   for selection field definition\nTABLES:\n  ...                  " description\n\n</Text>
    		<Expand key="*sopt">
    			<Descr>Constants for Sign/Options für RANGES/SELECT-OPTIONS</Descr>
    			<Text>*   i n t e r f a c e s\n    INTERFACES:\n      if_fsbp_const_range.\n\n*   a l i a s e s\n    ALIASES:\n*     Signs and options for RANGES/SELECT-OPTIONS\n      mc_sign_i            FOR  if_fsbp_const_range~sign_include,\n      mc_sign_e            FOR  if_fsbp_const_range~sign_exclude,\n      mc_opt_eq            FOR  if_fsbp_const_range~option_equal,\n      mc_opt_ne            FOR  if_fsbp_const_range~option_not_equal,\n      mc_opt_cp            FOR  if_fsbp_const_range~option_contains_pattern,\n      mc_opt_bt            FOR  if_fsbp_const_range~option_between.\n</Text>
    		<Expand key="*data">
    			<Descr>Local data definition</Descr>
    			<Text>"Local data definitions\n  DATA:\n    lv_...                TYPE x...\n</Text>
    		<Expand key="*instdata">
    			<Descr>Declaration instance data</Descr>
    			<Text>*   i n s t a n c e   a t t r i b u t e s\n    DATA:\n</Text>
    		<Expand key="do"><Descr>Do (§)</Descr><Text>DO | TIMES.\n%SurroundedText%\nENDDO.</Text></Expand><Expand key="*const"><Descr>Definition constants</Descr><Text>*   c o n s t a n t s\n    CONSTANTS:\n      mc_...               TYPE x..               VALUE 'xxx'  ##no_text,\n</Text></Expand><Expand key="*msg"><Descr>Message with SYST variables</Descr><Text>MESSAGE ID %structure_name%-MSGID TYPE %structure_name%-MSGTY NUMBER %structure_name%-MSGNO\n         WITH %structure_name%-MSGV1 %structure_name%-MSGV2 %structure_name%-MSGV3 %structure_name%-MSGV4.</Text></Expand><Expand key="*methhdr"><Descr>Documentation header for methods, function modules and subroutines</Descr><Text>"-----------------------------------------------------------------*\n    "   %description%\n    "-----------------------------------------------------------------*\n    " Change Log\n    "\n    " Date       Author          Description\n    " ---------- --------------- -------------------------------------*\n    " YYYY-MM-DD x               Reference and Description\n    "******************************************************************\n</Text></Expand><Expand key="*class"><Descr>Frame for LOCAL class definition and implementation</Descr><Text>*---------------------------------------------------------------------*\n*     CLASS  %class_name%  DEFINITION\n*---------------------------------------------------------------------*\n*     %description%\n*---------------------------------------------------------------------*\nCLASS %class_name% DEFINITION CREATE PUBLIC\n                                     FINAL.\n* P U B L I C   S E C T I O N\n  PUBLIC SECTION.\n*   s t a t i c   m e t h o d s\n    CLASS-METHODS:\n*     Main method, that controls the entire processing\n      main.\n\n\n* P R I V A T E   S E C T I O N\n  PRIVATE SECTION.\n**   s t a t i c   a t t r i b u t e s\n*    CLASS-DATA:\n**     o b j e c t   r e f e r e n c e s\n**     description\n*      mo_...               TYPE REF TO x..\n*\n**     t a b l e s\n**     description\n*      mt_...               TYPE x.. \n*\n**     s t r u c t u r e s\n**     description\n*      ms_...               TYPE x..\n*\n**     s i n g l e   v a l u e s\n**     description\n*      mv_...               TYPE x..\n      \nENDCLASS.                    " %class_name%  DEFINITION\n\n\n*---------------------------------------------------------------------*\n*     CLASS  %class_name%  IMPLEMENTATION\n*---------------------------------------------------------------------*\nCLASS %class_name% IMPLEMENTATION.\n  METHOD main.\n    "-----------------------------------------------------------------*\n    "   Main method, that controls the entire processing\n    "-----------------------------------------------------------------*\n    " Change Log\n    "\n    " Date       Author          Description\n    " ---------- --------------- -------------------------------------*\n    " YYYY-MM-DD x               Reference and Description\n    "******************************************************************\n    "Local data definitions\n*    DATA:\n*      l...                  TYPE x..\n\n    \n  ENDMETHOD.                    "main\nENDCLASS.                    " %class_name%  IMPLEMENTATION\n\n</Text></Expand><Expand key="if"><Descr>If (§)</Descr><Text>IF |.\n%SurroundedText%\nENDIF.</Text></Expand><Expand key="*start"><Descr>Start-of-selection</Descr><Text>*---------------------------------------------------------------------*\n*     s t a r t - o f - s e l e c t i o n\n*---------------------------------------------------------------------*\nSTART-OF-SELECTION.\n  %class_name%=&gt;main( ).\n</Text></Expand><Expand key="try"><Descr>Try (§)</Descr><Text>TRY |.\n%SurroundedText%\nCATCH .\n\nENDTRY.</Text></Expand><Expand key="*unittest"><Descr>Class frame for ABAP Unit testing</Descr><Text>*---------------------------------------------------------------------*\n*     CLASS  zlcl_aunit_%name_test_class%  DEFINITION\n*---------------------------------------------------------------------*\n*     Description\n*---------------------------------------------------------------------*\nCLASS zlcl_aunit_%name_test_class% DEFINITION\n                         INHERITING FROM cl_aunit_assert  "#AU Duration Short\n                         FOR TESTING.                "#AU Risk_Level Harmless\n*                        FOR TESTING [RISK LEVEL {CRITICAL|DANGEROUS|HARMLESS}]\n*                                    [DURATION   {SHORT|MEDIUM|LONG}]\n* The addtions RISK_LEVEL and DURATION are not available in older releases.\n* They have to be replaced by the pseudo commands starting with "#AU.\n*\n* Possible values for Risk_Level are:\n* - Critical  - The test could change system settings or the Customizing, for example.\n* - Dangerous - The test could change persistent application data, for example.\n* - Harmless  - The test has no effect on persistent data or system settings.\n*\n* Possible values for Duration are:´\n* The execution duration is expected to be ...\n* - Short   - ... less than one minute. This is the default value.\n* - Medium  - ... between one minute and ten minutes.\n* - Long    - ... between ten minutes and 60 minutes.\n\n*?&lt;asx:abap xmlns:asx="" version="1.0"&gt;\n*?&lt;asx:values&gt;\n*?&lt;TESTCLASS_OPTIONS&gt;\n*?&lt;TEST_CLASS&gt;zlcl_aunit_%name_test_class%\n*?&lt;/TEST_CLASS&gt;\n*?&lt;TEST_MEMBER&gt;gr_%test_instance%\n*?&lt;/TEST_MEMBER&gt;\n*?&lt;OBJECT_UNDER_TEST&gt;%name_global_class_to_be_tested%\n*?&lt;/OBJECT_UNDER_TEST&gt;\n*?&lt;OBJECT_IS_LOCAL/&gt;\n*?&lt;GENERATE_FIXTURE&gt;X\n*?&lt;/GENERATE_FIXTURE&gt;\n*?&lt;GENERATE_CLASS_FIXTURE&gt;X\n*?&lt;/GENERATE_CLASS_FIXTURE&gt;\n*?&lt;GENERATE_INVOCATION&gt;X\n*?&lt;/GENERATE_INVOCATION&gt;\n*?&lt;GENERATE_ASSERT_EQUAL&gt;X\n*?&lt;/GENERATE_ASSERT_EQUAL&gt;\n*?&lt;/TESTCLASS_OPTIONS&gt;\n*?&lt;/asx:values&gt;\n*?&lt;/asx:abap&gt;\n\n* P U B L I C   S E C T I O N\n  PUBLIC SECTION.\n*   i n t e r f a c e s\n    INTERFACES:\n      if_aunit_constants,\n      zif_bc_const_boolean.\n\n* P R I V A T E   S E C T I O N\n  PRIVATE SECTION.\n*   a l i a s e s\n    ALIASES:\n*     Warning Levels\n      c_warn_fatal         FOR  if_aunit_constants~fatal,\n      c_warn_critical	     FOR  if_aunit_constants~critical,\n      c_warn_tolerable     FOR  if_aunit_constants~tolerable,\n*     Termination types\n      c_term_program       FOR  if_aunit_constants~program,\n      c_term_class         FOR  if_aunit_constants~class,\n      c_term_method	       FOR  if_aunit_constants~method,\n      c_term_no	           FOR  if_aunit_constants~no,\n*     Boolean flags\n      c_false              FOR  zif_bc_const_boolean~c_false,\n      c_true               FOR  zif_bc_const_boolean~c_true.\n\n**   s t a t i c   a t t r i b u t e s\n*    CLASS-DATA:\n**     o b j e c t   r e f e r e n c e s\n**     description\n*      gr_...               TYPE REF TO ...\n*\n**     t a b l e s\n**     description\n*      gt_...               TYPE ... \n*\n**     s t r u c t u r e s\n**     description\n*      gs_...               TYPE ...\n*\n**     s i n g l e   v a l u e s\n**     description\n*      gv_...               TYPE ...\n*\n*   i n s t a n c e   a t t r i b u t e s\n    DATA:\n*     o b j e c t   r e f e r e n c e s\n*     Class under test\n      gr_%test_instance%   TYPE REF TO %name_global_class_to_be_tested%.\n\n**     t a b l e s\n**     description\n*      gt_...               TYPE ... \n*\n**     s t r u c t u r e s\n**     description\n*      gs_...               TYPE ...\n*\n**     s i n g l e   v a l u e s\n**     description\n*      gv_...               TYPE ...\n*\n\n*   s t a t i c   m e t h o d s\n    CLASS-METHODS:\n*     Check and preparation of test data\n      class_setup,\n\n*     Deletion of test data and settings\n      class_teardown.\n\n*   i n s t a n c e   m e t h o d s\n    METHODS:\n*     Prepare data for each testing method\n      setup,\n\n*     !!! Test methods are processed in alphabetical order !!!\n\n*     123456789012345678901234567890\n*     Test ...\n      test_0010_... FOR TESTING,\n\n*     Release and my be delete single test data\n      teardown.\nENDCLASS.                    " zlcl_aunit_%name_test_class%  DEFINITION\n\n*---------------------------------------------------------------------*\n*     CLASS  zlcl_aunit_%name_test_class%  IMPLEMENTATION\n*---------------------------------------------------------------------*\nCLASS zlcl_aunit_%name_test_class% IMPLEMENTATION.\n*---------------------------------------------------------------------*\n*     METHOD  class_setup  [STATIC]\n*---------------------------------------------------------------------*\n*     Description\n*---------------------------------------------------------------------*\n  METHOD class_setup.\n\n  ENDMETHOD.                    " class_setup\n\n*---------------------------------------------------------------------*\n*     METHOD  setup  [INSTANCE]\n*---------------------------------------------------------------------*\n*     Prepare test method data\n*---------------------------------------------------------------------*\n  METHOD setup.\n*    CREATE OBJECT gr_%test_instance%.\n  ENDMETHOD.                    " setup\n\n*---------------------------------------------------------------------*\n*     METHOD  test_0010_...  [INSTANCE]\n*---------------------------------------------------------------------*\n*     Test ...\n*---------------------------------------------------------------------*\n  METHOD test_0010_...\n\n  ENDMETHOD.                    " test_0010_...\n\n*---------------------------------------------------------------------*\n*     METHOD  teardown  [INSTANCE]\n*---------------------------------------------------------------------*\n*     Release test data and may be delete single data\n*---------------------------------------------------------------------*\n  METHOD teardown.\n\n  ENDMETHOD.                    " teardown\n\n*---------------------------------------------------------------------*\n*     METHOD  class_teardown  [STATIC]\n*---------------------------------------------------------------------*\n*     Delete / reset test data\n*---------------------------------------------------------------------*\n  METHOD class_teardown.\n\n  ENDMETHOD.                    " class_teardown\nENDCLASS.                    " zlcl_aunit_%name_test_class%  IMPLEMENTATION\n</Text></Expand><Expand key="*init"><Descr>Report event INITIALIZATION</Descr><Text>*---------------------------------------------------------------------*\n*     i n i t i a l i z a t i o n\n*---------------------------------------------------------------------*\nINITIALIZATION.\n  %class_name%=&gt;initialization( ).\n\n*     Initialization of report data / selections\n      initialization,\n\n  METHOD initialization.\n    "-----------------------------------------------------------------*\n    "   Initialization of report data / selections\n    "-----------------------------------------------------------------*\n    " Change Log\n    "\n    " Date       Author          Description\n    " ---------- --------------- -------------------------------------*\n    " YYYY-MM-DD x               Reference and Description\n    "******************************************************************\n    ...\n  ENDMETHOD.                    "initialization\n</Text></Expand><Expand key="ife"><Descr>If (§) Else</Descr><Text>IF |.\n%SurroundedText%\nELSE.\n\nENDIF.</Text></Expand><Expand key="*rephdr"><Descr>Reportbeschreibung</Descr><Text>************************************************************************\n* Author        : %My name, NOT user%\n* Date created  : %Date in format YYYY-MM-DD%\n* Referemce     : %Project, RfC, Change, OIM, ...%\n*----------------------------------------------------------------------*\n* Description   : %Description%\n*                  \n************************************************************************\n</Text></Expand><Expand key="define"><Descr>Define (§)</Descr><Text>DEFINE |.\n%SurroundedText%\nEND-OF-DEFINITION.</Text></Expand><Expand key="loop"><Descr>Loop (§)</Descr><Text>LOOP AT |.\n%SurroundedText%\nENDLOOP.</Text></Expand><Expand key="*boolean"><Descr>Interface und Alias für Boolsche Kz.</Descr><Text>*   i n t e r f a c e s\n    INTERFACES:\n      zif_bc_const_boolean.\n\n*   a l i a s e s\n    ALIASES:\n*     Boolean flags\n      mc_true              FOR  if_salv_c_bool~true,\n      mc_false             FOR  if_salv_c_bool~false.\n</Text></Expand><Expand key="*asov"><Descr>At selection-screen on value-request</Descr><Text>*---------------------------------------------------------------------*\n*     a t   s e l e c t i o n - s c r e e n   o n   VALUE-REQUEST  \n*---------------------------------------------------------------------*\nat selection-screen on value-request for %selection_param_name%.\n  "Value request help for |....\n  %class_name%=&gt;at_sel_screen_on_vr_%selection_param_name%.\n\n\n*     Execute value help\n      at_sel_screen_on_vr_%selection_param_name%,\n\n  METHOD at_sel_screen_on_vr_%selection_param_name%.\n    "-----------------------------------------------------------------*\n    "   Execute value help\n    "-----------------------------------------------------------------*\n    " Change Log\n    "\n    " Date       Author          Description\n    " ---------- --------------- -------------------------------------*\n    " YYYY-MM-DD x               Reference and Description\n    "******************************************************************\n    ...\n  ENDMETHOD.                    "at_sel_screen_on_vr_%selection_param_name%\n\n</Text></Expand><Expand key="*statmeth"><Descr>Declaration static methods</Descr><Text>*   s t a t i c   m e t h o d s\n    CLASS-METHODS:\n</Text></Expand><Expand key="*statdata"><Descr>Declaration static data</Descr><Text>*   s t a t i c   a t t r i b u t e s\n    CLASS-DATA:\n</Text></Expand><Expand key="*msgty"><Descr>Constants for message types (E, I, S, W)</Descr><Text>*   i n t e r f a c e s\n    INTERFACES:\n      if_xo_const_message.\n\n*   a l i a s e s\n    ALIASES:\n*     Message types\n      mc_msgty_e           FOR  if_xo_const_message~error,\n      mc_msgty_i           FOR  if_xo_const_message~info,\n      mc_msgty_s           FOR  if_xo_const_message~success,\n      mc_msgty_w           FOR  if_xo_const_message~warning.\n</Text></Expand><Expand key="region"><Descr>Region (§)</Descr><Text>"$ Region %Region Name%\n%SurroundedText%\n"$ Endregion %Region Name%</Text></Expand><Expand key="case"><Descr>Case (§)</Descr><Text>CASE |.\n	WHEN .\n	WHEN .\n	WHEN OTHERS.\nENDCASE.</Text></Expand><Expand key="*instevt"><Descr>Instance event declaration</Descr><Text>*   i n s t a n c e   e v e n t s\n    EVENTS:\n      |</Text></Expand><Expand key="*selflds"><Descr>Select-Options and parameters</Descr><Text>* s e l e c t i o n   f i e l d s\n*- ... ---------------------------------------------------------------*\n*- Data selection ----------------------------------------------------*\nselection-screen begin of block %block_id% with frame \n                                    title text-%block_id%.\nparameters:\n* Description\n  p_...          x..                 option,\n* Description\n  p_cb...        as   checkbox       option,\n* Description\n  p_rb...        radiobutton         option,\n\nselect-options:\n* Description\n  so_...         for  x..            option,\n\n*SELECTION-SCREEN  BEGIN OF LINE.\n*PARAMETERS\n** Description\n*  p_cb_x..       AS   CHECKBOX       DEFAULT 'X'.\n*SELECTION-SCREEN: COMMENT 03(30) FOR FIELD p_cb_x..,\n*                  POSITION 35.\n*PARAMETERS\n** Description\n*  p_cb_x..       AS   CHECKBOX.\n*SELECTION-SCREEN: COMMENT 38(30) FOR FIELD p_cb_x..,\n*                  POSITION 70.\n*  parameters\n**   Description\n*    p_...          ...                 [optioin]\n*  selection-screen  comment 73(30) for field p_...\n*SELECTION-SCREEN  END   OF LINE.\nselection-screen end   of block %block_id%.\n\n</Text></Expand><Expand key="*creexc"><Descr>Create exception method call</Descr><Text>DATA(%lx_exception_instance%) =\n      CAST %name_exception_class_in_upper_case%(\n               zcx_ca_error=&gt;create_exception(\n                                        iv_excp_cls   = '%name_exception_class_in_upper_case%'\n                                        iv_function   = 'xxx'\n                                        iv_subroutine = 'xxx'\n                                        iv_class      = 'xxx'\n                                        iv_method     = 'xxx'\n                                        is_msg        = corresponding #( syst )\n                                        is_return     = value #(  )\n                                        it_return     = x\n                                        iv_subrc      = sy-subrc\n                                        ix_error      = lx_error ) )  ##no_text.\nif %lx_exception_instance% IS BOUND.\n  RAISE EXCEPTION %lx_exception_instance%.\nENDIF.</Text></Expand><Expand key="*interf"><Descr>Definition interfaces</Descr><Text>*   i n t e r f a c e s\n    INTERFACES:\n      x..\n</Text></Expand><Expand key="*atsel"><Descr>Report event AT SELECTION-SCREEN</Descr><Text></Text></Expand><Expand key="*attr"><Descr>Definition global attributes</Descr><Text>**     o b j e c t   r e f e r e n c e s\n**     description\n*      mo_...               TYPE REF TO x..\n*\n**     d a t a   r e f e r e n c e s\n**     description\n*      mr_...               TYPE REF TO data,\n*\n**     t a b l e s\n**     description\n*      mt_...               TYPE x.. \n*\n**     s t r u c t u r e s\n**     description\n*      ms_...               TYPE x..\n*\n**     s i n g l e   v a l u e s\n**     description\n*      mv_...               TYPE x..\n*\n</Text></Expand><Expand key="*protsec"><Descr>Declaration protected section</Descr><Text>* P R O T E C T E D   S E C T I O N\n  PROTECTED SECTION.\n\n</Text></Expand></EXPANDS>



    • Hey. I'm trying this and I don't get auto completion on the *something. Everything else with no * works.


      Thanks for the tips.


      Sap gui 7400.3.15.1131

      • Hi,

        in the GUI editor you need to enter the complete and correct phrase and then press the tab key.

        Have you checked if you see all the snippets in the editor settings -> see attached picture? If not, it seems you have placed the file abap_user.xml at the wrong place or may be it has not this name.

        BR, Jens