mirror of
https://github.com/abapGit/abapGit.git
synced 2025-04-30 11:46:38 +08:00
521 lines
18 KiB
ABAP
521 lines
18 KiB
ABAP
CLASS zcl_abapgit_object_iobj DEFINITION PUBLIC INHERITING FROM zcl_abapgit_objects_super FINAL.
|
|
|
|
PUBLIC SECTION.
|
|
INTERFACES zif_abapgit_object.
|
|
PROTECTED SECTION.
|
|
PRIVATE SECTION.
|
|
METHODS:
|
|
clear_field
|
|
IMPORTING
|
|
iv_fieldname TYPE string
|
|
CHANGING
|
|
cg_metadata TYPE any.
|
|
|
|
ENDCLASS.
|
|
|
|
|
|
|
|
CLASS zcl_abapgit_object_iobj IMPLEMENTATION.
|
|
|
|
|
|
METHOD clear_field.
|
|
|
|
FIELD-SYMBOLS: <lg_field> TYPE data.
|
|
|
|
ASSIGN COMPONENT iv_fieldname
|
|
OF STRUCTURE cg_metadata
|
|
TO <lg_field>.
|
|
ASSERT sy-subrc = 0.
|
|
|
|
CLEAR: <lg_field>.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~changed_by.
|
|
|
|
DATA: lv_objna TYPE c LENGTH 30,
|
|
lr_viobj TYPE REF TO data.
|
|
|
|
FIELD-SYMBOLS:
|
|
<lg_tstpnm> TYPE any,
|
|
<lg_viobj> TYPE any.
|
|
|
|
lv_objna = ms_item-obj_name.
|
|
|
|
TRY.
|
|
CREATE DATA lr_viobj TYPE ('RSD_S_VIOBJ').
|
|
CATCH cx_sy_create_data_error.
|
|
zcx_abapgit_exception=>raise( |IOBJ is not supported on this system| ).
|
|
ENDTRY.
|
|
|
|
ASSIGN lr_viobj->* TO <lg_viobj>.
|
|
|
|
CALL FUNCTION 'RSD_IOBJ_GET'
|
|
EXPORTING
|
|
i_iobjnm = lv_objna
|
|
i_objvers = 'A'
|
|
IMPORTING
|
|
e_s_viobj = <lg_viobj>
|
|
EXCEPTIONS
|
|
iobj_not_found = 1
|
|
illegal_input = 2
|
|
bct_comp_invalid = 3
|
|
* not_authorized = 4 " not in lower releases
|
|
OTHERS = 5.
|
|
IF sy-subrc = 0.
|
|
ASSIGN COMPONENT 'TSTPNM' OF STRUCTURE <lg_viobj> TO <lg_tstpnm>.
|
|
rv_user = <lg_tstpnm>.
|
|
ENDIF.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~delete.
|
|
|
|
TYPES: BEGIN OF ty_iobj,
|
|
objnm TYPE c LENGTH 30.
|
|
TYPES END OF ty_iobj.
|
|
|
|
DATA: lt_iobjname TYPE STANDARD TABLE OF ty_iobj,
|
|
lv_subrc TYPE sy-subrc.
|
|
|
|
APPEND ms_item-obj_name TO lt_iobjname.
|
|
|
|
CALL FUNCTION 'RSDG_IOBJ_MULTI_DELETE'
|
|
EXPORTING
|
|
i_t_iobjnm = lt_iobjname
|
|
i_check_dependent = abap_false
|
|
i_manual = abap_false
|
|
IMPORTING
|
|
e_subrc = lv_subrc.
|
|
|
|
IF lv_subrc <> 0.
|
|
zcx_abapgit_exception=>raise( |Error when deleting InfoObject { ms_item-obj_name }| ).
|
|
ENDIF.
|
|
|
|
corr_insert( iv_package ).
|
|
|
|
TRY.
|
|
" In case of IOBJ dependencies, tadir entry might be leftover so we remove it
|
|
tadir_delete( ).
|
|
CATCH zcx_abapgit_exception ##NO_HANDLER.
|
|
ENDTRY.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~deserialize.
|
|
|
|
DATA:
|
|
lr_details TYPE REF TO data,
|
|
lr_infoobj TYPE REF TO data,
|
|
ls_return TYPE bapiret2,
|
|
lt_return TYPE STANDARD TABLE OF bapiret2,
|
|
lr_compounds TYPE REF TO data,
|
|
lr_attributes TYPE REF TO data,
|
|
lr_navigationattributes TYPE REF TO data,
|
|
lr_atrnavinfoprovider TYPE REF TO data,
|
|
lr_hierarchycharacteristics TYPE REF TO data,
|
|
lr_elimination TYPE REF TO data,
|
|
lr_hanafieldsmapping TYPE REF TO data,
|
|
lr_xxlattributes TYPE REF TO data.
|
|
|
|
FIELD-SYMBOLS:
|
|
<lg_details> TYPE any,
|
|
<lt_compounds> TYPE STANDARD TABLE,
|
|
<lt_attributes> TYPE STANDARD TABLE,
|
|
<lt_navigationattributes> TYPE STANDARD TABLE,
|
|
<lt_atrnavinfoprovider> TYPE STANDARD TABLE,
|
|
<lt_hierarchycharacteristics> TYPE STANDARD TABLE,
|
|
<lt_elimination> TYPE STANDARD TABLE,
|
|
<lt_hanafieldsmapping> TYPE STANDARD TABLE,
|
|
<lt_xxlattributes> TYPE STANDARD TABLE,
|
|
<lg_infoobject> TYPE data,
|
|
<lt_infoobjects> TYPE STANDARD TABLE.
|
|
|
|
TRY.
|
|
CREATE DATA lr_details TYPE ('BAPI6108').
|
|
CREATE DATA lr_compounds TYPE STANDARD TABLE OF ('BAPI6108CM').
|
|
CREATE DATA lr_attributes TYPE STANDARD TABLE OF ('BAPI6108AT').
|
|
CREATE DATA lr_navigationattributes TYPE STANDARD TABLE OF ('BAPI6108AN').
|
|
CREATE DATA lr_atrnavinfoprovider TYPE STANDARD TABLE OF ('BAPI6108NP').
|
|
CREATE DATA lr_hierarchycharacteristics TYPE STANDARD TABLE OF ('BAPI6108HC').
|
|
CREATE DATA lr_elimination TYPE STANDARD TABLE OF ('BAPI6108IE').
|
|
CREATE DATA lr_hanafieldsmapping TYPE STANDARD TABLE OF ('BAPI6108HANA_MAP').
|
|
CREATE DATA lr_xxlattributes TYPE STANDARD TABLE OF ('BAPI6108ATXXL').
|
|
CREATE DATA lr_infoobj TYPE STANDARD TABLE OF ('BAPI6108').
|
|
CATCH cx_sy_create_data_error.
|
|
zcx_abapgit_exception=>raise( |IOBJ is not supported on this system| ).
|
|
ENDTRY.
|
|
|
|
ASSIGN lr_details->* TO <lg_details>.
|
|
ASSIGN lr_compounds->* TO <lt_compounds>.
|
|
ASSIGN lr_attributes->* TO <lt_attributes>.
|
|
ASSIGN lr_navigationattributes->* TO <lt_navigationattributes>.
|
|
ASSIGN lr_atrnavinfoprovider->* TO <lt_atrnavinfoprovider>.
|
|
ASSIGN lr_hierarchycharacteristics->* TO <lt_hierarchycharacteristics>.
|
|
ASSIGN lr_elimination->* TO <lt_elimination>.
|
|
ASSIGN lr_hanafieldsmapping->* TO <lt_hanafieldsmapping>.
|
|
ASSIGN lr_xxlattributes->* TO <lt_xxlattributes>.
|
|
ASSIGN lr_infoobj->* TO <lt_infoobjects>.
|
|
|
|
io_xml->read( EXPORTING iv_name = 'IOBJ'
|
|
CHANGING cg_data = <lg_details> ).
|
|
|
|
io_xml->read( EXPORTING iv_name = 'COMPOUNDS'
|
|
CHANGING cg_data = <lt_compounds> ).
|
|
|
|
io_xml->read( EXPORTING iv_name = 'ATTRIBUTES'
|
|
CHANGING cg_data = <lt_attributes> ).
|
|
|
|
io_xml->read( EXPORTING iv_name = 'NAVIGATION_ATTRIBUTES'
|
|
CHANGING cg_data = <lt_navigationattributes> ).
|
|
|
|
io_xml->read( EXPORTING iv_name = 'ATTR_NAVIGATION'
|
|
CHANGING cg_data = <lt_atrnavinfoprovider> ).
|
|
|
|
io_xml->read( EXPORTING iv_name = 'HIERARCHY'
|
|
CHANGING cg_data = <lt_hierarchycharacteristics> ).
|
|
|
|
io_xml->read( EXPORTING iv_name = 'ELIMINATION'
|
|
CHANGING cg_data = <lt_elimination> ).
|
|
|
|
io_xml->read( EXPORTING iv_name = 'HANA_FIELDS_MAPPING'
|
|
CHANGING cg_data = <lt_hanafieldsmapping> ).
|
|
|
|
io_xml->read( EXPORTING iv_name = 'XXL_ATTRIBUTES'
|
|
CHANGING cg_data = <lt_xxlattributes> ).
|
|
|
|
" Number ranges are local (should not have been serialized)
|
|
clear_field( EXPORTING iv_fieldname = 'NUMBRANR'
|
|
CHANGING cg_metadata = <lg_details> ).
|
|
|
|
TRY.
|
|
|
|
ASSIGN
|
|
COMPONENT 'INFOOBJECT'
|
|
OF STRUCTURE <lg_details>
|
|
TO <lg_infoobject>.
|
|
ASSERT sy-subrc = 0.
|
|
|
|
IF zif_abapgit_object~exists( ) = abap_false.
|
|
TRY.
|
|
CALL FUNCTION 'BAPI_IOBJ_CREATE'
|
|
EXPORTING
|
|
details = <lg_details>
|
|
IMPORTING
|
|
return = ls_return
|
|
TABLES
|
|
compounds = <lt_compounds>
|
|
attributes = <lt_attributes>
|
|
navigationattributes = <lt_navigationattributes>
|
|
atrnavinfoprovider = <lt_atrnavinfoprovider>
|
|
hierarchycharacteristics = <lt_hierarchycharacteristics>
|
|
elimination = <lt_elimination>
|
|
hanafieldsmapping = <lt_hanafieldsmapping>
|
|
xxlattributes = <lt_xxlattributes> ##ARG_OK.
|
|
CATCH cx_sy_dyn_call_param_not_found.
|
|
CALL FUNCTION 'BAPI_IOBJ_CREATE'
|
|
EXPORTING
|
|
details = <lg_details>
|
|
IMPORTING
|
|
return = ls_return
|
|
TABLES
|
|
compounds = <lt_compounds>
|
|
attributes = <lt_attributes>
|
|
navigationattributes = <lt_navigationattributes>
|
|
atrnavinfoprovider = <lt_atrnavinfoprovider>
|
|
hierarchycharacteristics = <lt_hierarchycharacteristics>
|
|
elimination = <lt_elimination>.
|
|
ENDTRY.
|
|
ELSE.
|
|
TRY.
|
|
CALL FUNCTION 'BAPI_IOBJ_CHANGE'
|
|
EXPORTING
|
|
infoobject = <lg_infoobject>
|
|
details = <lg_details>
|
|
IMPORTING
|
|
return = ls_return
|
|
TABLES
|
|
compounds = <lt_compounds>
|
|
attributes = <lt_attributes>
|
|
navigationattributes = <lt_navigationattributes>
|
|
atrnavinfoprovider = <lt_atrnavinfoprovider>
|
|
hierarchycharacteristics = <lt_hierarchycharacteristics>
|
|
elimination = <lt_elimination>
|
|
hanafieldsmapping = <lt_hanafieldsmapping>
|
|
xxlattributes = <lt_xxlattributes> ##ARG_OK.
|
|
CATCH cx_sy_dyn_call_param_not_found.
|
|
CALL FUNCTION 'BAPI_IOBJ_CHANGE'
|
|
EXPORTING
|
|
infoobject = <lg_infoobject>
|
|
details = <lg_details>
|
|
IMPORTING
|
|
return = ls_return
|
|
TABLES
|
|
compounds = <lt_compounds>
|
|
attributes = <lt_attributes>
|
|
navigationattributes = <lt_navigationattributes>
|
|
atrnavinfoprovider = <lt_atrnavinfoprovider>
|
|
hierarchycharacteristics = <lt_hierarchycharacteristics>
|
|
elimination = <lt_elimination>.
|
|
ENDTRY.
|
|
ENDIF.
|
|
|
|
IF ls_return-type = 'E'.
|
|
zcx_abapgit_exception=>raise( |Error when creating iobj: { ls_return-message }| ).
|
|
ENDIF.
|
|
|
|
APPEND <lg_infoobject> TO <lt_infoobjects>.
|
|
|
|
CALL FUNCTION 'BAPI_IOBJ_ACTIVATE_MULTIPLE'
|
|
TABLES
|
|
infoobjects = <lt_infoobjects>
|
|
return = lt_return.
|
|
|
|
READ TABLE lt_return WITH KEY type = 'E' INTO ls_return.
|
|
IF sy-subrc = 0.
|
|
zcx_abapgit_exception=>raise( |Error when activating iobj: { ls_return-message }| ).
|
|
ENDIF.
|
|
|
|
CATCH cx_sy_dyn_call_illegal_func.
|
|
zcx_abapgit_exception=>raise( |Necessary BW function modules not found| ).
|
|
ENDTRY.
|
|
|
|
tadir_insert( iv_package ).
|
|
|
|
corr_insert( iv_package ).
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~exists.
|
|
|
|
DATA: lv_iobjnm TYPE c LENGTH 30.
|
|
|
|
SELECT SINGLE iobjnm
|
|
FROM ('RSDIOBJ')
|
|
INTO lv_iobjnm
|
|
WHERE iobjnm = ms_item-obj_name.
|
|
|
|
rv_bool = boolc( sy-subrc = 0 ).
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~get_comparator.
|
|
RETURN.
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~get_deserialize_order.
|
|
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( ).
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~is_active.
|
|
|
|
DATA: lv_objna TYPE c LENGTH 30,
|
|
lr_viobj TYPE REF TO data.
|
|
|
|
FIELD-SYMBOLS:
|
|
<lg_objstat> TYPE any,
|
|
<lg_viobj> TYPE any.
|
|
|
|
lv_objna = ms_item-obj_name.
|
|
|
|
TRY.
|
|
CREATE DATA lr_viobj TYPE ('RSD_S_VIOBJ').
|
|
CATCH cx_sy_create_data_error.
|
|
zcx_abapgit_exception=>raise( |IOBJ is not supported on this system| ).
|
|
ENDTRY.
|
|
|
|
ASSIGN lr_viobj->* TO <lg_viobj>.
|
|
|
|
CALL FUNCTION 'RSD_IOBJ_GET'
|
|
EXPORTING
|
|
i_iobjnm = lv_objna
|
|
i_objvers = 'A'
|
|
IMPORTING
|
|
e_s_viobj = <lg_viobj>.
|
|
|
|
ASSIGN COMPONENT 'OBJSTAT' OF STRUCTURE <lg_viobj> TO <lg_objstat>.
|
|
|
|
IF <lg_objstat> = 'ACT' AND sy-subrc = 0.
|
|
rv_active = abap_true.
|
|
ENDIF.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~is_locked.
|
|
|
|
DATA: lv_object TYPE eqegraarg.
|
|
|
|
lv_object = ms_item-obj_name.
|
|
OVERLAY lv_object WITH ' '.
|
|
lv_object = lv_object && '*'.
|
|
|
|
rv_is_locked = exists_a_lock_entry_for( iv_lock_object = 'E_BIW_PROV'
|
|
iv_argument = lv_object ).
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~jump.
|
|
" Covered by ZCL_ABAPGIT_OBJECTS=>JUMP
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~map_filename_to_object.
|
|
RETURN.
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~map_object_to_filename.
|
|
RETURN.
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~serialize.
|
|
|
|
DATA:
|
|
lv_iobjnam TYPE rsiobjnm,
|
|
ls_return TYPE bapiret2,
|
|
lr_details TYPE REF TO data,
|
|
lr_compounds TYPE REF TO data,
|
|
lr_attributes TYPE REF TO data,
|
|
lr_navigationattributes TYPE REF TO data,
|
|
lr_atrnavinfoprovider TYPE REF TO data,
|
|
lr_hierarchycharacteristics TYPE REF TO data,
|
|
lr_elimination TYPE REF TO data,
|
|
lr_hanafieldsmapping TYPE REF TO data,
|
|
lr_xxlattributes TYPE REF TO data.
|
|
|
|
FIELD-SYMBOLS:
|
|
<lg_details> TYPE any,
|
|
<lt_compounds> TYPE STANDARD TABLE,
|
|
<lt_attributes> TYPE STANDARD TABLE,
|
|
<lt_navigationattributes> TYPE STANDARD TABLE,
|
|
<lt_atrnavinfoprovider> TYPE STANDARD TABLE,
|
|
<lt_hierarchycharacteristics> TYPE STANDARD TABLE,
|
|
<lt_elimination> TYPE STANDARD TABLE,
|
|
<lt_hanafieldsmapping> TYPE STANDARD TABLE,
|
|
<lt_xxlattributes> TYPE STANDARD TABLE.
|
|
|
|
TRY.
|
|
CREATE DATA lr_details TYPE ('BAPI6108').
|
|
CREATE DATA lr_compounds TYPE STANDARD TABLE OF ('BAPI6108CM').
|
|
CREATE DATA lr_attributes TYPE STANDARD TABLE OF ('BAPI6108AT').
|
|
CREATE DATA lr_navigationattributes TYPE STANDARD TABLE OF ('BAPI6108AN').
|
|
CREATE DATA lr_atrnavinfoprovider TYPE STANDARD TABLE OF ('BAPI6108NP').
|
|
CREATE DATA lr_hierarchycharacteristics TYPE STANDARD TABLE OF ('BAPI6108HC').
|
|
CREATE DATA lr_elimination TYPE STANDARD TABLE OF ('BAPI6108IE').
|
|
CREATE DATA lr_hanafieldsmapping TYPE STANDARD TABLE OF ('BAPI6108HANA_MAP').
|
|
CREATE DATA lr_xxlattributes TYPE STANDARD TABLE OF ('BAPI6108ATXXL').
|
|
CATCH cx_sy_create_data_error.
|
|
zcx_abapgit_exception=>raise( |IOBJ is not supported on this system| ).
|
|
ENDTRY.
|
|
|
|
ASSIGN lr_details->* TO <lg_details>.
|
|
ASSIGN lr_compounds->* TO <lt_compounds>.
|
|
ASSIGN lr_attributes->* TO <lt_attributes>.
|
|
ASSIGN lr_navigationattributes->* TO <lt_navigationattributes>.
|
|
ASSIGN lr_atrnavinfoprovider->* TO <lt_atrnavinfoprovider>.
|
|
ASSIGN lr_hierarchycharacteristics->* TO <lt_hierarchycharacteristics>.
|
|
ASSIGN lr_elimination->* TO <lt_elimination>.
|
|
ASSIGN lr_hanafieldsmapping->* TO <lt_hanafieldsmapping>.
|
|
ASSIGN lr_xxlattributes->* TO <lt_xxlattributes>.
|
|
|
|
lv_iobjnam = ms_item-obj_name.
|
|
|
|
TRY.
|
|
CALL FUNCTION 'BAPI_IOBJ_GETDETAIL'
|
|
EXPORTING
|
|
infoobject = lv_iobjnam
|
|
IMPORTING
|
|
details = <lg_details>
|
|
return = ls_return
|
|
TABLES
|
|
compounds = <lt_compounds>
|
|
attributes = <lt_attributes>
|
|
navigationattributes = <lt_navigationattributes>
|
|
atrnavinfoprovider = <lt_atrnavinfoprovider>
|
|
hierarchycharacteristics = <lt_hierarchycharacteristics>
|
|
elimination = <lt_elimination>
|
|
hanafieldsmapping = <lt_hanafieldsmapping>
|
|
xxlattributes = <lt_xxlattributes> ##ARG_OK.
|
|
CATCH cx_sy_dyn_call_param_not_found.
|
|
CALL FUNCTION 'BAPI_IOBJ_GETDETAIL'
|
|
EXPORTING
|
|
infoobject = lv_iobjnam
|
|
IMPORTING
|
|
details = <lg_details>
|
|
return = ls_return
|
|
TABLES
|
|
compounds = <lt_compounds>
|
|
attributes = <lt_attributes>
|
|
navigationattributes = <lt_navigationattributes>
|
|
atrnavinfoprovider = <lt_atrnavinfoprovider>
|
|
hierarchycharacteristics = <lt_hierarchycharacteristics>
|
|
elimination = <lt_elimination>.
|
|
ENDTRY.
|
|
|
|
IF ls_return-type = 'E'.
|
|
zcx_abapgit_exception=>raise( |Error getting details of InfoObject: { ls_return-message }| ).
|
|
ENDIF.
|
|
|
|
clear_field( EXPORTING iv_fieldname = 'TSTPNM'
|
|
CHANGING cg_metadata = <lg_details> ).
|
|
|
|
clear_field( EXPORTING iv_fieldname = 'TIMESTMP'
|
|
CHANGING cg_metadata = <lg_details> ).
|
|
|
|
clear_field( EXPORTING iv_fieldname = 'DBROUTID'
|
|
CHANGING cg_metadata = <lg_details> ).
|
|
|
|
" Number ranges are local
|
|
clear_field( EXPORTING iv_fieldname = 'NUMBRANR'
|
|
CHANGING cg_metadata = <lg_details> ).
|
|
|
|
io_xml->add( iv_name = 'IOBJ'
|
|
ig_data = <lg_details> ).
|
|
|
|
io_xml->add( iv_name = 'COMPOUNDS'
|
|
ig_data = <lt_compounds> ).
|
|
|
|
io_xml->add( iv_name = 'ATTRIBUTES'
|
|
ig_data = <lt_attributes> ).
|
|
|
|
io_xml->add( iv_name = 'NAVIGATION_ATTRIBUTES'
|
|
ig_data = <lt_navigationattributes> ).
|
|
|
|
io_xml->add( iv_name = 'ATTR_NAVIGATION'
|
|
ig_data = <lt_atrnavinfoprovider> ).
|
|
|
|
io_xml->add( iv_name = 'HIERARCHY'
|
|
ig_data = <lt_hierarchycharacteristics> ).
|
|
|
|
io_xml->add( iv_name = 'ELIMINATION'
|
|
ig_data = <lt_elimination> ).
|
|
|
|
io_xml->add( iv_name = 'HANA_FIELDS_MAPPING'
|
|
ig_data = <lt_hanafieldsmapping> ).
|
|
|
|
io_xml->add( iv_name = 'XXL_ATTRIBUTES'
|
|
ig_data = <lt_xxlattributes> ).
|
|
|
|
ENDMETHOD.
|
|
ENDCLASS.
|