mirror of
https://github.com/abapGit/abapGit.git
synced 2025-04-30 11:46:38 +08:00
310 lines
9.0 KiB
ABAP
310 lines
9.0 KiB
ABAP
CLASS zcl_abapgit_object_tobj DEFINITION PUBLIC INHERITING FROM zcl_abapgit_objects_super FINAL.
|
|
|
|
PUBLIC SECTION.
|
|
INTERFACES zif_abapgit_object.
|
|
ALIASES mo_files FOR zif_abapgit_object~mo_files.
|
|
|
|
PRIVATE SECTION.
|
|
TYPES: BEGIN OF ty_tobj,
|
|
tddat TYPE tddat,
|
|
tvdir TYPE tvdir,
|
|
tvimf TYPE STANDARD TABLE OF tvimf WITH DEFAULT KEY,
|
|
END OF ty_tobj.
|
|
|
|
METHODS:
|
|
read_extra IMPORTING iv_tabname TYPE vim_name
|
|
RETURNING VALUE(rs_tobj) TYPE ty_tobj,
|
|
update_extra IMPORTING is_tobj TYPE ty_tobj,
|
|
delete_extra IMPORTING iv_tabname TYPE vim_name.
|
|
|
|
ENDCLASS.
|
|
|
|
CLASS zcl_abapgit_object_tobj IMPLEMENTATION.
|
|
|
|
METHOD read_extra.
|
|
|
|
SELECT SINGLE * FROM tddat INTO rs_tobj-tddat WHERE tabname = iv_tabname.
|
|
|
|
SELECT SINGLE * FROM tvdir INTO rs_tobj-tvdir WHERE tabname = iv_tabname.
|
|
CLEAR: rs_tobj-tvdir-gendate, rs_tobj-tvdir-gentime.
|
|
|
|
SELECT * FROM tvimf INTO TABLE rs_tobj-tvimf WHERE tabname = iv_tabname.
|
|
|
|
ENDMETHOD.
|
|
|
|
METHOD update_extra.
|
|
|
|
MODIFY tddat FROM is_tobj-tddat.
|
|
MODIFY tvdir FROM is_tobj-tvdir.
|
|
MODIFY tvimf FROM TABLE is_tobj-tvimf.
|
|
|
|
ENDMETHOD.
|
|
|
|
METHOD delete_extra.
|
|
|
|
DELETE FROM tddat WHERE tabname = iv_tabname.
|
|
DELETE FROM tvdir WHERE tabname = iv_tabname.
|
|
DELETE FROM tvimf WHERE tabname = iv_tabname.
|
|
|
|
ENDMETHOD.
|
|
|
|
METHOD zif_abapgit_object~has_changed_since.
|
|
rv_changed = abap_true.
|
|
ENDMETHOD. "zif_abapgit_object~has_changed_since
|
|
|
|
METHOD zif_abapgit_object~changed_by.
|
|
|
|
DATA: lv_type_pos TYPE i.
|
|
|
|
lv_type_pos = strlen( ms_item-obj_name ) - 1.
|
|
|
|
SELECT SINGLE luser FROM objh INTO rv_user
|
|
WHERE objectname = ms_item-obj_name(lv_type_pos)
|
|
AND objecttype = ms_item-obj_name+lv_type_pos. "#EC CI_GENBUFF
|
|
IF sy-subrc <> 0.
|
|
rv_user = c_user_unknown.
|
|
ENDIF.
|
|
|
|
ENDMETHOD.
|
|
|
|
METHOD zif_abapgit_object~get_metadata.
|
|
rs_metadata = get_metadata( ).
|
|
rs_metadata-late_deser = abap_true.
|
|
ENDMETHOD. "zif_abapgit_object~get_metadata
|
|
|
|
METHOD zif_abapgit_object~exists.
|
|
|
|
DATA: lv_objectname TYPE objh-objectname,
|
|
lv_type_pos TYPE i.
|
|
|
|
lv_type_pos = strlen( ms_item-obj_name ) - 1.
|
|
|
|
SELECT SINGLE objectname FROM objh INTO lv_objectname
|
|
WHERE objectname = ms_item-obj_name(lv_type_pos)
|
|
AND objecttype = ms_item-obj_name+lv_type_pos. "#EC CI_GENBUFF
|
|
rv_bool = boolc( sy-subrc = 0 ).
|
|
|
|
ENDMETHOD. "zif_abapgit_object~exists
|
|
|
|
METHOD zif_abapgit_object~serialize.
|
|
|
|
DATA: ls_objh TYPE objh,
|
|
ls_objt TYPE objt,
|
|
lt_objs TYPE tt_objs,
|
|
lt_objsl TYPE tt_objsl,
|
|
lt_objm TYPE tt_objm,
|
|
ls_tobj TYPE ty_tobj,
|
|
lv_type_pos TYPE i.
|
|
|
|
lv_type_pos = strlen( ms_item-obj_name ) - 1.
|
|
|
|
ls_objh-objectname = ms_item-obj_name(lv_type_pos).
|
|
ls_objh-objecttype = ms_item-obj_name+lv_type_pos.
|
|
|
|
CALL FUNCTION 'CTO_OBJECT_GET'
|
|
EXPORTING
|
|
iv_objectname = ls_objh-objectname
|
|
iv_objecttype = ls_objh-objecttype
|
|
iv_language = mv_language
|
|
iv_sel_objt = abap_true
|
|
iv_sel_objs = abap_true
|
|
iv_sel_objsl = abap_true
|
|
iv_sel_objm = abap_true
|
|
IMPORTING
|
|
es_objh = ls_objh
|
|
es_objt = ls_objt
|
|
TABLES
|
|
tt_objs = lt_objs
|
|
tt_objsl = lt_objsl
|
|
tt_objm = lt_objm
|
|
EXCEPTIONS
|
|
object_not_defined = 1
|
|
OTHERS = 2.
|
|
IF sy-subrc = 1.
|
|
RETURN.
|
|
ELSEIF sy-subrc <> 0.
|
|
zcx_abapgit_exception=>raise( 'error from CTO_OBJECT_GET' ).
|
|
ENDIF.
|
|
|
|
CLEAR: ls_objh-luser,
|
|
ls_objh-ldate.
|
|
|
|
io_xml->add( iv_name = 'OBJH'
|
|
ig_data = ls_objh ).
|
|
io_xml->add( iv_name = 'OBJT'
|
|
ig_data = ls_objt ).
|
|
io_xml->add( iv_name = 'OBJS'
|
|
ig_data = lt_objs ).
|
|
io_xml->add( iv_name = 'OBJSL'
|
|
ig_data = lt_objsl ).
|
|
io_xml->add( iv_name = 'OBJM'
|
|
ig_data = lt_objm ).
|
|
|
|
ls_tobj = read_extra( ls_objh-objectname ).
|
|
|
|
io_xml->add( iv_name = 'TOBJ'
|
|
ig_data = ls_tobj ).
|
|
|
|
ENDMETHOD. "serialize
|
|
|
|
METHOD zif_abapgit_object~deserialize.
|
|
|
|
DATA: ls_objh TYPE objh,
|
|
ls_objt TYPE objt,
|
|
lt_objs TYPE tt_objs,
|
|
lt_objsl TYPE tt_objsl,
|
|
lt_objm TYPE tt_objm,
|
|
ls_tobj TYPE ty_tobj.
|
|
|
|
|
|
io_xml->read( EXPORTING iv_name = 'OBJH'
|
|
CHANGING cg_data = ls_objh ).
|
|
io_xml->read( EXPORTING iv_name = 'OBJT'
|
|
CHANGING cg_data = ls_objt ).
|
|
io_xml->read( EXPORTING iv_name = 'OBJS'
|
|
CHANGING cg_data = lt_objs ).
|
|
io_xml->read( EXPORTING iv_name = 'OBJSL'
|
|
CHANGING cg_data = lt_objsl ).
|
|
io_xml->read( EXPORTING iv_name = 'OBJM'
|
|
CHANGING cg_data = lt_objm ).
|
|
|
|
CALL FUNCTION 'OBJ_GENERATE'
|
|
EXPORTING
|
|
iv_objectname = ls_objh-objectname
|
|
iv_objecttype = ls_objh-objecttype
|
|
iv_maint_mode = 'I'
|
|
iv_objecttext = ls_objt-ddtext
|
|
iv_objcateg = ls_objh-objcateg
|
|
iv_objtransp = ls_objh-objtransp
|
|
iv_devclass = iv_package
|
|
TABLES
|
|
tt_v_obj_s = lt_objs
|
|
tt_objm = lt_objm
|
|
EXCEPTIONS
|
|
illegal_call = 1
|
|
object_not_found = 2
|
|
generate_error = 3
|
|
transport_error = 4
|
|
object_enqueue_failed = 5
|
|
OTHERS = 6.
|
|
IF sy-subrc <> 0.
|
|
* TOBJ has to be saved/generated after the DDIC tables have been
|
|
* activated - fixed with late deserialization
|
|
zcx_abapgit_exception=>raise( 'error from OBJ_GENERATE' ).
|
|
ENDIF.
|
|
|
|
CALL FUNCTION 'OBJ_SET_IMPORTABLE'
|
|
EXPORTING
|
|
iv_objectname = ls_objh-objectname
|
|
iv_objecttype = ls_objh-objecttype
|
|
iv_importable = ls_objh-importable
|
|
EXCEPTIONS
|
|
object_not_defined = 1
|
|
invalid = 2
|
|
transport_error = 3
|
|
object_enqueue_failed = 4
|
|
OTHERS = 5.
|
|
IF sy-subrc <> 0.
|
|
zcx_abapgit_exception=>raise( 'error from OBJ_SET_IMPORTABLE' ).
|
|
ENDIF.
|
|
|
|
* fm OBJ_GENERATE takes the defaults from the DDIC object
|
|
* set OBJTRANSP directly, should be okay looking at the code in OBJ_SET_IMPORTABLE
|
|
* locking has been done in OBJ_SET_IMPORTABLE plus recording of transport
|
|
UPDATE objh SET objtransp = ls_objh-objtransp
|
|
WHERE objectname = ls_objh-objectname
|
|
AND objecttype = ls_objh-objecttype.
|
|
|
|
io_xml->read( EXPORTING iv_name = 'TOBJ'
|
|
CHANGING cg_data = ls_tobj ).
|
|
ls_tobj-tvdir-gendate = sy-datum.
|
|
ls_tobj-tvdir-gentime = sy-uzeit.
|
|
|
|
update_extra( ls_tobj ).
|
|
|
|
ENDMETHOD.
|
|
|
|
METHOD zif_abapgit_object~delete.
|
|
|
|
DATA: ls_objh TYPE objh,
|
|
lv_type_pos TYPE i.
|
|
|
|
lv_type_pos = strlen( ms_item-obj_name ) - 1.
|
|
|
|
ls_objh-objectname = ms_item-obj_name(lv_type_pos).
|
|
ls_objh-objecttype = ms_item-obj_name+lv_type_pos.
|
|
|
|
CALL FUNCTION 'OBJ_GENERATE'
|
|
EXPORTING
|
|
iv_objectname = ls_objh-objectname
|
|
iv_objecttype = ls_objh-objecttype
|
|
iv_maint_mode = 'D'
|
|
EXCEPTIONS
|
|
illegal_call = 1
|
|
object_not_found = 2
|
|
generate_error = 3
|
|
transport_error = 4
|
|
object_enqueue_failed = 5
|
|
OTHERS = 6.
|
|
IF sy-subrc <> 0.
|
|
zcx_abapgit_exception=>raise( 'error from OBJ_GENERATE' ).
|
|
ENDIF.
|
|
|
|
delete_extra( ls_objh-objectname ).
|
|
|
|
ENDMETHOD. "delete
|
|
|
|
METHOD zif_abapgit_object~jump.
|
|
|
|
DATA: ls_bcdata TYPE bdcdata,
|
|
lt_bcdata TYPE STANDARD TABLE OF bdcdata.
|
|
|
|
ls_bcdata-program = 'SAPMSVIM'.
|
|
ls_bcdata-dynpro = '0050'.
|
|
ls_bcdata-dynbegin = 'X'.
|
|
APPEND ls_bcdata TO lt_bcdata.
|
|
|
|
CLEAR ls_bcdata.
|
|
ls_bcdata-fnam = 'VIMDYNFLDS-VIEWNAME'.
|
|
ls_bcdata-fval = substring( val = ms_item-obj_name
|
|
len = strlen( ms_item-obj_name ) - 1 ).
|
|
APPEND ls_bcdata TO lt_bcdata.
|
|
|
|
CLEAR ls_bcdata.
|
|
ls_bcdata-fnam = 'VIMDYNFLDS-ELEM_GEN'.
|
|
ls_bcdata-fval = abap_true.
|
|
APPEND ls_bcdata TO lt_bcdata.
|
|
|
|
CLEAR ls_bcdata.
|
|
ls_bcdata-fnam = 'BDC_OKCODE'.
|
|
ls_bcdata-fval = '=SHOW'.
|
|
APPEND ls_bcdata TO lt_bcdata.
|
|
|
|
CALL FUNCTION 'ABAP4_CALL_TRANSACTION'
|
|
STARTING NEW TASK 'GIT'
|
|
EXPORTING
|
|
tcode = 'SE54'
|
|
mode_val = 'E'
|
|
TABLES
|
|
using_tab = lt_bcdata
|
|
EXCEPTIONS
|
|
OTHERS = 1.
|
|
|
|
IF sy-subrc <> 0.
|
|
zcx_abapgit_exception=>raise( 'error from ABAP4_CALL_TRANSACTION, TOBJ' ).
|
|
ENDIF.
|
|
|
|
ENDMETHOD. "jump
|
|
|
|
METHOD zif_abapgit_object~compare_to_remote_version.
|
|
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
|
|
ENDMETHOD.
|
|
|
|
METHOD zif_abapgit_object~is_locked.
|
|
|
|
rv_is_locked = abap_false.
|
|
|
|
ENDMETHOD.
|
|
|
|
ENDCLASS. "zcl_abapgit_object_tobj IMPLEMENTATION
|