ABAPSTEMP 06

  1. CLASS zcl_editor DEFINITION.
  2.  
  3.   PUBLIC SECTION.
  4.  
  5.     CONSTANTS c_version TYPE string VALUE 'v01.03.20250528'.
  6.  
  7. *--[ Por si hay que tocar desde fuera
  8.     DATA: t_lines TYPE STANDARD TABLE OF string,
  9.           t_tab   TYPE STANDARD TABLE OF tline.
  10.  
  11.     METHODS: constructor IMPORTING in_head      TYPE thead
  12.                                    in_line_size TYPE tdlinesize OPTIONAL
  13.                                    i_titulo      type text255 optional
  14.                                    i_readonly  type xfeld OPTIONAL,
  15.       readonly IMPORTING i_modo type xfeld,
  16.       save.
  17.  
  18.  
  19.   PRIVATE SECTION.
  20.     DATA: out_head TYPE thead,
  21.           l_head   TYPE thead,
  22.           i_titulo type string,
  23.           to_save  TYPE xfeld,
  24.           l_readonly type xfeld.
  25.  
  26.     METHODS:
  27.       read_text,
  28.       call_editor IMPORTING i_titulo TYPE text255 OPTIONAL,
  29.       sample.
  30.  
  31. ENDCLASS.
  32.  
  33.  
  34. CLASS zcl_editor IMPLEMENTATION.
  35.  
  36.   method readonly.
  37.      l_readonly = i_modo.
  38.   endmethod.
  39.  
  40.   METHOD constructor.
  41.     MOVE-CORRESPONDING in_head TO l_head.
  42.     IF in_line_size IS SUPPLIED.
  43.       l_head-tdlinesize = in_line_size.
  44.     ELSE.
  45.       l_head-tdlinesize = 72.
  46.     ENDIF.
  47.     if i_readonly is SUPPLIED.
  48.       readonly( i_readonly ).
  49.     endif.
  50.     read_text(  ).
  51.     call_editor( i_titulo ).
  52.   ENDMETHOD.
  53.  
  54.   METHOD read_text.
  55.     CLEAR to_save.
  56.     CALL FUNCTION 'READ_TEXT'
  57.       EXPORTING
  58.         id                      = l_head-tdid
  59.         language                = l_head-tdspras
  60.         name                    = l_head-tdname
  61.         object                  = l_head-tdobject
  62.       IMPORTING
  63.         header                  = out_head
  64. *       OLD_LINE_COUNTER        =
  65.       TABLES
  66.         lines                   = t_tab
  67.       EXCEPTIONS
  68.         id                      = 1
  69.         language                = 2
  70.         name                    = 3
  71.         not_found               = 4
  72.         object                  = 5
  73.         reference_check         = 6
  74.         wrong_access_to_archive = 7
  75.         OTHERS                  = 8.
  76.     IF sy-subrc EQ 0.
  77.       LOOP AT t_tab INTO DATA(bx).
  78.         APPEND bx-tdline TO t_lines.
  79.       ENDLOOP.
  80.     ELSE.
  81.       MOVE-CORRESPONDING l_head TO out_head.
  82.     ENDIF.
  83.   ENDMETHOD.
  84.  
  85.   METHOD save.
  86.     DATA: l_vacia TYPE i.
  87.     CHECK to_save = abap_true.
  88.     CHECK l_readonly IS INITIAL.
  89.  
  90.     REFRESH t_tab.
  91.     clear l_vacia.
  92.     LOOP AT t_lines INTO DATA(ax).
  93.       t_tab = VALUE #( BASE t_tab ( tdformat = '*'
  94.                                     tdline   = ax ) ).
  95.       IF ax IS INITIAL.
  96.         ADD 1 TO l_vacia.
  97.       ENDIF.
  98.  
  99.     ENDLOOP.
  100.  
  101.     IF lines( t_tab ) = l_vacia.
  102.       CALL FUNCTION 'DELETE_TEXT'
  103.         EXPORTING
  104.           id        = l_head-tdid
  105.           language  = l_head-tdspras
  106.           name      = l_head-tdname
  107.           object    = l_head-tdobject
  108.         EXCEPTIONS
  109.           not_found = 1
  110.           OTHERS    = 2.
  111.  
  112.     ELSE.
  113.       CALL FUNCTION 'SAVE_TEXT'
  114.         EXPORTING
  115.           header   = l_head
  116.           insert   = 'I'
  117.         TABLES
  118.           lines    = t_tab
  119.         EXCEPTIONS
  120.           id       = 1
  121.           language = 2
  122.           name     = 3
  123.           object   = 4
  124.           OTHERS   = 5.
  125.     ENDIF.
  126.  
  127.   ENDMETHOD.
  128.  
  129.   METHOD call_editor.
  130.     data: l_titulo type text255.
  131.     l_titulo = 'Editor de notas'.
  132.     if i_titulo is not INITIAL.
  133.        l_titulo = i_titulo.
  134.     endif.
  135.     CALL FUNCTION 'TERM_CONTROL_EDIT'
  136.       EXPORTING
  137.         titel          = l_titulo
  138.         langu          = sy-langu
  139.       TABLES
  140.         textlines      = t_lines
  141.       EXCEPTIONS
  142.         user_cancelled = 1
  143.         OTHERS         = 2.
  144.     IF sy-subrc EQ 0 and l_readonly is INITIAL.
  145.       to_save = abap_true.
  146.     ENDIF.
  147.   ENDMETHOD.
  148.  
  149.   METHOD sample.
  150.     DATA(editor) = NEW zcl_editor( in_head = VALUE #( tdid     = 'ST'
  151.                                                      tdspras  = sy-langu
  152.                                                      tdobject = 'TEXT'
  153.                                                      tdname   = 'ZINI_001' )
  154.                                    i_titulo = 'Test'
  155.                                    i_readonly = abap_false
  156.                                     ).
  157. *--[ Si se quiere grabar, ya se sabe
  158.     editor->save( ).
  159.   ENDMETHOD.
  160.  
  161. ENDCLASS.