Quantcast
Channel: SCN: Message List
Viewing all articles
Browse latest Browse all 9052

Re: How to direct update Internal Tables with ABAP

$
0
0

*----------------------------------------------------------------------*

***INCLUDE /xxxxI_CALC_FORMULA_F01.

*----------------------------------------------------------------------*

*&---------------------------------------------------------------------*

*&      Form  GET_DATA

*&---------------------------------------------------------------------*

FORM get_data .

 

*use the file name from config to extract the data and delete the headerline if it is checked to have header lines

   IF p_file1 IS NOT INITIAL.

 

     gv_file = p_file1.

 

     CALL METHOD cl_gui_frontend_services=>gui_upload

       EXPORTING

         filename                = gv_file

         has_field_separator     = 'X'

       CHANGING

         data_tab                = gt_config

       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

         not_supported_by_gui    = 17

         error_no_gui            = 18

         OTHERS                  = 19.

 

     IF sy-subrc <> 0.

       MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

                  WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

     ENDIF.

 

     IF p_head IS NOT INITIAL.

       DELETE gt_config INDEX 1.

     ENDIF.

     CLEAR gv_file.

   ENDIF.

 

   IF p_file2 IS NOT INITIAL.

*use the file name from mapping to extract the data and delete the headerline if it is checked to have header lines

     gv_file = p_file2.

 

     CALL METHOD cl_gui_frontend_services=>gui_upload

       EXPORTING

         filename                = gv_file

         has_field_separator     = 'X'

       CHANGING

         data_tab                = gt_map

       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

         not_supported_by_gui    = 17

         error_no_gui            = 18

         OTHERS                  = 19.

 

     IF sy-subrc <> 0.

       MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

                  WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

     ENDIF.

 

     IF p_head IS NOT INITIAL.

       DELETE gt_map INDEX 1.

     ENDIF.

 

     CLEAR gv_file.

 

   ENDIF.

   IF p_file3 IS NOT INITIAL.

*use the file name from structure to extract the data and delete the headerline if it is checked to have header lines

     gv_file = p_file3.

 

     CALL METHOD cl_gui_frontend_services=>gui_upload

       EXPORTING

         filename                = gv_file

         has_field_separator     = 'X'

       CHANGING

         data_tab                = gt_struc

       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

         not_supported_by_gui    = 17

         error_no_gui            = 18

         OTHERS                  = 19.

 

     IF sy-subrc <> 0.

       MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

                  WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

     ENDIF.

 

     IF p_head IS NOT INITIAL.

       DELETE gt_struc INDEX 1.

     ENDIF.

 

     CLEAR gv_file.

 

   ENDIF.

   IF p_file4 IS NOT INITIAL.

*use the file name from header to extract the data and delete the headerline if it is checked to have header lines

     gv_file = p_file4.

 

     CALL METHOD cl_gui_frontend_services=>gui_upload

       EXPORTING

         filename                = gv_file

         has_field_separator     = 'X'

       CHANGING

         data_tab                = gt_header

       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

         not_supported_by_gui    = 17

         error_no_gui            = 18

         OTHERS                  = 19.

 

     IF sy-subrc <> 0.

       MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

                  WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

     ENDIF.

     IF p_head IS NOT INITIAL.

       DELETE gt_header INDEX 1.

     ENDIF.

     CLEAR gv_file.

   ENDIF.

 

   IF p_file5 IS NOT INITIAL.

*use the file name from header to extract the data and delete the headerline if it is checked to have header lines

     gv_file = p_file5.

 

     CALL METHOD cl_gui_frontend_services=>gui_upload

       EXPORTING

         filename                = gv_file

         has_field_separator     = 'X'

       CHANGING

         data_tab                = gt_cycle

       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

         not_supported_by_gui    = 17

         error_no_gui            = 18

         OTHERS                  = 19.

 

     IF sy-subrc <> 0.

       MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

                  WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

     ENDIF.

     IF p_head IS NOT INITIAL.

       DELETE gt_cycle INDEX 1.

     ENDIF.

     CLEAR gv_file.

   ENDIF.

 

ENDFORM.                  " GET_DATA

*&---------------------------------------------------------------------*

*&      Form  FILE_HELP_DIALOG1

*&---------------------------------------------------------------------*

FORM file_help_dialog1 .

 

 

   CLEAR gt_filetab1.

 

   CALL METHOD cl_gui_frontend_services=>file_open_dialog

     EXPORTING

       multiselection = space

     CHANGING

       file_table     = gt_filetab1

       rc             = gv_rc.

 

 

   LOOP AT gt_filetab1 INTO gs_file1.

     p_file1 = gs_file1-filename.

   ENDLOOP.

ENDFORM.

*&---------------------------------------------------------------------*

*&      Form  FILE_HELP_DIALOG2

*&---------------------------------------------------------------------*

FORM file_help_dialog2 .

 

 

   CLEAR gt_filetab2.

 

   CALL METHOD cl_gui_frontend_services=>file_open_dialog

     EXPORTING

       multiselection = space

     CHANGING

       file_table     = gt_filetab2

       rc             = gv_rc.

 

 

   LOOP AT gt_filetab2 INTO gs_file2.

     p_file2 = gs_file2-filename.

   ENDLOOP.

ENDFORM.

*&---------------------------------------------------------------------*

*&      Form  FILE_HELP_DIALOG3

*&---------------------------------------------------------------------*

FORM file_help_dialog3 .

 

 

   CLEAR gt_filetab3.

 

   CALL METHOD cl_gui_frontend_services=>file_open_dialog

     EXPORTING

       multiselection = space

     CHANGING

       file_table     = gt_filetab3

       rc             = gv_rc.

 

 

   LOOP AT gt_filetab3 INTO gs_file3.

     p_file3 = gs_file3-filename.

   ENDLOOP.

ENDFORM.

*&---------------------------------------------------------------------*

*&      Form  FILE_HELP_DIALOG4

*&---------------------------------------------------------------------*

FORM file_help_dialog4 .

 

 

   CLEAR gt_filetab4.

 

   CALL METHOD cl_gui_frontend_services=>file_open_dialog

     EXPORTING

       multiselection = space

     CHANGING

       file_table     = gt_filetab4

       rc             = gv_rc.

 

 

   LOOP AT gt_filetab4 INTO gs_file4.

     p_file4 = gs_file4-filename.

   ENDLOOP.

ENDFORM.

*&---------------------------------------------------------------------*

*&      Form  PROCESS_DATA

*&---------------------------------------------------------------------*

 

FORM process_data .

 

   DATA:

     lv_records TYPE i.

 

   DATA:

     ls_config TYPE /XXX/KPI_CONF,

     ls_map    TYPE /XXX/KPI_MAPP,

     ls_struc  TYPE /XXX/KPI_STRUC,

     ls_cycle  TYPE /XXX/KPI_CYCLE,

     ls_head   TYPE XXX/KPI_HEAD.

 

 

*records to be updated

   DATA:

     lt_config TYPE STANDARD TABLE OF /XXX/KPI_CONF,

     lt_map    TYPE STANDARD TABLE OF /XXX/KPI_MAPP,

     lt_struc  TYPE STANDARD TABLE OF /XXX/KPI_STRUC,

     lt_cycle  TYPE STANDARD TABLE OF /XXX/KPI_CYCLE,

     lt_head   TYPE TABLE OF          /XXX/KPI_HEAD.

 

   IF gts_config_old IS NOT INITIAL.

     LOOP AT gt_config INTO ls_config.

       READ TABLE gts_config_old

             WITH TABLE KEY xx100011 = ls_config-xxx

                            xxx = ls_config-xxx

                            xxx = ls_config-xxx

                            xxx = ls_config-xxx

      TRANSPORTING NO FIELDS.

       IF sy-subrc = 0.

         APPEND ls_config TO lt_config.

         DELETE gt_config.

       ENDIF.

     ENDLOOP.

   ENDIF.

 

   IF gts_map_old IS NOT INITIAL.

     LOOP AT gt_map INTO ls_map.

       READ TABLE gts_map_old

             WITH TABLE KEY xxxxx = ls_map-xxx

                            xxx = ls_map-xxx

                            xxx = ls_map-xxx

                            xxx  = ls_map-xxx

      TRANSPORTING NO FIELDS.

       IF sy-subrc = 0.

         APPEND ls_map TO lt_map.

         DELETE gt_map.

       ENDIF.

     ENDLOOP.

   ENDIF.

 

   IF gts_struc_old IS NOT INITIAL.

     LOOP AT gt_struc INTO ls_struc.

       READ TABLE gts_struc_old

             WITH TABLE KEY xxxxxx = ls_struc-xxx "area

                            xxxxx = ls_struc-xxxxxx "record

                            xxxxx ls_struc-xxxxx " appset

                            xxxxx ls_struc-xxxxx

      TRANSPORTING NO FIELDS.

       IF sy-subrc = 0.

         APPEND ls_struc TO lt_struc.

         DELETE gt_struc.

       ENDIF.

     ENDLOOP.

   ENDIF.

 

 

   IF gts_header_old IS NOT INITIAL.

     LOOP AT gt_header INTO ls_head.

       READ TABLE gts_header_old

             WITH TABLE KEY xxxxxx = ls_head-xxxxxx

      TRANSPORTING NO FIELDS.

       IF sy-subrc = 0.

         APPEND ls_head TO lt_head.

         DELETE gt_header.

       ENDIF.

     ENDLOOP.

   ENDIF.

 

   IF gts_cycle_old IS NOT INITIAL.

     LOOP AT gt_cycle INTO ls_cycle.

       READ TABLE gts_cycle_old

             WITH TABLE KEY sh100001 = ls_cycle-sh100001

             sh100002 = ls_cycle-sh100002

             sh000676 = ls_cycle-sh000676

      TRANSPORTING NO FIELDS.

       IF sy-subrc = 0.

         APPEND ls_cycle TO lt_cycle.

         DELETE gt_cycle.

       ENDIF.

     ENDLOOP.

   ENDIF.

 

   IF gt_config IS NOT INITIAL.

 

 

 

     CALL FUNCTION 'RSDRI_ODSO_INSERT'

       EXPORTING

         i_odsobject                 = gc_xxxxx_dso

         i_t_insert                  = gt_config

         i_trigger_smartmerge        = space

       IMPORTING

         e_records                   = lv_records

       EXCEPTIONS

         data_target_not_ods         = 1

         ods_type_not_transactional  = 2

         active_table_name_not_found = 3

         record_key_already_exists   = 4

         array_insert_failed         = 5

         internal_error              = 6

         OTHERS                      = 7.

     IF sy-subrc <> 0.

       PERFORM unlock_table.

     ENDIF.

   ENDIF.

 

 

   IF lt_config IS NOT INITIAL.

 

     CALL FUNCTION 'RSDRI_ODSO_UPDATE'

       EXPORTING

         i_odsobject                 = gc_xxxx_dso

         i_t_update                  = lt_config

         i_trigger_smartmerge        = space

       IMPORTING

         e_records                   = lv_records

       EXCEPTIONS

         data_target_not_ods         = 1

         ods_type_not_transactional  = 2

         active_table_name_not_found = 3

         record_key_does_not_exist   = 4

         array_update_failed         = 5

         internal_error              = 6

         OTHERS                      = 7.

     IF sy-subrc <> 0.

       PERFORM unlock_table.

     ENDIF.

   ENDIF.

 

 

 

 

   IF gt_map IS NOT INITIAL.

     CALL FUNCTION 'RSDRI_ODSO_INSERT'

       EXPORTING

         i_odsobject                 = gc_xxxxx_dso

         i_t_insert                  = gt_map

         i_trigger_smartmerge        = space

       IMPORTING

         e_records                   = lv_records

       EXCEPTIONS

         data_target_not_ods         = 1

         ods_type_not_transactional  = 2

         active_table_name_not_found = 3

         record_key_already_exists   = 4

         array_insert_failed         = 5

         internal_error              = 6

         OTHERS                      = 7.

     IF sy-subrc <> 0.

       PERFORM unlock_table.

     ENDIF.

   ENDIF.

 

 

 

   IF lt_map IS NOT INITIAL.

 

     CALL FUNCTION 'RSDRI_ODSO_UPDATE'

       EXPORTING

         i_odsobject                 = gc_xxxx_dso

         i_t_update                  = lt_map

         i_trigger_smartmerge        = space

       IMPORTING

         e_records                   = lv_records

       EXCEPTIONS

         data_target_not_ods         = 1

         ods_type_not_transactional  = 2

         active_table_name_not_found = 3

         record_key_does_not_exist   = 4

         array_update_failed         = 5

         internal_error              = 6

         OTHERS                      = 7.

     IF sy-subrc <> 0.

       PERFORM unlock_xx100002.

       PERFORM unlock_table.

     ENDIF.

   ENDIF.

 

   IF gt_struc  IS NOT INITIAL.

     CALL FUNCTION 'RSDRI_ODSO_INSERT'

       EXPORTING

         i_odsobject                 = gc_xxxxx_dso

         i_t_insert                  = gt_struc

         i_trigger_smartmerge        = space

       IMPORTING

         e_records                   = lv_records

       EXCEPTIONS

         data_target_not_ods         = 1

         ods_type_not_transactional  = 2

         active_table_name_not_found = 3

         record_key_already_exists   = 4

         array_insert_failed         = 5

         internal_error              = 6

         OTHERS                      = 7.

     IF sy-subrc <> 0.

       PERFORM unlock_table.

     ENDIF.

   ENDIF.

 

   IF lt_struc IS NOT INITIAL.

 

     CALL FUNCTION 'RSDRI_ODSO_UPDATE'

       EXPORTING

         i_odsobject                 = gc_xxxxx_dso

         i_t_update                  = lt_struc

         i_trigger_smartmerge        = space

       IMPORTING

         e_records                   = lv_records

       EXCEPTIONS

         data_target_not_ods         = 1

         ods_type_not_transactional  = 2

         active_table_name_not_found = 3

         record_key_does_not_exist   = 4

         array_update_failed         = 5

         internal_error              = 6

         OTHERS                      = 7.

     IF sy-subrc <> 0.

       PERFORM unlock_table.

     ENDIF.

   ENDIF.

 

 

   IF gt_header IS NOT INITIAL.

     CALL FUNCTION 'RSDRI_ODSO_INSERT'

       EXPORTING

         i_odsobject                 = gc_xxxxx_dso

         i_t_insert                  = gt_header

         i_trigger_smartmerge        = space

       IMPORTING

         e_records                   = lv_records

       EXCEPTIONS

         data_target_not_ods         = 1

         ods_type_not_transactional  = 2

         active_table_name_not_found = 3

         record_key_already_exists   = 4

         array_insert_failed         = 5

         internal_error              = 6

         OTHERS                      = 7.

     IF sy-subrc <> 0.

       PERFORM unlock_table.

     ENDIF.

   ENDIF.

 

   IF lt_head IS NOT INITIAL.

 

     CALL FUNCTION 'RSDRI_ODSO_UPDATE'

       EXPORTING

         i_odsobject                 = gc_xxxxx_dso

         i_t_update                  = lt_head

         i_trigger_smartmerge        = space

       IMPORTING

         e_records                   = lv_records

       EXCEPTIONS

         data_target_not_ods         = 1

         ods_type_not_transactional  = 2

         active_table_name_not_found = 3

         record_key_does_not_exist   = 4

         array_update_failed         = 5

         internal_error              = 6

         OTHERS                      = 7.

     IF sy-subrc <> 0.

       PERFORM unlock_table.

     ENDIF.

   ENDIF.

 

   IF gt_cycle IS NOT INITIAL.

 

     CALL FUNCTION 'RSDRI_ODSO_INSERT'

       EXPORTING

         i_odsobject                 = gc_xxxxxx_dso

         i_t_insert                  = gt_cycle

         i_trigger_smartmerge        = space

       IMPORTING

         e_records                   = lv_records

       EXCEPTIONS

         data_target_not_ods         = 1

         ods_type_not_transactional  = 2

         active_table_name_not_found = 3

         record_key_already_exists   = 4

         array_insert_failed         = 5

         internal_error              = 6

         OTHERS                      = 7.

     IF sy-subrc <> 0.

       PERFORM unlock_table.

     ENDIF.

   ENDIF.

 

 

   IF lt_cycle IS NOT INITIAL.

 

     CALL FUNCTION 'RSDRI_ODSO_UPDATE'

       EXPORTING

         i_odsobject                 = gc_xxxx_dso

         i_t_update                  = lt_cycle

         i_trigger_smartmerge        = space

       IMPORTING

         e_records                   = lv_records

       EXCEPTIONS

         data_target_not_ods         = 1

         ods_type_not_transactional  = 2

         active_table_name_not_found = 3

         record_key_does_not_exist   = 4

         array_update_failed         = 5

         internal_error              = 6

         OTHERS                      = 7.

     IF sy-subrc <> 0.

       PERFORM unlock_table.

     ENDIF.

   ENDIF.

ENDFORM.                    " PROCESS_DATA

*&---------------------------------------------------------------------*

*&      Form  GET_EXISTING_RECORDS

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

FORM get_existing_records .

 

   SELECT *

     FROM /XXX/KPI_CONF

     INTO TABLE gts_config_old.

 

   SELECT *

       FROM /XXX/KPI_MAPP

       INTO TABLE gts_map_old.

 

   SELECT *

       FROM /XXX/KPI_STRUC

       INTO TABLE gts_struc_old.

 

   SELECT *

       FROM /XXX/KPI_HEAD

       INTO TABLE gts_header_old.

 

   SELECT *

       FROM /XXX/KPI_CYCLE

       INTO TABLE gts_cycle_old.

 

ENDFORM.                    " GET_EXISTING_RECORDS

 

 

FORM file_help_dialog5 .

 

   CLEAR gt_filetab5.

 

   CALL METHOD cl_gui_frontend_services=>file_open_dialog

     EXPORTING

       multiselection = space

     CHANGING

       file_table     = gt_filetab5

       rc             = gv_rc.

 

 

   LOOP AT gt_filetab5 INTO gs_file5.

     p_file5 = gs_file5-filename.

   ENDLOOP.

ENDFORM.                    " FILE_HELP_DIALOG5



I want to replace CALL FUNCTION 'RSDRI_ODSO_UPDATE with a code that it inserts the data into the tables not DSO



Cheers,


Rabie



Viewing all articles
Browse latest Browse all 9052

Trending Articles