Advertisement
Guest User

Untitled

a guest
Oct 19th, 2015
676
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ABAP 9.78 KB | None | 0 0
  1.  
  2. REPORT z_exportimport.
  3.  
  4. TABLES dd03l.
  5.  
  6.  
  7. PARAMETERS: p_dir(80) DEFAULT 'D:\EXP\'. " default dir to hold data
  8.  
  9. SELECT-OPTIONS
  10.  : s_table FOR dd03l-tabname NO INTERVALS " table list to export import
  11.  .
  12.  
  13. PARAMETERS
  14.   : p_exp TYPE checkbox DEFAULT 'X'   " default data exported
  15.   , p_del TYPE checkbox               " purge  table before import
  16.   .
  17.  
  18.  
  19. DATA
  20.       :    filename TYPE string
  21.       ,    up_to_limit TYPE i
  22.       ,    dref        TYPE REF TO data
  23.  
  24.       ,      ifc TYPE lvc_t_fcat
  25.       ,      lv_count TYPE i
  26.       ,      lv_debug(1) TYPE c VALUE ''
  27.       ,      lt_keyfields TYPE TABLE OF   dd03p
  28.       ,      lv_key_count TYPE i
  29.  
  30.       ,      lv_tabname TYPE tabname16
  31.       ,      lt_where TYPE TABLE OF string
  32.       ,      ls_where TYPE string
  33.  
  34.       ,      lv_lines TYPE i
  35.       ,      lv_index TYPE sy-index
  36.  
  37.       ,      lv_open_bracket TYPE c
  38.       ,      lv_close_bracket TYPE c
  39.       ,      lv_eq_gt TYPE string
  40.       ,      lv_and_or TYPE string
  41.       ,      lv_tmp_str TYPE string
  42.  
  43.       ,      line_length TYPE i
  44.       ,      lt_files TYPE TABLE OF file_info
  45.       ,      lv_file_count TYPE i
  46.  
  47.       ,      lv_filter TYPE string
  48.       ,      lv_directory TYPE string
  49.       ,      lv_file_name TYPE string
  50.  
  51.       .
  52.  
  53.  
  54. FIELD-SYMBOLS
  55.                : <fs_keyfields>  TYPE dd03p
  56.                , <fs_field> TYPE ANY
  57.                , <fs_fcat> TYPE lvc_s_fcat
  58.                , <fs_file> TYPE file_info
  59.                , <it_outtab> TYPE STANDARD TABLE
  60.                , <wa_outtab> TYPE ANY
  61.  
  62.                .
  63.  
  64. AT SELECTION-SCREEN.
  65.  
  66.   CASE sy-ucomm.
  67.     WHEN 'I_CNOW_IT_IS_DANGEROUS'. " magic keyword must be submit on selection screen (where transaction name input)
  68.                                    " that confirm you understand you overwrite table in db
  69.       lv_debug ='X'.
  70.       MESSAGE 'GOD mode is on :)' TYPE 'S'.
  71.   ENDCASE.
  72.  
  73. START-OF-SELECTION.
  74.  
  75.   filename = p_dir.
  76.  
  77.   LOOP AT s_table.
  78.     CLEAR
  79.     : line_length
  80.     , lv_count
  81.     .
  82.  
  83.  
  84.     IF  lv_debug IS  INITIAL AND p_exp IS INITIAL .
  85.       CONTINUE.
  86.     ENDIF.
  87.  
  88.  
  89.     SELECT COUNT( * )
  90.       FROM dd03l
  91.       INTO lv_count
  92.       WHERE tabname = s_table-low.
  93.  
  94.     IF sy-subrc NE 0.
  95.       CONTINUE.
  96.     ENDIF.
  97.  
  98.     CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
  99.       EXPORTING
  100.         i_structure_name = s_table-low
  101.       CHANGING
  102.         ct_fieldcat      = ifc[].
  103.     IF sy-subrc <> 0.
  104.  
  105.     ENDIF.
  106.  
  107.     LOOP AT ifc ASSIGNING <fs_fcat>.
  108.       ADD <fs_fcat>-dd_outlen TO line_length.
  109.       ADD 1 TO line_length.
  110.     ENDLOOP.
  111.  
  112.     up_to_limit = 150 * 1024 * 1024 / line_length.
  113.  
  114.     lv_tabname = s_table-low.
  115.  
  116.     CALL FUNCTION 'CUTA_DD_TABLE_KEYFIELDS_GET'
  117.       EXPORTING
  118.         dbtab_name = lv_tabname
  119.       TABLES
  120.         keyfields  = lt_keyfields.
  121.  
  122.     DELETE lt_keyfields  WHERE fieldname EQ '.INCLUDE'.
  123.  
  124.     DESCRIBE TABLE lt_keyfields LINES lv_key_count.
  125.  
  126.     CALL METHOD cl_alv_table_create=>create_dynamic_table
  127.       EXPORTING
  128.         it_fieldcatalog = ifc
  129.       IMPORTING
  130.         ep_table        = dref.
  131.     ASSIGN dref->* TO <it_outtab>.
  132.  
  133.     CREATE DATA dref LIKE LINE OF <it_outtab>.
  134.     ASSIGN dref->* TO <wa_outtab>.
  135.  
  136.     IF p_exp IS NOT INITIAL.
  137.       CLEAR lv_count.
  138.       DO .
  139.         REFRESH lt_where.
  140.  
  141.         DO lv_key_count TIMES.
  142.           lv_index = sy-index.
  143.  
  144.           LOOP AT lt_keyfields ASSIGNING <fs_keyfields>.
  145.             IF sy-tabix > lv_index.
  146.               EXIT.
  147.             ENDIF.
  148.  
  149.             IF sy-tabix = 1.
  150.               lv_open_bracket = '('.
  151.             ELSE.
  152.               CLEAR lv_open_bracket.
  153.             ENDIF.
  154.  
  155.             IF sy-tabix = lv_index.
  156.               lv_close_bracket = ')'.
  157.               lv_eq_gt = 'GT'.
  158.             ELSE.
  159.               CLEAR lv_close_bracket.
  160.               lv_eq_gt = 'EQ'.
  161.             ENDIF.
  162.  
  163.             IF lv_index > 1.
  164.               IF sy-tabix > 1.
  165.                 lv_and_or = 'AND'.
  166.               ELSE.
  167.                 lv_and_or = 'OR'.
  168.  
  169.               ENDIF.
  170.             ELSE.
  171.               CLEAR lv_and_or.
  172.             ENDIF.
  173.             ASSIGN COMPONENT <fs_keyfields>-fieldname OF STRUCTURE <wa_outtab> TO <fs_field>.
  174.             lv_tmp_str = <fs_field>.
  175.  
  176.             CONCATENATE '''' lv_tmp_str '''' INTO lv_tmp_str.
  177.  
  178.             CONCATENATE lv_and_or lv_open_bracket
  179.                     <fs_keyfields>-fieldname
  180.                  lv_eq_gt lv_tmp_str lv_close_bracket
  181.  
  182.                  INTO ls_where SEPARATED BY space.
  183.  
  184.             APPEND ls_where TO lt_where.
  185.  
  186.           ENDLOOP.
  187.  
  188.         ENDDO.
  189.  
  190.  
  191.  
  192.         SELECT * FROM (s_table-low) INTO  TABLE <it_outtab>
  193.           UP TO up_to_limit ROWS
  194.           WHERE (lt_where)
  195.           ORDER BY PRIMARY KEY.
  196.         IF sy-subrc NE 0.
  197.           EXIT.
  198.         ENDIF.
  199.  
  200.         DESCRIBE TABLE <it_outtab> LINES lv_lines.
  201.         READ TABLE <it_outtab> INTO <wa_outtab> INDEX lv_lines.
  202.  
  203.  
  204.         ADD 1 TO lv_count.
  205.  
  206.         PERFORM wrap_download USING <it_outtab> s_table-low lv_count.
  207.         REFRESH <it_outtab>.
  208.  
  209.       ENDDO.
  210.  
  211.     ELSE.
  212.  
  213.       IF p_del IS NOT INITIAL.
  214.         DELETE FROM (s_table-low).
  215.       ENDIF.
  216.  
  217.       CONCATENATE s_table-low '*.dat' INTO lv_filter.
  218.       lv_directory = p_dir.
  219.  
  220.       CALL METHOD cl_gui_frontend_services=>directory_list_files
  221.         EXPORTING
  222.           directory                   = lv_directory
  223.           filter                      = lv_filter
  224.           files_only                  = 'X'
  225.         CHANGING
  226.           file_table                  = lt_files
  227.           count                       = lv_file_count
  228.         EXCEPTIONS
  229.           cntl_error                  = 1
  230.           directory_list_files_failed = 2
  231.           wrong_parameter             = 3
  232.           error_no_gui                = 4
  233.           not_supported_by_gui        = 5
  234.           OTHERS                      = 6.
  235.       IF sy-subrc <> 0.
  236.         MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
  237.                    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  238.       ENDIF.
  239.  
  240.  
  241.       LOOP AT lt_files ASSIGNING <fs_file>.
  242.         lv_file_name = <fs_file>-filename.
  243.         PERFORM wrap_upload USING lv_file_name  CHANGING <it_outtab>.
  244.         INSERT  (s_table-low) FROM TABLE <it_outtab> ACCEPTING DUPLICATE KEYS .
  245.  
  246.       ENDLOOP.
  247.  
  248.  
  249.       MESSAGE 'Data imported.' TYPE 'S'.
  250.  
  251.     ENDIF.
  252.  
  253.  
  254.   ENDLOOP.
  255. *&---------------------------------------------------------------------*
  256. *&      Form  wrap_download
  257. *&---------------------------------------------------------------------*
  258. *       text
  259. *----------------------------------------------------------------------*
  260. *      -->IT_TABLE   text
  261. *----------------------------------------------------------------------*
  262. FORM wrap_download USING it_table TYPE STANDARD TABLE
  263.                                   tab_name TYPE tabname
  264.                                   count TYPE i.
  265.  
  266.  
  267.   DATA
  268.         : lv_n(3) TYPE n
  269.         , filename TYPE string
  270.         .
  271.   lv_n = count.
  272.  
  273.   CONCATENATE  p_dir '\' tab_name lv_n '.dat' INTO filename.
  274.   CALL FUNCTION 'GUI_DOWNLOAD'
  275.     EXPORTING
  276.       filename                = filename
  277.       write_field_separator   = 'X'
  278.       dat_mode                = 'X'
  279.       trunc_trailing_blanks   = 'X'
  280.       confirm_overwrite       = 'X'
  281.     TABLES
  282.       data_tab                = it_table
  283.     EXCEPTIONS
  284.       file_write_error        = 1
  285.       no_batch                = 2
  286.       gui_refuse_filetransfer = 3
  287.       invalid_type            = 4
  288.       no_authority            = 5
  289.       unknown_error           = 6
  290.       header_not_allowed      = 7
  291.       separator_not_allowed   = 8
  292.       filesize_not_allowed    = 9
  293.       header_too_long         = 10
  294.       dp_error_create         = 11
  295.       dp_error_send           = 12
  296.       dp_error_write          = 13
  297.       unknown_dp_error        = 14
  298.       access_denied           = 15
  299.       dp_out_of_memory        = 16
  300.       disk_full               = 17
  301.       dp_timeout              = 18
  302.       file_not_found          = 19
  303.       dataprovider_exception  = 20
  304.       control_flush_error     = 21
  305.       OTHERS                  = 22.
  306.  
  307.   IF sy-subrc NE 0.
  308.     MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
  309.          WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  310.   ENDIF.
  311. ENDFORM.                    "wrap_download
  312.  
  313. *&---------------------------------------------------------------------*
  314. *&      Form  wrap_upload
  315. *&---------------------------------------------------------------------*
  316. *       text
  317. *----------------------------------------------------------------------*
  318. *      -->IT_TABLE   text
  319. *----------------------------------------------------------------------*
  320. FORM wrap_upload USING p_file_name TYPE string
  321.                  CHANGING it_table TYPE STANDARD TABLE.
  322.  
  323.   DATA
  324.         :filename TYPE string
  325.         .
  326.  
  327.   CONCATENATE p_dir '\' p_file_name INTO filename.
  328.   CALL FUNCTION 'GUI_UPLOAD'
  329.     EXPORTING
  330.       filename                = filename
  331.       has_field_separator     = 'X'
  332.       dat_mode                = 'X'
  333.     TABLES
  334.       data_tab                = it_table
  335.     EXCEPTIONS
  336.       file_open_error         = 1
  337.       file_read_error         = 2
  338.       no_batch                = 3
  339.       gui_refuse_filetransfer = 4
  340.       invalid_type            = 5
  341.       no_authority            = 6
  342.       unknown_error           = 7
  343.       bad_data_format         = 8
  344.       header_not_allowed      = 9
  345.       separator_not_allowed   = 10
  346.       header_too_long         = 11
  347.       unknown_dp_error        = 12
  348.       access_denied           = 13
  349.       dp_out_of_memory        = 14
  350.       disk_full               = 15
  351.       dp_timeout              = 16
  352.       OTHERS                  = 17.
  353.  
  354.   IF sy-subrc <> 0.
  355.     MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
  356.            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  357.   ENDIF.
  358.  
  359. ENDFORM.                    "wrap_upload
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement