mirror of
https://github.com/abapGit/abapGit.git
synced 2025-04-30 20:03:20 +08:00
331 lines
9.1 KiB
ABAP
331 lines
9.1 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.
|
|
|
|
PROTECTED SECTION.
|
|
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 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 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, rs_tobj-tvdir-devclass.
|
|
|
|
SELECT * FROM tvimf INTO TABLE rs_tobj-tvimf WHERE tabname = iv_tabname
|
|
ORDER BY PRIMARY KEY.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD update_extra.
|
|
DATA: lt_current_tvimf TYPE STANDARD TABLE OF tvimf.
|
|
FIELD-SYMBOLS: <ls_tvimf> TYPE tvimf.
|
|
|
|
MODIFY tddat FROM is_tobj-tddat.
|
|
MODIFY tvdir FROM is_tobj-tvdir.
|
|
|
|
SELECT * INTO TABLE lt_current_tvimf
|
|
FROM tvimf
|
|
WHERE tabname = is_tobj-tddat-tabname
|
|
ORDER BY PRIMARY KEY.
|
|
|
|
LOOP AT lt_current_tvimf ASSIGNING <ls_tvimf>.
|
|
READ TABLE is_tobj-tvimf WITH KEY tabname = <ls_tvimf>-tabname
|
|
event = <ls_tvimf>-event
|
|
TRANSPORTING NO FIELDS.
|
|
IF sy-subrc <> 0.
|
|
DELETE FROM tvimf
|
|
WHERE tabname = <ls_tvimf>-tabname
|
|
AND event = <ls_tvimf>-event.
|
|
ENDIF.
|
|
ENDLOOP.
|
|
|
|
MODIFY tvimf FROM TABLE is_tobj-tvimf.
|
|
ENDMETHOD.
|
|
|
|
|
|
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~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.
|
|
|
|
|
|
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.
|
|
ls_tobj-tvdir-devclass = iv_package.
|
|
|
|
update_extra( ls_tobj ).
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
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.
|
|
|
|
|
|
METHOD zif_abapgit_object~get_comparator.
|
|
RETURN.
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~get_deserialize_steps.
|
|
APPEND zif_abapgit_object=>gc_step_id-late 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 = abap_false.
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~jump.
|
|
|
|
DATA: lv_object_name TYPE e071-obj_name.
|
|
|
|
lv_object_name = ms_item-obj_name.
|
|
|
|
CALL FUNCTION 'TR_OBJECT_JUMP_TO_TOOL'
|
|
EXPORTING
|
|
iv_pgmid = 'R3TR'
|
|
iv_object = ms_item-obj_type
|
|
iv_obj_name = lv_object_name
|
|
EXCEPTIONS
|
|
jump_not_possible = 1
|
|
OTHERS = 2.
|
|
|
|
rv_exit = boolc( sy-subrc = 0 ).
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
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_t100( ).
|
|
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 ).
|
|
|
|
IF ls_tobj-tvdir-detail = ``.
|
|
" to prevent xslt serialization error,
|
|
" force clear if numc field is empty
|
|
CLEAR ls_tobj-tvdir-detail.
|
|
ENDIF.
|
|
|
|
io_xml->add( iv_name = 'TOBJ'
|
|
ig_data = ls_tobj ).
|
|
|
|
ENDMETHOD.
|
|
ENDCLASS.
|