From d6dfa424aeaeeb8d7bfd2c8482908012a6b2d0cb Mon Sep 17 00:00:00 2001 From: Fabian Lupa Date: Tue, 16 Apr 2019 14:14:15 +0200 Subject: [PATCH] Add exit for CLAS CLIF source serialization (#2630) * Add user exit for serialize_abap_clif_source * Document CLIF serializer exit * Add exit redirection for CLIF serializer * Add link to example for CLIF serialization exit --- docs/ref-exits.md | 4 ++++ src/objects/zcl_abapgit_oo_serializer.clas.abap | 5 +++++ src/zcl_abapgit_exit.clas.abap | 9 ++++++++- src/zif_abapgit_exit.intf.abap | 7 +++++++ 4 files changed, 24 insertions(+), 1 deletion(-) diff --git a/docs/ref-exits.md b/docs/ref-exits.md index a05572824..27729ac18 100644 --- a/docs/ref-exits.md +++ b/docs/ref-exits.md @@ -43,3 +43,7 @@ Can be used to skip certian objects, or force a different object setup than curr ### GET_SSL_ID Possibility to change the default `ANONYM` ssl id to something system specific + +### CUSTOM_SERIALIZE_ABAP_CLIF +Allows for a custom serializer to be used for global classes' CLIF sources. See [#2321](https://github.com/larshp/abapGit/issues/2321) and [#2491](https://github.com/larshp/abapGit/pull/2491) for use cases. +This [example implementation](https://gist.github.com/flaiker/999c8165b89131608b05cd371529fef5) forces the old class serializer to be used for specific packages. diff --git a/src/objects/zcl_abapgit_oo_serializer.clas.abap b/src/objects/zcl_abapgit_oo_serializer.clas.abap index 623c2af5d..e3ad1816a 100644 --- a/src/objects/zcl_abapgit_oo_serializer.clas.abap +++ b/src/objects/zcl_abapgit_oo_serializer.clas.abap @@ -206,6 +206,11 @@ CLASS ZCL_ABAPGIT_OO_SERIALIZER IMPLEMENTATION. METHOD serialize_abap_clif_source. + rt_source = zcl_abapgit_exit=>get_instance( )->custom_serialize_abap_clif( is_class_key ). + IF rt_source IS NOT INITIAL. + RETURN. + ENDIF. + TRY. rt_source = serialize_abap_new( is_class_key ). CATCH cx_sy_dyn_call_error. diff --git a/src/zcl_abapgit_exit.clas.abap b/src/zcl_abapgit_exit.clas.abap index 0c1321e79..965b5fb16 100644 --- a/src/zcl_abapgit_exit.clas.abap +++ b/src/zcl_abapgit_exit.clas.abap @@ -15,7 +15,7 @@ ENDCLASS. -CLASS ZCL_ABAPGIT_EXIT IMPLEMENTATION. +CLASS zcl_abapgit_exit IMPLEMENTATION. METHOD get_instance. @@ -143,4 +143,11 @@ CLASS ZCL_ABAPGIT_EXIT IMPLEMENTATION. ENDTRY. ENDMETHOD. + + METHOD zif_abapgit_exit~custom_serialize_abap_clif. + TRY. + rt_source = gi_exit->custom_serialize_abap_clif( is_class_key ). + CATCH cx_sy_ref_is_initial cx_sy_dyn_call_illegal_method ##NO_HANDLER. + ENDTRY. + ENDMETHOD. ENDCLASS. diff --git a/src/zif_abapgit_exit.intf.abap b/src/zif_abapgit_exit.intf.abap index 70646ad96..422ff2c25 100644 --- a/src/zif_abapgit_exit.intf.abap +++ b/src/zif_abapgit_exit.intf.abap @@ -46,4 +46,11 @@ INTERFACE zif_abapgit_exit METHODS get_ssl_id RETURNING VALUE(rv_ssl_id) TYPE ssfapplssl . + METHODS custom_serialize_abap_clif + IMPORTING + is_class_key TYPE seoclskey + RETURNING + VALUE(rt_source) TYPE zif_abapgit_definitions=>ty_string_tt + RAISING + zcx_abapgit_exception. ENDINTERFACE.