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.

start-of-selection.

fs_code 'PROGRAM DYNAMIC_FORMS.'.
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'.

call function 'EDITOR_TABLE_WITH_STATUS'
 exporting
*   DISPLAY                  = ' '
*   NAME                     = ' '
   program                  sy-repid
   callback_usercom         
'UCOMM'
   callback_set_pfkey       'SET_PF'
   title_text               'Our test editor'
 importing
   changed                  f_changed
*   SUBRC                    = SUBRC
  tables
    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'
      exporting
        functioncode           'ED_INS_FRAME'
      exceptions
        function_not_supported 1
        others                 2.
    if sy-subrc <> 0.

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

    endif.
  endif.
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'
        exporting
          inctoo                        space
*       IMPORTING
*         INDENTATION_MAYBE_WRONG       = INDENTATION_MAYBE_WRONG
        tables
          ntext                         ft_sourcetab_pretty[]
          otext                         
ft_sourcetab[]
       
exceptions
         enqueue_table_full            1
         include_enqueued              2
         include_readerror             3
         include_writeerror            4
         others                        5
                .
      if sy-subrc <> 0.
      endif.
      fo_source->set_source_tabexporting source ft_sourcetab_pretty[]
                                not_actualize_control 
'X' ).
      <editor>->visualize_source( ).
  endcase.

  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!