Professional Documents
Culture Documents
REPORT ydr_table_update.
START-OF-SELECTION.
"Start Processing
PERFORM start_processing.
*&---------------------------------------------------------------------*
*& Form F4_FILENAME
*&---------------------------------------------------------------------*
* F4 filename search help
*----------------------------------------------------------------------*
FORM f4_filename.
IF p_fpath IS INITIAL.
"'Unable to fetch file path'
MESSAGE text-fpt TYPE gc_s DISPLAY LIKE gc_e.
RETURN.
ENDIF.
*&---------------------------------------------------------------------*
*& Form START_PROCESSING
*&---------------------------------------------------------------------*
* Start Processing
*----------------------------------------------------------------------*
FORM start_processing .
*&---------------------------------------------------------------------*
*& Form VALIDATE_TABLE_NAME
*&---------------------------------------------------------------------*
* Validate Table Name
*----------------------------------------------------------------------*
FORM validate_table_name .
*&---------------------------------------------------------------------*
*& Form CREATE_DYNTAB
*&---------------------------------------------------------------------*
* Create Dynamic table and structures
*----------------------------------------------------------------------*
FORM create_dyntab CHANGING y_dftab TYPE dd03ptab
y_dyntab TYPE REF TO data.
*&---------------------------------------------------------------------*
*& Form CONVERT_EXCEL
*&---------------------------------------------------------------------*
* Convert Excel to Internal Table
*----------------------------------------------------------------------*
FORM convert_excel USING x_dftab TYPE dd03ptab.
*&---------------------------------------------------------------------*
*& Form POPULATE_FINAL_TABLE
*&---------------------------------------------------------------------*
* Populate Final Table
*----------------------------------------------------------------------*
FORM populate_final_table USING x_col TYPE alsmex_tabline
x_dftab TYPE dd03p
CHANGING x_struc TYPE any.
CASE x_dftab-inttype.
WHEN 'D'.
IF ( <fs_1> IS INITIAL AND
x_dftab-fieldname EQ lc_erdat ) OR
x_dftab-fieldname EQ lc_aedat.
<fs_2> = sy-datum.
ELSE.
<fs_2> = <fs_1>+6(4) && <fs_1>+3(2) && <fs_1>+0(2).
ENDIF.
* CALL FUNCTION 'DATE_CHECK_PLAUSIBILITY'
* EXPORTING
* date = <fs_2>
* EXCEPTIONS
* plausibility_check_failed = 1
* OTHERS = 2.
* IF sy-subrc NE 0.
* <fs_2> = sy-datum.
* ENDIF.
WHEN 'T'.
IF x_dftab-fieldname EQ lc_aetim OR
x_dftab-fieldname EQ lc_change_tim OR
( <fs_1> IS INITIAL AND
x_dftab-fieldname EQ lc_ertim ).
<fs_2> = sy-uzeit.
ELSE.
<fs_2> = <fs_1>+0(2) && <fs_1>+3(2) && <fs_1>+6(2) .
CALL FUNCTION 'TIME_CHECK_PLAUSIBILITY'
EXPORTING
time = <fs_2>
EXCEPTIONS
plausibility_check_failed = 1
OTHERS = 2.
IF sy-subrc NE 0.
<fs_2> = sy-uzeit.
ENDIF.
ENDIF.
WHEN 'C'.
IF x_dftab-fieldname EQ lc_aenam OR
( x_dftab-fieldname EQ lc_ernam AND
<fs_1> IS INITIAL ).
<fs_2> = sy-uname.
ELSEIF x_dftab-fieldname EQ lc_mandt.
<fs_2> = sy-mandt.
ELSE.
<fs_2> = <fs_1>.
ENDIF.
WHEN OTHERS.
<fs_2> = <fs_1>.
ENDCASE.
*&---------------------------------------------------------------------*
*& Form TABLE_ACTION
*&---------------------------------------------------------------------*
* Table Actions
*----------------------------------------------------------------------*
FORM table_action USING x_dftab TYPE dd03ptab
CHANGING y_tabdata TYPE ANY TABLE
y_eflag TYPE boolean.
IF lv_count IS INITIAL.
"'FIELDNAME EQ Y_TABDATA-FIELDNAME'
CONCATENATE <fs_dftab>-fieldname gc_eq lv_string
INTO lw_where SEPARATED BY space.
ELSE.
"'AND FIELDNAME EQ Y_TABDATA-FIELDNAME'
CONCATENATE lc_and <fs_dftab>-fieldname gc_eq lv_string
INTO lw_where SEPARATED BY space.
ENDIF.
lv_count = lv_count + 1.
APPEND lw_where TO lt_where.
ENDLOOP.
SELECT *
FROM (p_table)
INTO TABLE <fs_tabdata>
FOR ALL ENTRIES IN y_tabdata
WHERE (lt_where).
IF sy-subrc EQ 0.
IF 1 = 2.
* LOOP AT y_tabdata ASSIGNING FIELD-SYMBOL(<fs_tdata>).
* READ TABLE <fs_tdata> TRANSPORTING NO FIELDS
* WITH TABLE KEY
* ENDLOOP.
ENDIF.
PERFORM user_decision USING y_tabdata
CHANGING lt_tfields
y_eflag.
ELSE.
INSERT (p_table) FROM TABLE y_tabdata.
IF sy-subrc EQ 0.
COMMIT WORK AND WAIT.
ELSE.
y_eflag = abap_true.
ENDIF.
ENDIF.
*---UPDATE Operation for one or more records into Database Table
ELSEIF p_mode = zif_x_common_types_and_const=>gc_mode_update.
PERFORM enqueue USING y_tabdata
CHANGING lt_tfields.
UPDATE (p_table) FROM TABLE y_tabdata.
IF sy-subrc EQ 0.
COMMIT WORK AND WAIT.
ELSE.
y_eflag = abap_true.
ENDIF.
PERFORM dequeue USING y_tabdata
lt_tfields.
*---MODIFY Operation for one or more records into Database Table
ELSEIF p_mode = zif_x_common_types_and_const=>gc_mode_modify.
PERFORM enqueue USING y_tabdata
CHANGING lt_tfields.
MODIFY (p_table) FROM TABLE y_tabdata.
IF sy-subrc EQ 0.
COMMIT WORK AND WAIT.
ELSE.
y_eflag = abap_true.
ENDIF.
PERFORM dequeue USING y_tabdata
lt_tfields.
*---DELETE Operation for one or more records into Database Table
ELSEIF p_mode = zif_x_common_types_and_const=>gc_mode_delete.
PERFORM enqueue USING y_tabdata
CHANGING lt_tfields.
DELETE (p_table) FROM TABLE y_tabdata.
IF sy-subrc EQ 0.
COMMIT WORK AND WAIT.
ELSE.
y_eflag = abap_true.
ENDIF.
PERFORM dequeue USING y_tabdata
lt_tfields.
ENDIF.
*&---------------------------------------------------------------------*
*& Form ENQUEUE
*&---------------------------------------------------------------------*
* Enqueue Table Data
*----------------------------------------------------------------------*
FORM enqueue USING x_tabdata TYPE ANY TABLE
CHANGING y_tfields TYPE dd03ptab.
*&---------------------------------------------------------------------*
*& Form DEQUEUE
*&---------------------------------------------------------------------*
* Dequeue table data
*----------------------------------------------------------------------*
FORM dequeue USING x_tabdata TYPE ANY TABLE
x_tfields TYPE dd03ptab.
*&---------------------------------------------------------------------*
*& Form USER_DECISION
*&---------------------------------------------------------------------*
* User Decision to proceed if records to are already present
*----------------------------------------------------------------------*
FORM user_decision USING x_tabdata TYPE ANY TABLE
CHANGING y_tfields TYPE dd03ptab
y_eflag TYPE boolean.
lv_answer TYPE i.
DO 3 TIMES.
APPEND INITIAL LINE TO lt_spoplist ASSIGNING FIELD-SYMBOL(<fs_spoplist>).
CASE sy-index.
WHEN 1.
"'Delete existing records and insert'
<fs_spoplist>-varoption = text-del.
WHEN 2.
"'Modify/Update existing records'
<fs_spoplist>-varoption = text-mod.
WHEN OTHERS.
"'Cancel'
<fs_spoplist>-varoption = text-can.
ENDCASE.
UNASSIGN : <fs_spoplist>.
ENDDO.
IF y_eflag IS INITIAL.
"Insert Records and Commit
INSERT (p_table) FROM TABLE x_tabdata.
IF sy-subrc EQ 0.
COMMIT WORK AND WAIT. "Commit
ELSE.
y_eflag = abap_true.
ENDIF.
ENDIF.
ELSEIF lv_answer EQ 2.
"Enqueue Modify and Deque
PERFORM enqueue USING x_tabdata
CHANGING y_tfields.
MODIFY (p_table) FROM TABLE x_tabdata.
IF sy-subrc EQ 0.
COMMIT WORK AND WAIT.
ELSE.
y_eflag = abap_true.
ENDIF.
PERFORM dequeue USING x_tabdata
y_tfields.
ELSE.
"'Cancelled by User'
MESSAGE text-cbu TYPE gc_s DISPLAY LIKE gc_e.
RETURN.
ENDIF.
ELSE.
y_eflag = abap_true.
ENDIF.