1 1 1 1 1 Rating 0% (0 Votes)

I had a thought one day to use a code saved in database table for easy change of some calculation rules and I've prepared code to run SE38 like editor for such code. Maybe some of you also had such need, so today I will explain briefly how to do this. I will use FM 'EDITOR_TABLE_WITH_STATUS' to display an editor which you know from SE38/SE80 , 'SAPGUI_SET_FUNCTIONCODE' for setting OK_CODE for editor, 'PRETTY_PRINTER' to make our code looks readable. I will also use one trick that allows you to assign data which is available in calling program but not in our function. But before we need to prepare our own GUI status with some basic buttons like 'Patern' or 'Pretty Printer'.

After we create status we can create the ABAP code:

report editor_test.

dataft_code type standard table of string.
datafs_code type char255.
datafs_zparm type zparm.
dataf_table type string.
dataf_fieldname type string.
dataf_msg(120type c.
datag_prog(8type c"temporary program name
datag_okcode type sy-ucomm.
dataf_changed type c.


append fs_code to ft_code.
fs_code 'form test changing f_string type string.'.
append fs_code to ft_code.
fs_code 'f_string = sy-uname.'.
append fs_code to ft_code.
fs_code 'endform.'.
append fs_code to ft_code.

call function 'RS_NAVIGATION_BREAK'.

*   DISPLAY                  = ' '
*   NAME                     = ' '
   program                  sy-repid
   callback_set_pfkey       'SET_PF'
   title_text               'Our test editor'
   changed                  f_changed
*   SUBRC                    = SUBRC
    content                  ft_code

*&      Form  set_pf
form set_pf ."using EDITORMODE.

  set pf-status 'OUR_GUISTATUS'.

  if g_okcode 'ED_INS_FRA'"Insert Pattern
    call function 'SAPGUI_SET_FUNCTIONCODE'
        functioncode           'ED_INS_FRAME'
        function_not_supported 1
        others                 2.
    if sy-subrc <> 0.

  elseif g_okcode 'PRETTY'.
    "set dummy okcode to avoid messages "Function not found"
    call function 'SAPGUI_SET_FUNCTIONCODE'
      FUNCTIONCODE                 'DUMY'
      others                       2.
    if sy-subrc <> 0.

endform.                    "set_pf

*&      Form  ucomm
form ucomm .

  field-symbols<editor> type ref to cl_wb_editor.
  datafo_source type ref to cl_wb_source.
  dataft_sourcetab type standard table of char255.
  dataft_sourcetab_pretty type standard table of char255.
  dataf_editor type string.
  f_editor '(SAPLS38E)ABAP_EDITOR'.
  assign (f_editorto <editor>.

  move sy-ucomm to  g_okcode.
  sy-ucomm 'DUMY'.

  case g_okcode.
    when 'PRETTY'.
      dataline  type i.
      <editor>->get_source_instanceimporting source_object fo_source ).
      fo_source->get_source_tabimporting source ft_sourcetab[] ).

      call function 'PRETTY_PRINTER'
          inctoo                        space
          ntext                         ft_sourcetab_pretty[]
         enqueue_table_full            1
         include_enqueued              2
         include_readerror             3
         include_writeerror            4
         others                        5
      if sy-subrc <> 0.
      fo_source->set_source_tabexporting source ft_sourcetab_pretty[]
'X' ).
      <editor>->visualize_source( ).

  suppress dialog.

endform.                    "ucomm


And here is our result :-)


You should take care about saving function but that should not be a problem as you already seen in the code how to get the table with the code to local table. You can also add more functions for example: 'Where used list' (FM 'RS_TOOL_ACCESS') or syntax check (SYNTAX-CHECK).

When you have your final code you can then generate a temporary program from it using syntax found below and then call dynamically your forms created there.

generate subroutine pool ft_code name g_prog message f_msg.

Have fun!