From 82bed9224cdbd96341e7c7cb5817a8af47aeeedb Mon Sep 17 00:00:00 2001 From: fvalves Date: Mon, 5 Aug 2024 14:55:00 +0200 Subject: [PATCH] DSFI: CDS Scalar Function Implementation (#6952) Co-authored-by: abaplint[bot] <24845621+abaplint[bot]@users.noreply.github.com> Co-authored-by: Lars Hvam --- .../aff/zcl_abapgit_aff_registry.clas.abap | 1 + .../aff/zcl_abapgit_object_dsfi.clas.abap | 74 +++++++++++++++++++ .../aff/zcl_abapgit_object_dsfi.clas.xml | 16 ++++ 3 files changed, 91 insertions(+) create mode 100644 src/objects/aff/zcl_abapgit_object_dsfi.clas.abap create mode 100644 src/objects/aff/zcl_abapgit_object_dsfi.clas.xml diff --git a/src/objects/aff/zcl_abapgit_aff_registry.clas.abap b/src/objects/aff/zcl_abapgit_aff_registry.clas.abap index e46224fc6..b5fd980bd 100644 --- a/src/objects/aff/zcl_abapgit_aff_registry.clas.abap +++ b/src/objects/aff/zcl_abapgit_aff_registry.clas.abap @@ -53,6 +53,7 @@ CLASS ZCL_ABAPGIT_AFF_REGISTRY IMPLEMENTATION. register( 'CHKV' ). register( 'DRTY' ). register( 'DTEB' ). + register( 'DSFI' ). register( 'DRAS' ). register( 'DSFD' ). register( 'EVTB' ). diff --git a/src/objects/aff/zcl_abapgit_object_dsfi.clas.abap b/src/objects/aff/zcl_abapgit_object_dsfi.clas.abap new file mode 100644 index 000000000..21dea562f --- /dev/null +++ b/src/objects/aff/zcl_abapgit_object_dsfi.clas.abap @@ -0,0 +1,74 @@ +CLASS zcl_abapgit_object_dsfi DEFINITION + PUBLIC + INHERITING FROM zcl_abapgit_object_common_aff + FINAL + CREATE PUBLIC . + + PUBLIC SECTION. + METHODS zif_abapgit_object~changed_by REDEFINITION. + METHODS zif_abapgit_object~get_deserialize_steps REDEFINITION. + PROTECTED SECTION. + METHODS get_additional_extensions REDEFINITION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS zcl_abapgit_object_dsfi IMPLEMENTATION. + METHOD zif_abapgit_object~changed_by. + + DATA: lo_dsfi_handler TYPE REF TO object, + lo_dsfi_source_container TYPE REF TO object, + lv_object_key TYPE seu_objkey, + lv_exists TYPE abap_bool, + lx_error TYPE REF TO cx_root. + FIELD-SYMBOLS: TYPE any. + + TRY. + lv_object_key = ms_item-obj_name. + CALL METHOD ('CL_DSFI_AFF_OBJECT_HANDLER')=>('GET_DDIC_HANDLER') + EXPORTING + object_key = lv_object_key + RECEIVING + handler = lo_dsfi_handler. + + ASSIGN ('CE_DD_DSFI_AS4LOCAL=>EN_STATE-ACTIVE') + TO . + IF sy-subrc = 0. + CALL METHOD lo_dsfi_handler->('CHECK_EXISTENCE') + EXPORTING + iv_as4local = + RECEIVING + rv_exists = lv_exists. + + IF lv_exists = abap_true. + CALL METHOD lo_dsfi_handler->('GET_SOURCE_CONTAINER') + EXPORTING + iv_as4local = + RECEIVING + ro_result = lo_dsfi_source_container. + + CALL METHOD lo_dsfi_source_container->('GET_AS4USER') + RECEIVING + rv_as4user = rv_user. + ENDIF. + ENDIF. + + CATCH cx_root INTO lx_error. + zcx_abapgit_exception=>raise_with_text( lx_error ). + ENDTRY. + ENDMETHOD. + + METHOD zif_abapgit_object~get_deserialize_steps. + APPEND zif_abapgit_object=>gc_step_id-ddic TO rt_steps. + ENDMETHOD. + + METHOD get_additional_extensions. + DATA ls_additional_extension LIKE LINE OF rv_additional_extensions. + ls_additional_extension-extension = 'acds'. + CALL METHOD ('CL_CDS_AFF_FILE_NAME_MAPPER')=>for_cds + RECEIVING + result = ls_additional_extension-file_name_mapper. + APPEND ls_additional_extension TO rv_additional_extensions. + ENDMETHOD. +ENDCLASS. diff --git a/src/objects/aff/zcl_abapgit_object_dsfi.clas.xml b/src/objects/aff/zcl_abapgit_object_dsfi.clas.xml new file mode 100644 index 000000000..e1e1a93a8 --- /dev/null +++ b/src/objects/aff/zcl_abapgit_object_dsfi.clas.xml @@ -0,0 +1,16 @@ + + + + + + ZCL_ABAPGIT_OBJECT_DSFI + E + abapGit - DSFI - CDS Scalar Function Implementation + 1 + X + X + X + + + +