понедельник, 26 ноября 2012 г.

Импорт данных из буфера обмена

Для этого используем класс CL_GUI_FRONTEND_SERVICES и его метод CLIPBOARD_IMPORT.


  types: begin of ty_s_senderline
       
, line(4096)         type c
       
, end of ty_s_senderline
       
, ty_t_sender         type ty_s_senderline  occurs 0.

data: t_file_table_clip  type ty_t_sender. " таблица приемник

  "получаем значение из буфера
  call method cl_gui_frontend_services=>clipboard_import
    
importing
      
data                 = t_file_table_clip
    
exceptions
      cntl_error           
= 1
      error_no_gui         
= 2
      not_supported_by_gui 
= 3
      
others               = 4.




В принципе это все, но может возникнуть проблема при копировании таблиц в буфер. Табличные значения разделяются специальным символом #. 



Этот символ нельзя заменить обычным REPLACE, SHIFT и т.п., по крайней мере у меня не получилось. Но выход есть, я использовал класс CL_ABAP_CHAR_UTILITIES.

replace all occurrences of cl_abap_char_utilities=>horizontal_tab in t_file_table_clip-line with '@'.

После этих манипуляций значения можно раскидывать по полям своей внутренней таблицы.