SAP/ABAP 코드

(ABAP 코드) DATA_CHANGED

haramang 2022. 1. 25. 22:10

FORM data_changed  USING    pr_data_changed
                              TYPE REF TO cl_alv_changed_data_protocol
                            pe_onf4        TYPE char01
                            pe_onf4_before TYPE char01
                            pe_onf4_after  TYPE char01
                            pe_ucomm       TYPE sy-ucomm.


  DATAls_mod_cells TYPE lvc_s_modi.
  DATAls_styl TYPE lvc_s_styl,
        lt_styl TYPE lvc_t_styl.

  DATAlv_styl TYPE lvc_style.
  DATAlv_err_chk TYPE c,
        lv_err_msg TYPE LENGTH 100.

  FIELD-SYMBOLS<fs_val> TYPE any.

  CLEARgs_flight_tmplv_err_chk.

  LOOP AT pr_data_changed->mt_mod_cells INTO ls_mod_cells.

    READ TABLE gt_flight_tmp INTO gs_flight_tmp INDEX ls_mod_cells-row_id.

    IF ls_mod_cells-error EQ 'X'.
      lv_err_chk 'X'.
      gs_flight_tmp-id icon_red_light.
      PERFORM modify_cell USING pr_data_changed
                                ls_mod_cells-row_id
                                'ID'
                                icon_red_light
                                lv_err_chk.
      MODIFY gt_flight_tmp FROM gs_flight_tmp INDEX ls_mod_cells-row_id.
      MESSAGE s000 WITH '잘못된 입력값입니다.' DISPLAY LIKE 'E'.
      PERFORM refresh_grid USING go_grid.
      CONTINUE.
    ENDIF.

    CLEAR gs_flight_tmp-saved.

    CASE ls_mod_cells-fieldname.
      WHEN 'BNAME'.
        TRANSLATE Ls_mod_cells-value TO UPPER CASE.
        PERFORM check_bname USING ls_mod_cells
                            CHANGING lv_err_chk.

        PERFORM check_key USING ls_mod_cells
                          CHANGING lv_err_chk.

        PERFORM modify_cell USING pr_data_changed
                                  ls_mod_cells-row_id
                                  ls_mod_cells-fieldname
                                  ls_mod_cells-value
                                  lv_err_chk.

        PERFORM input_all_chk  USING lv_err_chk
                               CHANGING gs_flight_tmp-id.


      WHEN 'FLDATE'.
        REPLACE ALL OCCURRENCES OF '.' IN Ls_mod_cells-value WITH ''.

        CALL FUNCTION 'CONVERT_DATE_TO_INTERNAL'
          EXPORTING
            date_external ls_mod_cells-value
          IMPORTING
            date_internal ls_mod_cells-value.

        PERFORM check_fldate USING ls_mod_cells
                            CHANGING lv_err_chk.

        PERFORM check_key USING ls_mod_cells
                          CHANGING lv_err_chk.

        PERFORM modify_cell USING pr_data_changed
                                  ls_mod_cells-row_id
                                  ls_mod_cells-fieldname
                                  ls_mod_cells-value
                                  lv_err_chk.

        PERFORM input_all_chk  USING lv_err_chk
                               CHANGING gs_flight_tmp-id.

      WHEN 'CITYFROM'.
        TRANSLATE Ls_mod_cells-value TO UPPER CASE.
        PERFORM check_city  USING ls_mod_cells
                            CHANGING lv_err_chk.

        PERFORM modify_cell USING pr_data_changed
                                  ls_mod_cells-row_id
                                  ls_mod_cells-fieldname
                                  ls_mod_cells-value
                                  lv_err_chk.

        PERFORM input_all_chk  USING lv_err_chk
                               CHANGING gs_flight_tmp-id.

      WHEN 'CITYTO'.
        TRANSLATE Ls_mod_cells-value TO UPPER CASE.
        PERFORM check_city  USING ls_mod_cells
                            CHANGING lv_err_chk.

        PERFORM modify_cell USING pr_data_changed
                                  ls_mod_cells-row_id
                                  ls_mod_cells-fieldname
                                  ls_mod_cells-value
                                  lv_err_chk.

        PERFORM input_all_chk  USING lv_err_chk
                               CHANGING gs_flight_tmp-id.

      WHEN 'CARRID'.
        DATAls_carrinfo LIKE gs_scarr.
        TRANSLATE ls_mod_cells-value TO UPPER CASE.
        PERFORM check_carrid USING ls_mod_cells
                             CHANGING lv_err_chk
                                      ls_carrinfo.

        PERFORM modify_cell USING pr_data_changed
                                  ls_mod_cells-row_id
                                  ls_mod_cells-fieldname
                                  ls_mod_cells-value
                                  lv_err_chk.

        PERFORM modify_cell USING pr_data_changed
                                  ls_mod_cells-row_id
                                  'CARRNAME'
                                  ls_carrinfo-carrname
                                  lv_err_chk.

        PERFORM input_all_chk  USING lv_err_chk
                               CHANGING gs_flight_tmp-id.

      WHEN 'PRICE'.
        REPLACE ALL OCCURRENCES OF ',' IN ls_mod_cells-value WITH ''.
        GS_FLIGHT_TMP-PRICE LS_MOD_CELLS-VALUE.

        PERFORM modify_cell USING pr_data_changed
                                  ls_mod_cells-row_id
                                  ls_mod_cells-fieldname
                                  ls_mod_cells-value
                            CHANGING lv_err_chk.

        PERFORM input_all_chk  USING lv_err_chk
                               CHANGING gs_flight_tmp-id.
      WHEN 'CONF'.
        IF ls_mod_cells-value EQ 'X'.
          IF gs_flight_tmp-id EQ icon_yellow_light.
            gs_flight_tmp-id icon_green_light.
            PERFORM modify_cell USING pr_data_changed
                                      ls_mod_cells-row_id
                                      ls_mod_cells-fieldname
                                      ls_mod_cells-value
                                      lv_err_chk.

          ELSEIF gs_flight_tmp-id EQ icon_red_light.
            lv_err_chk 'X'.
            MESSAGE s000 WITH '활성화할 수 없습니다.' DISPLAY LIKE 'E'.
            PERFORM modify_cell USING pr_data_changed
                                      ls_mod_cells-row_id
                                      ls_mod_cells-fieldname
                                      ' '
                                      lv_err_chk.
          ENDIF.

        ELSE.
          IF gs_flight_tmp-id EQ icon_green_light.
            gs_flight_tmp-id icon_yellow_light.
          ENDIF.
        ENDIF.

    ENDCASE.

    MODIFY gt_flight_tmp FROM gs_flight_tmp INDEX ls_mod_cells-row_id.
    CLEARgs_flight_tmpls_mod_cells.
  ENDLOOP.

ENDFORM.