YUPLOAD_UPLOAD_LONGTEXT

<< Click to Display Table of Contents >>

Navigation:  All About ABAP Technique > ABAP Source Code >

YUPLOAD_UPLOAD_LONGTEXT

*&---------------------------------------------------------------------*
*& Report  YO_UPLOAD_LONGTEXT
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
 
REPORT  yo_upload_longtext.
 
*------------------standard common includes----------------------------*
* ALV common functions
INCLUDE yo_alv_hier_common.
 
* BDC common Functions
*INCLUDE yo_bdc.
*------------------standard common includes---ends---------------------*
 
 
TABLES t001lmara.
 
TYPES BEGIN OF ty_detail,
          p_obj LIKE stxh-tdobject,
          p_id LIKE stxh-tdid,
          p_name LIKE stxh-tdname,
          recno  LIKE  sy-tabix,
          linetext LIKE tline-tdline,
 
          exp,
          chbox,
          icon(4),
        END OF ty_detail.
 
DATABEGIN OF gi_data OCCURS 0,
 
        p_obj LIKE stxh-tdobject,
        p_id LIKE stxh-tdid,
        p_name LIKE stxh-tdname,
        p_text LIKE tline-tdline,
        p_delold,
 
        exp,
        chbox,
        icon(4),
        msg(200),
        msg1(200),
        msg2(200),
        msg3(200),
      END OF gi_data.
 
DATA gi_detail TYPE STANDARD TABLE OF ty_detail WITH HEADER LINE,
       gi_header LIKE STANDARD TABLE OF gi_data WITH HEADER LINE.
 
DATA gv_string(256),
       gv_testrun.
 
DATA BEGIN OF gi_xls OCCURS 1,
         tx_line LIKE gv_string.
DATA END OF gi_xls.
DATA gi_excel LIKE STANDARD TABLE OF alsmex_tabline WITH HEADER LINE.
DATA gi_zemp  LIKE STANDARD TABLE OF gi_xls WITH HEADER LINE.
 
 
*----------------------------------------------------------*
* Global Variable                                          *
*----------------------------------------------------------*
TYPE-POOLSiconole2.
 
FIELD-SYMBOLS <mnam> TYPE ANY.
FIELD-SYMBOLS <intab> TYPE ANY.
 
*&---------------------------------------------------------------------*
*& selection-screen -> Selection
*&---------------------------------------------------------------------*
 
SELECTION-SCREEN BEGIN OF BLOCK WITH FRAME TITLE cm_tlt01.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 01(20cm_file FOR FIELD p_file.
PARAMETERSp_file(128OBLIGATORY DEFAULT 'D:\'.
SELECTION-SCREEN END OF LINE.
 
*SELECTION-SCREEN BEGIN OF LINE.
*SELECTION-SCREEN COMMENT 01(31) cm_col01 FOR FIELD p_col01.
*PARAMETERS: p_col01(4) TYPE n DEFAULT 1.
*SELECTION-SCREEN COMMENT 41(10) cm_col02 FOR FIELD p_col02.
*PARAMETERS: p_col02(4) TYPE n DEFAULT 25.
*SELECTION-SCREEN END OF LINE.
 
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 01(31cm_row01 FOR FIELD p_row01.
PARAMETERSp_row01(4TYPE DEFAULT 3.
SELECTION-SCREEN COMMENT 41(10cm_row02 FOR FIELD p_row02.
PARAMETERSp_row02(4TYPE DEFAULT 9999.
SELECTION-SCREEN END OF LINE.
 
 
*SELECTION-SCREEN BEGIN OF LINE.
*SELECTION-SCREEN COMMENT 1(18) cm_mode FOR FIELD pa_mode.
PARAMETERS pa_mode LIKE ctu_params-dismode NO-DISPLAY." OBLIGATORY DEFAULT 'N'.
*SELECTION-SCREEN COMMENT 70(21) gv_info.
*SELECTION-SCREEN END OF LINE.
 
SELECTION-SCREEN END OF BLOCK a.
 
*----------------------------------------------------------------------*
* INITIALIZATION.
*----------------------------------------------------------------------*
INITIALIZATION.
  PERFORM fm_initialization.
 
 
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
  PERFORM fm_val_req_fname.
 
*----------------------------------------------------------------------*
* START-OF-SELECTION.
*----------------------------------------------------------------------*
START-OF-SELECTION.
  CHECK p_file IS NOT INITIAL.
 
  PERFORM fm_collect_data.
  PERFORM fm_process_data.
  PERFORM fm_validate_data.
  PERFORM fm_display_data.
*  PERFORM FM_UPLOAD_DATA.
*
*  PERFORM FM_REFRESH_INTAB.
 
 
 
 
*&---------------------------------------------------------------------*
*&      Form  fm_val_req_fname
*&---------------------------------------------------------------------*
FORM fm_val_req_fname .
  DATAlv_program_name  LIKE sy-repid,
        lv_dynpro_number LIKE sy-dynnr,
        lv_field_name    LIKE dynpread-fieldname,
        lv_file_name     LIKE ibipparms-path.
 
  lv_program_name  sy-repid.
  lv_dynpro_number sy-dynnr.
  lv_field_name    'P_FNAME'.
 
  PERFORM fm_f4_filename
     USING    lv_program_name
              lv_dynpro_number
              lv_field_name
     CHANGING lv_file_name.
 
  p_file lv_file_name.
ENDFORM.                    " fm_val_req_fname
 
*&---------------------------------------------------------------------*
*&      Form  fm4_filename
*&---------------------------------------------------------------------*
FORM fm_f4_filename
   USING    p_e_program_name
            p_e_dynpro_number
            p_e_field_name
   CHANGING p_i_file_name.
 
  CALL FUNCTION 'F4_FILENAME'
    EXPORTING
      program_name  p_e_program_name
      dynpro_number p_e_dynpro_number
      field_name    p_e_field_name
    IMPORTING
      file_name     p_i_file_name.
ENDFORM.                    " fm4_filename
 
 
*&---------------------------------------------------------------------*
*&      Form  fm_gui_upload
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_T_DATA_TAB  text
*      -->P_E_FILENAME  text
*----------------------------------------------------------------------*
FORM fm_gui_upload TABLES   p_t_data_tab
                    USING    p_e_filename.
 
  CALL FUNCTION 'GUI_UPLOAD'
    EXPORTING
      filename                p_e_filename
      filetype                'DAT'
*    IMPORTING
*      filelength              = p_i_filelength
*      header                  = p_i_header
    TABLES
      data_tab                p_t_data_tab
    EXCEPTIONS
      file_open_error         1
      file_read_error         2
      no_batch                3
      gui_refuse_filetransfer 4
      invalid_type            5
      no_authority            6
      unknown_error           7
      bad_data_format         8
      header_not_allowed      9
      separator_not_allowed   10
      header_too_long         11
      unknown_dp_error        12
      access_denied           13
      dp_out_of_memory        14
      disk_full               15
      dp_timeout              16
      OTHERS                  17.
 
  IF sy-subrc <> 0.
    MESSAGE ID   sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
 
  ENDIF.
 
ENDFORM.                    " fm_gui_upload
 
*&---------------------------------------------------------------------*
*&      Form  FM_GET_DATA_EXCEL_OBJECT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_GI_EXCEL  text
*      -->P_PA_FNAME  text
*      -->P_PA_COL01  text
*      -->P_PA_COL02  text
*      -->P_PA_ROW01  text
*      -->P_PA_ROW02  text
*----------------------------------------------------------------------*
FORM fm_get_data_excel_object  TABLES   p_gi_excel
                               USING    p_pa_fname
                                        p_pa_col01
                                        p_pa_col02
                                        p_pa_row01
                                        p_pa_row02.
  DATA lv_col01 TYPE i,
         lv_col02 TYPE i,
         lv_row01 TYPE i,
         lv_row02 TYPE i.
 
  lv_col01 p_pa_col01.
  lv_col02 p_pa_col02.
  lv_row01 p_pa_row01.
  lv_row02 p_pa_row02.
 
  PERFORM fm_gui_message USING 'Open Excel Files and Call Object ...' ''.
  CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
    EXPORTING
      filename                p_pa_fname
      i_begin_col             lv_col01
      i_begin_row             lv_row01
      i_end_col               lv_col02
      i_end_row               lv_row02
    TABLES
      intern                  p_gi_excel
    EXCEPTIONS
      inconsistent_parameters 1
      upload_ole              2
      OTHERS                  3.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ELSE.
    PERFORM fm_gui_message USING 'Finish Reading Excel Data ...' ''.
  ENDIF.
ENDFORM.      "FM_GET_DATA_EXCEL_OBJECT
 
 
*&---------------------------------------------------------------------*
*&      Form  FM_PUT_DATA_ARRAY
*&---------------------------------------------------------------------*
FORM fm_put_data_array  TABLES   p_it_zemp .
 
  APPEND 'MATNR' TO  p_it_zemp.
  APPEND 'BISMT' TO  p_it_zemp.
  APPEND 'DESCR1' TO p_it_zemp.
  APPEND 'WERKS' TO  p_it_zemp.
  APPEND 'STTAG' TO  p_it_zemp.
 
*  APPEND 'PLNNR' TO  p_it_zemp.
  APPEND 'PLNAL' TO  p_it_zemp.
  APPEND 'DESCR2' TO p_it_zemp.
  APPEND 'VERWE' TO  p_it_zemp.
  APPEND 'STATU' TO  p_it_zemp.
 
  APPEND 'ARBPL' TO  p_it_zemp.
  APPEND 'STEUS' TO  p_it_zemp.
  APPEND 'BMSCH' TO  p_it_zemp.
*  APPEND 'MEINH' TO  p_it_zemp.
  APPEND 'VGW01' TO  p_it_zemp.
  APPEND 'VGE01' TO  p_it_zemp.
 
ENDFORM.                    " FM_PUT_DATA_ARRAY
 
*&---------------------------------------------------------------------*
*&      Form  FM_INSERT_DATA_TO_INTAB
*&---------------------------------------------------------------------*
FORM fm_insert_data_to_intab .
  DATA :   li_tamp LIKE STANDARD TABLE OF gi_xls WITH HEADER LINE,
 
           lv_cntr TYPE i,
           lv_pos  TYPE i,
           lv_num  TYPE i,
           lv_field(20TYPE c,
           lv_table(20TYPE c VALUE 'GI_DATA',
           lv_fname(30TYPE c,
           ppterid TYPE i.
 
  LOOP AT gi_excel.
    READ TABLE gi_zemp  INDEX gi_excel-col.
    lv_field gi_zemp-tx_line.
    CONCATENATE lv_table '-' lv_field INTO lv_fname.
    CONDENSE lv_fname.
    ASSIGN (lv_fnameTO <mnam>.
    CONDENSE gi_excel-value.
    TRANSLATE gi_excel-value TO UPPER CASE.
    <mnam> gi_excel-value.
 
    AT END OF row.
      lv_num 0.
      APPEND gi_data.
      CLEAR gi_data.
    ENDAT.
  ENDLOOP.
ENDFORM.                    " FM_INSERT_DATA_TO_INTAB
 
 
 
*&---------------------------------------------------------------------*
*&      Form  fm_refresh_intab
*&---------------------------------------------------------------------*
FORM fm_refresh_intab.
* here free all the internal table used in the program.
  REFRESHgi_data.
ENDFORM.                    " fm_refresh_intab
 
*&---------------------------------------------------------------------*
*&      Form  fm_gui_message
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->fu_text1   text
*      -->fu_text2   text
*----------------------------------------------------------------------*
FORM fm_gui_message USING    fu_text1 fu_text2.
  DATAld_text1(100)    TYPE c.
 
  CONCATENATE fu_text1 fu_text2 INTO ld_text1
              SEPARATED BY space.
  CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
    EXPORTING
      percentage 0
      text       ld_text1.
ENDFORM.                    " fm_gui_message
 
 
*&---------------------------------------------------------------------*
*&      Form  fm_display_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM fm_display_data.
  PERFORM fm_alv_reset_data.
 
*  Set ALV Parameters and Data
  PERFORM fm_alv_set_layout USING 'List Text'.
  PERFORM fm_alv_set_print.
  PERFORM fm_alv_set_column.
 
  gv_i_default 'X'.
  gv_i_save 'A'.
 
  PERFORM fm_alv_show_hier TABLES gi_header gi_detail.
 
ENDFORM.                    "fm_display_data
 
*&---------------------------------------------------------------------*
*&      Form  fm_alv_set_column
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM fm_alv_set_column.
 
*  Displaying Column by Fieldname
 
  PERFORM fm_alv_add_fieldcat USING 'GI_HEADER':
    'ICON'  'GI_HEADER' 'ICON'  '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' 'X' 'X' 'X',
                                                            "Screen 1
    'P_OBJ'     'GI_HEADER' 'P_OBJ'     '' '' '' '' '' 'Object Code' '' '' '' '' '' '' '' '' '' '' 'X' 'X',
    'P_ID'      'GI_HEADER' 'P_ID'      '' '' '' '' '' 'ID Text' '' '' '' '' '' '' '' '' '' '' 'X' 'X',
    'P_NAME'    'GI_HEADER' 'P_NAME'    '' '' '' '' '' 'NAME' '' '' '' '' '' '' '' '' '' '' 'X' 'X',
 
    'P_TEXT'    'GI_HEADER' 'P_TEXT'    '' '' '' '' '' 'Text (72 Char)' '' '' '' '' '' '' '' '' '' '' '' '',
    'P_DELOLD'  'GI_HEADER' 'P_DELOLD'  '' '' '' '' '' 'Del Old Text' '' '' '' '' '' '' '' '' '' '' '' '',
 
    'MSG'    'GI_HEADER'  'MSG' '' '' '' '' '' 'Message' '' '' '' '' '' '' '' '' '' '' '' ''.
*    'MSG1'   'GI_HEADER'  'MSG' '' '' '' '' '' 'Message' '' '' '' '' '' '' '' '' '' '' '' '',
*    'MSG2'   'GI_HEADER'  'MSG' '' '' '' '' '' 'Message' '' '' '' '' '' '' '' '' '' '' '' '',
*    'MSG3'   'GI_HEADER'  'MSG' '' '' '' '' '' 'Message' '' '' '' '' '' '' '' '' '' '' '' ''.
 
  CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
      EXPORTING
        i_internal_tabname           'GI_HEADER'
*     i_structure_name             = ''
      CHANGING
        ct_fieldcat                  gi_it_fieldcat[]
      EXCEPTIONS
        inconsistent_interface       1
        program_error                2
        OTHERS                       3.
 
*  Set Detail Column
  PERFORM fm_alv_add_fieldcat USING 'GI_DETAIL':
*    'P_OBJ'     'GI_DETAIL' 'P_OBJ'     '' '' '' '' '' 'Object Code' '' '' '' '' '' '' '' '' '' '' 'X' 'X',
*    'P_ID'      'GI_DETAIL' 'P_ID'      '' '' '' '' '' 'ID Text' '' '' '' '' '' '' '' '' '' '' 'X' 'X',
*    'P_NAME'    'GI_DETAIL' 'P_NAME'    '' '' '' '' '' 'NAME' '' '' '' '' '' '' '' '' '' '' 'X' 'X',
 
    'RECNO'     'GI_DETAIL' 'RECNO'    '' '' '' '' '' 'No' '' '' '' '' '' '' '' '' '' '' 'X' 'X',
    'LINETEXT'  'GI_DETAIL' 'LINETEXT'    '' '' '' '' '' 'Text' '' '' '' '' '' '' '' '' '' '' '' ''.
 
  CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
     EXPORTING
       i_internal_tabname           'GI_DETAIL'
*     i_structure_name             = '
     CHANGING
       ct_fieldcat                  gi_it_fieldcat[]
     EXCEPTIONS
       inconsistent_interface       1
       program_error                2
       OTHERS                       3.
 
*  Sort and Group by Field
*  CLEAR gi_it_sort.
*  gi_it_sort-fieldname = 'WERKS'. ">> Filled by Fieldname
*  gi_it_sort-up        = 'X'.     ">> 'X' = Ascending ; ' ' = Descending
*  gi_it_sort-subtot    = 'X'.
*  gi_it_sort-group     = '*'.     ">> '*' = Grouped by field ; ' ' = Not grouped by this field
*  APPEND gi_it_sort.
 
 
ENDFORM.                    "fm_alv_set_column
 
 
 
*&--------------------------------------------------------------------*
 
*&      Form  FM_USER_COMMAND
 
*&--------------------------------------------------------------------*
 
*       text
 
*---------------------------------------------------------------------*
 
FORM fm_alv_user_command USING fu_ucomm    LIKE sy-ucomm
                               fu_selfield TYPE slis_selfield.
 
  DATAlt_dynpread LIKE dynpread OCCURS WITH HEADER LINE,
        lv_ok_code  LIKE sy-ucomm.
 
 
  MOVE fu_ucomm TO lv_ok_code.
  CASE lv_ok_code.
    WHEN '&UPLOAD'.
      gv_testrun ' '.
      PERFORM fm_upload_data.
    WHEN '&TEST'.
      gv_testrun 'X'.
      PERFORM fm_upload_data.
    WHEN '&IC1'.
*      PERFORM fm_alv_event_double_click.
    WHEN '&ETA'.
*      PERFORM fm_alv_event_double_click.
    WHEN '&F03' OR '&F15' OR '&F12'.
 
  ENDCASE.
 
  MOVE 'X' TO fu_selfield-refresh.
 
ENDFORM.                    "FM_USER_COMMAND
 
*&---------------------------------------------------------------------*
*&      Form  fm_build_keyinfo
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->FU_KEYINFO text
*----------------------------------------------------------------------*
FORM fm_build_keyinfo  USING    fu_keyinfo TYPE slis_keyinfo_alv .
 
  fu_keyinfo-header01 'P_OBJ'.
  fu_keyinfo-header02 'P_ID'.
  fu_keyinfo-header03 'P_NAME'.
 
  fu_keyinfo-item01 'P_OBJ'.
  fu_keyinfo-item02 'P_ID'.
  fu_keyinfo-item03 'P_NAME'.
 
ENDFORM.                    "fm_build_keyinfo
 
*&---------------------------------------------------------------------*
*&      Form  fm_get_string_from_excel
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->FU_FNAME   text
*      -->FU_ROW01   text
*      -->FU_ROW02   text
*----------------------------------------------------------------------*
FORM fm_get_string_from_excel  USING fu_fname
                                     fu_row01
                                     fu_row02.
 
  TYPES BEGIN OF ty_ltext,
            line(5000),
          END OF ty_ltext.
 
  DATA lv_text    TYPE string,
         lv_loop_count TYPE i,
         lv_char_count TYPE n LENGTH 5,
         lv_line_count TYPE n LENGTH 5,
         lv_row     TYPE i,
         lv_column  TYPE i,
 
         lv_obj LIKE stxh-tdobject,
         lv_id LIKE stxh-tdid,
         lv_name LIKE stxh-tdname,
         lv_delold.
 
  DATA li_text TYPE STANDARD TABLE OF ty_ltext WITH HEADER LINE.
 
  "Excel Object Variable
  DATA application   TYPE  ole2_object,
         workbook      TYPE  ole2_object,
         range         TYPE  ole2_object,
         worksheet     TYPE  ole2_object,
         cell1         TYPE  ole2_object,
         cell2         TYPE  ole2_object,
         cell3         TYPE  ole2_object,
         cell4         TYPE  ole2_object,
         cell5         TYPE  ole2_object.
 
 
  CREATE OBJECT application 'Excel.Application'.
  IF sy-subrc <> 0.
    EXIT.
  ENDIF.
 
  CALL METHOD OF application 'Workbooks' workbook.
  CALL METHOD OF workbook 'Open'
    EXPORTING
    #1 fu_fname.
 
  GET PROPERTY OF  application 'ACTIVESHEET' worksheet.
 
  REFRESH gi_headergi_detail.
 
  lv_row fu_row01.
 
  lv_loop_count fu_row02 fu_row01.
 
  DO lv_loop_count TIMES.
    CLEAR gi_headergi_detaillv_textlv_column,
            lv_objlv_idlv_namelv_textlv_delold.
 
    "Add Data Detail
    "Column 1 - Object Code
    CALL METHOD OF worksheet 'Cells' cell1
      EXPORTING
      #1 lv_row
      #2 1.
    CALL METHOD OF cell1 'Value' lv_obj.
    gi_header-p_obj lv_obj.
 
    IF lv_obj IS INITIAL.
      EXIT.
    ENDIF.
 
    "Column 2 - ID Text
    CALL METHOD OF worksheet 'Cells' cell2
      EXPORTING
      #1 lv_row
      #2 2.
    CALL METHOD OF cell2 'Value' lv_id.
    gi_header-p_id lv_id.
 
    "Column 3 - Name
    CALL METHOD OF worksheet 'Cells' cell3
      EXPORTING
      #1 lv_row
      #2 3.
    CALL METHOD OF cell3 'TEXT' lv_name.
    gi_header-p_name lv_name.
    "--------------------------------------------------------------------------------
 
    "Add Data Detail Text
    "Column 5 - Long Text
    CALL METHOD OF worksheet 'Cells' cell5
      EXPORTING
      #1 lv_row
      #2 4.
    CALL METHOD OF cell5 'Text' lv_text.
 
    SPLIT lv_text AT cl_abap_char_utilities=>newline"Used char 13 as Separator
 
    INTO TABLE li_text.
    LOOP AT li_text .
      MOVE-CORRESPONDING gi_header TO gi_detail.
      gi_detail-linetext li_text-line.
      gi_detail-recno sy-tabix.
      APPEND gi_detail.
    ENDLOOP.
 
 
    lv_char_count STRLENlv_text ).
    lv_line_count LINESli_text ).
    CONCATENATE 'Total : Char(s) =' lv_char_count 'Line(s) = ' lv_line_count
             INTO gi_header-p_text
     SEPARATED BY space.
 
    "----------------------------------------------------------------------------------
 
    "Column 5 - Delete Old Text
    CALL METHOD OF worksheet 'Cells' cell3
      EXPORTING
      #1 lv_row
      #2 5.
    CALL METHOD OF cell3 'Value' lv_delold.
    gi_header-p_delold lv_delold.
 
    APPEND gi_header.
 
 
    ADD TO lv_row.
 
  ENDDO.
 
  "Quit and Close Excel File
  CALL METHOD OF application 'QUIT'.
 
ENDFORM.                    "fm_get_string_from_excel
 
 
*&---------------------------------------------------------------------*
*&      Form  fm_initialization
*&---------------------------------------------------------------------*
FORM fm_initialization .
  cm_tlt01 'File Location'.
  cm_file  'File Location'.
*  cm_col01 = 'Start column'.
*  cm_col02 = 'End column'.
  cm_row01 'Start Row'.
  cm_row02 'End Row'.
*  cm_mode  = 'Process Mode'.
 
ENDFORM.                    " fm_initialization
 
*&---------------------------------------------------------------------*
*&      Form  fm_collect_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM fm_collect_data.
*  PERFORM fm_get_data_excel_object TABLES gi_excel
*                                    USING p_file
*                                          p_col01 p_col02
*                                          p_row01 p_row02.
*  PERFORM fm_put_data_array TABLES gi_zemp.
*  PERFORM fm_insert_data_to_intab.
  PERFORM fm_get_string_from_excel  USING p_file
                                          p_row01
                                          p_row02.
 
ENDFORM.                    " fm_collect_data
 
*&---------------------------------------------------------------------*
*&      Form  fm_process_data_im
*&---------------------------------------------------------------------*
FORM fm_process_data.
  SORT gi_header BY p_obj p_id p_name.
  DELETE ADJACENT DUPLICATES FROM gi_header
  COMPARING p_obj p_id p_name.
ENDFORM.                    " fm_process_data_im
 
 
*&---------------------------------------------------------------------*
*&      Form  fm_validate_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM fm_validate_data.
  LOOP AT gi_header.
 
    IF gi_header-p_obj IS INITIAL.
      gi_header-icon icon_led_red.
      gi_header-msg 'Object Code cannot empty !!'.
      gi_header-chbox ' '.
    ELSEIF gi_header-p_id IS INITIAL.
      gi_header-icon icon_led_red.
      gi_header-msg 'ID Text cannot empty !!'.
      gi_header-chbox ' '.
    ELSEIF gi_header-p_name IS INITIAL.
      gi_header-icon icon_led_red.
      gi_header-msg 'Object Name cannot empty !!'.
      gi_header-chbox ' '.
    ELSE.
      gi_header-icon icon_led_green.
      gi_header-msg 'Ready to Upload !!'.
      gi_header-chbox 'X'.
    ENDIF.
 
    MODIFY gi_header.
  ENDLOOP.
 
ENDFORM.                    "fm_validate_data
 
*&---------------------------------------------------------------------*
*&      Form  fm_upload_data_im
*&---------------------------------------------------------------------*
FORM fm_upload_data .
  DATA lv_subrc LIKE sy-subrc.
  data li_text LIKE STANDARD TABLE OF tline WITH HEADER LINE.
 
  DATA lv_count(6),
         lv_index(6),
         lv_text1(20).
 
  lv_count LINESgi_header ).
  CONCATENATE '/' lv_count INTO lv_text1.
 
  LOOP AT gi_header WHERE chbox 'X' AND
                          icon  icon_led_green.
 
    refresh li_text.
    LOOP AT gi_detail WHERE p_obj  gi_header-p_obj and
                            p_id   gi_header-p_id  and
                            p_name gi_header-p_name.
      li_text-tdformat '*'.
      li_text-tdline   gi_detail-linetext.
      APPEND li_text.
    ENDLOOP.
 
    PERFORM fm_insert_text_single TABLES li_text
                                  USING gi_header-p_name
                                        gi_header-p_id
                                        gi_header-p_obj
                                        gi_header-p_delold
                                  CHANGING lv_subrc.
 
    IF lv_subrc 0.
      gi_header-msg 'Succeed.'.
      gi_header-icon icon_checked.
    ELSE.
      gi_header-msg 'Failed.'.
      gi_header-icon icon_incomplete.
    ENDIF.
    MODIFY gi_header.
 
    ADD TO lv_index.
    PERFORM fm_gui_message USING lv_index lv_text1.
 
  ENDLOOP.
 
ENDFORM.                    " fm_upload_data
 
*&---------------------------------------------------------------------*
*&      Form  fm_insert_text_single
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->FU_NAME    text
*      -->FU_ID      text
*      -->FU_OBJ     text
*      -->FU_TEXT    text
*      -->FU_DELOLD  text
*      -->FC_SUBRC   text
*----------------------------------------------------------------------*
FORM fm_insert_text_single TABLES ft_text STRUCTURE tline
                           USING fu_name
                                 fu_id
                                 fu_obj
                                 fu_delold
                           CHANGING fc_subrc.
 
  DATA lv_line_count TYPE i,
         lv_ltxa1 LIKE plpo-ltxa1,
         lv_ltxa2 LIKE plpo-ltxa2,
 
         lw_stxh LIKE stxh,
         lw_textheader LIKE thead.
 
  DATA li_text LIKE STANDARD TABLE OF tline WITH HEADER LINE.
 
  "Check Text
  SELECT SINGLE INTO lw_stxh FROM stxh
     WHERE tdobject fu_obj
       AND tdname   fu_name
       AND tdid     fu_id
       AND tdspras  sy-langu.
  IF sy-subrc 0.
 
    CALL FUNCTION 'READ_TEXT'
      EXPORTING
        id       fu_id
        language sy-langu
        name     fu_name
        object   fu_obj
      IMPORTING
        header   lw_textheader
      TABLES
        lines    li_text.
  ELSE.
    CALL FUNCTION 'INIT_TEXT'
      EXPORTING
        id       fu_id
        language sy-langu
        name     fu_name
        object   fu_obj
      IMPORTING
        header   lw_textheader
      TABLES
        lines    li_text.
  ENDIF.
 
  "Insert or Delete Text
  IF fu_delold 'X'.
    REFRESH li_text.
  ENDIF.
 
  LOOP AT ft_text.
    li_text-tdformat '*'.
    li_text-tdline   ft_text-tdline.
    APPEND li_text.
  ENDLOOP.
 
 
 
  "Save New Long Text
  lw_textheader-tdlinesize 72.
  lw_textheader-tdtxtlines lv_line_count.
  CALL FUNCTION 'SAVE_TEXT'
    EXPORTING
      header          lw_textheader
      savemode_direct 'X'
    TABLES
      lines           li_text.
 
  fc_subrc sy-subrc.
 
ENDFORM.                    "fm_insert_text_single