new SOBJ serializer (#5724)

* 1st version of abapGit - SOBJ serializer

- added class 1st version of zcl_abapgit_object_sobj
- pending more testing

* refactoring to comply with abapGit conventions

* downporting to 7.02

* refactoring as abaplint suggests

'data' keyword in cappital letters

* more abaplint fixing

* changes for PR merging

- changed ABAP class title
- deleted commented code

* changes for PR merging (2)

- fixing abaplint

Co-authored-by: Marc Bernard <59966492+mbtools@users.noreply.github.com>
Co-authored-by: Lars Hvam <larshp@hotmail.com>
This commit is contained in:
Jorge Sancho 2022-09-05 18:58:48 +02:00 committed by GitHub
parent e58138e4f9
commit efb42650e0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 257 additions and 0 deletions

View File

@ -0,0 +1,241 @@
CLASS zcl_abapgit_object_sobj DEFINITION
PUBLIC
INHERITING FROM zcl_abapgit_objects_super
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
INTERFACES zif_abapgit_object .
PROTECTED SECTION.
METHODS get_generic
RETURNING
VALUE(ro_generic) TYPE REF TO zcl_abapgit_objects_generic
RAISING
zcx_abapgit_exception .
PRIVATE SECTION.
METHODS get_field_rules
RETURNING
VALUE(ri_rules) TYPE REF TO zif_abapgit_field_rules.
METHODS is_locked RETURNING VALUE(rv_is_locked) TYPE abap_bool.
METHODS is_objtype_locked RETURNING VALUE(rv_is_locked) TYPE abap_bool.
METHODS is_program_locked RETURNING VALUE(rv_is_locked) TYPE abap_bool.
METHODS get_program RETURNING VALUE(rv_program) TYPE tojtb-progname.
ENDCLASS.
CLASS ZCL_ABAPGIT_OBJECT_SOBJ IMPLEMENTATION.
METHOD get_field_rules.
ri_rules = zcl_abapgit_field_rules=>create( ).
ri_rules->add(
iv_table = 'TOJTB'
iv_field = 'CREA_USER'
iv_fill_rule = zif_abapgit_field_rules=>c_fill_rule-user
)->add(
iv_table = 'TOJTB'
iv_field = 'CREA_DATE'
iv_fill_rule = zif_abapgit_field_rules=>c_fill_rule-date
)->add(
iv_table = 'TOJTB'
iv_field = 'CREA_TIME'
iv_fill_rule = zif_abapgit_field_rules=>c_fill_rule-time
)->add(
iv_table = 'TOJTB'
iv_field = 'CHAN_USER'
iv_fill_rule = zif_abapgit_field_rules=>c_fill_rule-user
)->add(
iv_table = 'TOJTB'
iv_field = 'CHAN_DATE'
iv_fill_rule = zif_abapgit_field_rules=>c_fill_rule-date
)->add(
iv_table = 'TOJTB'
iv_field = 'CHAN_TIME'
iv_fill_rule = zif_abapgit_field_rules=>c_fill_rule-time
)->add(
iv_table = 'TOJTB'
iv_field = 'ACTV_USER'
iv_fill_rule = zif_abapgit_field_rules=>c_fill_rule-user
)->add(
iv_table = 'TOJTB'
iv_field = 'ACTV_DATE'
iv_fill_rule = zif_abapgit_field_rules=>c_fill_rule-date
)->add(
iv_table = 'TOJTB'
iv_field = 'ACTV_TIME'
iv_fill_rule = zif_abapgit_field_rules=>c_fill_rule-time
)->add(
iv_table = 'TOJTB'
iv_field = 'REL_USER'
iv_fill_rule = zif_abapgit_field_rules=>c_fill_rule-user
)->add(
iv_table = 'TOJTB'
iv_field = 'REL_DATE'
iv_fill_rule = zif_abapgit_field_rules=>c_fill_rule-date
)->add(
iv_table = 'TOJTB'
iv_field = 'REL_TIME'
iv_fill_rule = zif_abapgit_field_rules=>c_fill_rule-time ).
ENDMETHOD.
METHOD get_generic.
CREATE OBJECT ro_generic
EXPORTING
io_field_rules = get_field_rules( )
is_item = ms_item
iv_language = mv_language.
ENDMETHOD.
METHOD get_program.
SELECT SINGLE progname INTO rv_program FROM tojtb WHERE name = ms_item-obj_name.
ENDMETHOD.
METHOD is_locked.
rv_is_locked = boolc( is_objtype_locked( ) = abap_true OR is_program_locked( ) = abap_true ).
ENDMETHOD.
METHOD is_objtype_locked.
CONSTANTS lc_tabname TYPE tabname VALUE 'SWOTBASDAT'.
DATA lv_varkey TYPE vim_enqkey.
rv_is_locked = abap_false.
lv_varkey = ms_item-obj_name.
CALL FUNCTION 'ENQUEUE_E_TABLE'
EXPORTING
tabname = lc_tabname
varkey = lv_varkey
EXCEPTIONS
foreign_lock = 1
OTHERS = 999.
IF sy-subrc IS NOT INITIAL.
rv_is_locked = abap_true.
ELSE.
CALL FUNCTION 'DEQUEUE_E_TABLE'
EXPORTING
tabname = lc_tabname
varkey = lv_varkey.
ENDIF.
ENDMETHOD.
METHOD is_program_locked.
CONSTANTS lc_enqueue_exclusive TYPE enqmode VALUE 'X'.
DATA lv_progname TYPE progname.
rv_is_locked = abap_false.
lv_progname = get_program( ).
IF lv_progname IS NOT INITIAL.
CALL FUNCTION 'ENQUEUE_ESRDIRE'
EXPORTING
mode_trdir = lc_enqueue_exclusive
name = lv_progname
EXCEPTIONS
foreign_lock = 1
OTHERS = 999.
IF sy-subrc IS NOT INITIAL.
rv_is_locked = abap_true.
ELSE.
CALL FUNCTION 'DEQUEUE_ESRDIRE'
EXPORTING
mode_trdir = lc_enqueue_exclusive
name = lv_progname.
ENDIF.
ENDIF.
ENDMETHOD.
METHOD zif_abapgit_object~changed_by.
DATA: BEGIN OF ls_userinfo,
crea_user TYPE tojtb-crea_user,
chan_user TYPE tojtb-chan_user,
END OF ls_userinfo.
SELECT SINGLE
crea_user
chan_user
INTO (ls_userinfo-crea_user, ls_userinfo-chan_user)
FROM tojtb WHERE name = ms_item-obj_name.
IF ls_userinfo-chan_user IS INITIAL.
ls_userinfo-chan_user = ls_userinfo-crea_user.
ENDIF.
rv_user = ls_userinfo-chan_user.
ENDMETHOD.
METHOD zif_abapgit_object~delete.
get_generic( )->delete( iv_package ).
ENDMETHOD.
METHOD zif_abapgit_object~deserialize.
get_generic( )->deserialize(
iv_package = iv_package
io_xml = io_xml ).
ENDMETHOD.
METHOD zif_abapgit_object~exists.
rv_bool = get_generic( )->exists( ).
ENDMETHOD.
METHOD zif_abapgit_object~get_comparator.
RETURN.
ENDMETHOD.
METHOD zif_abapgit_object~get_deserialize_steps.
APPEND zif_abapgit_object=>gc_step_id-abap TO rt_steps.
ENDMETHOD.
METHOD zif_abapgit_object~get_metadata.
rs_metadata = get_metadata( ).
rs_metadata-delete_tadir = abap_true.
ENDMETHOD.
METHOD zif_abapgit_object~is_active.
rv_active = is_active( ).
ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = is_locked( ).
ENDMETHOD.
METHOD zif_abapgit_object~jump.
"No need as GENERIC class already handles it
ENDMETHOD.
METHOD zif_abapgit_object~serialize.
get_generic( )->serialize( io_xml ).
ENDMETHOD.
ENDCLASS.

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<VSEOCLASS>
<CLSNAME>ZCL_ABAPGIT_OBJECT_SOBJ</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>SOBJ - Business Object Type</DESCRIPT>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
</VSEOCLASS>
</asx:values>
</asx:abap>
</abapGit>