mirror of
https://github.com/abapGit/abapGit.git
synced 2025-04-30 11:46:38 +08:00
269 lines
7.5 KiB
ABAP
269 lines
7.5 KiB
ABAP
CLASS zcl_abapgit_sap_report DEFINITION
|
|
PUBLIC
|
|
FINAL
|
|
CREATE PUBLIC.
|
|
|
|
PUBLIC SECTION.
|
|
|
|
INTERFACES zif_abapgit_sap_report.
|
|
|
|
PROTECTED SECTION.
|
|
PRIVATE SECTION.
|
|
|
|
METHODS authorization_check
|
|
IMPORTING
|
|
iv_mode TYPE csequence
|
|
is_item TYPE zif_abapgit_definitions=>ty_item
|
|
RAISING
|
|
zcx_abapgit_exception.
|
|
|
|
ENDCLASS.
|
|
|
|
|
|
|
|
CLASS zcl_abapgit_sap_report IMPLEMENTATION.
|
|
|
|
|
|
METHOD authorization_check.
|
|
|
|
IF is_item IS NOT INITIAL.
|
|
TRY.
|
|
CALL FUNCTION 'RS_ACCESS_PERMISSION'
|
|
EXPORTING
|
|
mode = iv_mode
|
|
object = is_item-obj_name
|
|
object_class = is_item-obj_type
|
|
suppress_corr_check = abap_true
|
|
suppress_language_check = abap_true
|
|
suppress_extend_dialog = abap_true
|
|
abap_langu_version_upon_insert = is_item-abap_language_version " does not exist on lower releases
|
|
EXCEPTIONS
|
|
canceled_in_corr = 1
|
|
enqueued_by_user = 2
|
|
enqueue_system_failure = 3
|
|
illegal_parameter_values = 4
|
|
locked_by_author = 5
|
|
no_modify_permission = 6
|
|
no_show_permission = 7
|
|
permission_failure = 8
|
|
request_language_denied = 9
|
|
OTHERS = 10 ##FM_SUBRC_OK.
|
|
CATCH cx_sy_dyn_call_param_not_found.
|
|
CALL FUNCTION 'RS_ACCESS_PERMISSION'
|
|
EXPORTING
|
|
mode = iv_mode
|
|
object = is_item-obj_name
|
|
object_class = is_item-obj_type
|
|
suppress_corr_check = abap_true
|
|
suppress_language_check = abap_true
|
|
suppress_extend_dialog = abap_true
|
|
EXCEPTIONS
|
|
canceled_in_corr = 1
|
|
enqueued_by_user = 2
|
|
enqueue_system_failure = 3
|
|
illegal_parameter_values = 4
|
|
locked_by_author = 5
|
|
no_modify_permission = 6
|
|
no_show_permission = 7
|
|
permission_failure = 8
|
|
request_language_denied = 9
|
|
OTHERS = 10 ##FM_SUBRC_OK.
|
|
ENDTRY.
|
|
IF sy-subrc <> 0.
|
|
zcx_abapgit_exception=>raise_t100( ).
|
|
ENDIF.
|
|
ENDIF.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_sap_report~delete_report.
|
|
|
|
authorization_check(
|
|
iv_mode = 'DELETE'
|
|
is_item = is_item ).
|
|
|
|
DELETE REPORT iv_name.
|
|
|
|
IF sy-subrc <> 0 AND iv_raise_error = abap_true.
|
|
zcx_abapgit_exception=>raise( |Error deleting report { iv_name }| ).
|
|
ENDIF.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_sap_report~insert_report.
|
|
|
|
ASSERT iv_state CA ' AI'.
|
|
ASSERT iv_program_type CA ' 1FIJKMST'.
|
|
|
|
authorization_check(
|
|
iv_mode = 'MODIFY'
|
|
is_item = is_item ).
|
|
|
|
IF iv_state IS INITIAL.
|
|
INSERT REPORT iv_name FROM it_source.
|
|
ELSEIF iv_program_type IS INITIAL AND iv_extension_type IS INITIAL.
|
|
INSERT REPORT iv_name FROM it_source
|
|
STATE iv_state.
|
|
ELSEIF iv_extension_type IS INITIAL.
|
|
INSERT REPORT iv_name FROM it_source
|
|
STATE iv_state
|
|
PROGRAM TYPE iv_program_type.
|
|
ELSE.
|
|
INSERT REPORT iv_name FROM it_source
|
|
STATE iv_state
|
|
EXTENSION TYPE iv_extension_type
|
|
PROGRAM TYPE iv_program_type.
|
|
ENDIF.
|
|
|
|
IF sy-subrc <> 0.
|
|
zcx_abapgit_exception=>raise( |Error inserting report { iv_name }| ).
|
|
ENDIF.
|
|
|
|
" In lower releases, INSERT REPORT does not support setting ABAP Language version (VERSION)
|
|
" Therefore, update the flag directly
|
|
UPDATE progdir SET uccheck = iv_version WHERE name = iv_name AND state = iv_state.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_sap_report~read_progdir.
|
|
|
|
DATA ls_sapdir TYPE progdir.
|
|
|
|
CALL FUNCTION 'READ_PROGDIR'
|
|
EXPORTING
|
|
i_progname = iv_name
|
|
i_state = iv_state
|
|
IMPORTING
|
|
e_progdir = ls_sapdir
|
|
EXCEPTIONS
|
|
not_exists = 1
|
|
OTHERS = 2.
|
|
IF sy-subrc <> 0.
|
|
zcx_abapgit_exception=>raise_t100( ).
|
|
ENDIF.
|
|
|
|
MOVE-CORRESPONDING ls_sapdir TO rs_progdir.
|
|
|
|
CLEAR: rs_progdir-edtx,
|
|
rs_progdir-cnam,
|
|
rs_progdir-cdat,
|
|
rs_progdir-unam,
|
|
rs_progdir-udat,
|
|
rs_progdir-levl,
|
|
rs_progdir-vern,
|
|
rs_progdir-rmand,
|
|
rs_progdir-sdate,
|
|
rs_progdir-stime,
|
|
rs_progdir-idate,
|
|
rs_progdir-itime,
|
|
rs_progdir-varcl,
|
|
rs_progdir-state.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_sap_report~read_report.
|
|
|
|
ASSERT iv_state CA ' AI'.
|
|
|
|
authorization_check(
|
|
iv_mode = 'SHOW'
|
|
is_item = is_item ).
|
|
|
|
IF iv_state IS INITIAL.
|
|
READ REPORT iv_name INTO rt_source.
|
|
ELSE.
|
|
READ REPORT iv_name INTO rt_source STATE iv_state.
|
|
ENDIF.
|
|
|
|
IF sy-subrc <> 0.
|
|
zcx_abapgit_exception=>raise( |Error reading report { iv_name }| ).
|
|
ENDIF.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_sap_report~update_progdir.
|
|
|
|
DATA ls_progdir_new TYPE progdir.
|
|
|
|
CALL FUNCTION 'READ_PROGDIR'
|
|
EXPORTING
|
|
i_progname = is_progdir-name
|
|
i_state = iv_state
|
|
IMPORTING
|
|
e_progdir = ls_progdir_new
|
|
EXCEPTIONS
|
|
not_exists = 1
|
|
OTHERS = 2.
|
|
IF sy-subrc <> 0.
|
|
zcx_abapgit_exception=>raise( 'Error reading program directory' ).
|
|
ENDIF.
|
|
|
|
ls_progdir_new-ldbname = is_progdir-ldbname.
|
|
ls_progdir_new-dbna = is_progdir-dbna.
|
|
ls_progdir_new-dbapl = is_progdir-dbapl.
|
|
ls_progdir_new-rload = is_progdir-rload.
|
|
ls_progdir_new-fixpt = is_progdir-fixpt.
|
|
ls_progdir_new-appl = is_progdir-appl.
|
|
ls_progdir_new-rstat = is_progdir-rstat.
|
|
ls_progdir_new-uccheck = is_progdir-uccheck.
|
|
ls_progdir_new-sqlx = is_progdir-sqlx.
|
|
ls_progdir_new-clas = is_progdir-clas.
|
|
ls_progdir_new-secu = is_progdir-secu.
|
|
|
|
CALL FUNCTION 'UPDATE_PROGDIR'
|
|
EXPORTING
|
|
i_progdir = ls_progdir_new
|
|
i_progname = ls_progdir_new-name
|
|
i_state = ls_progdir_new-state
|
|
EXCEPTIONS
|
|
not_executed = 1
|
|
OTHERS = 2.
|
|
IF sy-subrc <> 0.
|
|
zcx_abapgit_exception=>raise( 'Error updating program directory' ).
|
|
ENDIF.
|
|
|
|
" Function UPDATE_PROGDIR does not update VARCL, so we do it here
|
|
SELECT SINGLE * FROM progdir INTO ls_progdir_new
|
|
WHERE name = ls_progdir_new-name
|
|
AND state = ls_progdir_new-state.
|
|
IF sy-subrc = 0 AND is_progdir-varcl <> ls_progdir_new-varcl.
|
|
UPDATE progdir SET varcl = is_progdir-varcl
|
|
WHERE name = ls_progdir_new-name
|
|
AND state = ls_progdir_new-state. "#EC CI_SUBRC
|
|
ENDIF.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_sap_report~update_report.
|
|
|
|
DATA lt_new TYPE string_table.
|
|
DATA lt_old TYPE string_table.
|
|
|
|
lt_new = it_source.
|
|
lt_old = zif_abapgit_sap_report~read_report( iv_name ).
|
|
|
|
IF lt_old <> lt_new.
|
|
zif_abapgit_sap_report~insert_report(
|
|
iv_name = iv_name
|
|
it_source = it_source
|
|
iv_state = iv_state
|
|
iv_program_type = iv_program_type
|
|
iv_extension_type = iv_extension_type
|
|
iv_package = iv_package
|
|
iv_version = iv_version
|
|
is_item = is_item ).
|
|
|
|
rv_updated = abap_true.
|
|
ELSE.
|
|
rv_updated = abap_false.
|
|
ENDIF.
|
|
|
|
ENDMETHOD.
|
|
ENDCLASS.
|