IOBJ support enhancement (#3147)

* IOBJ fix #3105

* Variable fix

* BW function modules check

* Enhancement of iobj support

Enhancement of iobj support which enable handling of:
-attributes,
-compoundings,
-hierarchies

Co-authored-by: Lars Hvam <larshp@hotmail.com>
This commit is contained in:
Paweł Wiejkut 2020-01-11 10:11:57 +01:00 committed by Lars Hvam
parent f9dfa6c22a
commit c9e8ca2c93

View File

@ -106,22 +106,57 @@ CLASS zcl_abapgit_object_iobj IMPLEMENTATION.
METHOD zif_abapgit_object~deserialize. METHOD zif_abapgit_object~deserialize.
DATA: DATA:
lr_details TYPE REF TO data, lr_details TYPE REF TO data,
lr_infoobj TYPE REF TO data, lr_infoobj TYPE REF TO data,
ls_return TYPE bapiret2, ls_return TYPE bapiret2,
lt_return TYPE STANDARD TABLE OF bapiret2, lt_return TYPE STANDARD TABLE OF bapiret2,
lo_struct_descr TYPE REF TO cl_abap_structdescr, lo_struct_descr TYPE REF TO cl_abap_structdescr,
lo_table_descr TYPE REF TO cl_abap_tabledescr. lo_table_descr TYPE REF TO cl_abap_tabledescr,
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: FIELD-SYMBOLS:
<ls_details> TYPE any, <ls_details> TYPE any,
<ls_infoobject> TYPE data, <lt_compounds> TYPE STANDARD TABLE,
<lt_infoobjects> 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,
<ls_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').
CATCH cx_sy_create_data_error.
zcx_abapgit_exception=>raise( |IOBJ is not supported on this system| ).
ENDTRY.
CREATE DATA lr_details TYPE ('BAPI6108').
ASSIGN lr_details->* TO <ls_details>. ASSIGN lr_details->* TO <ls_details>.
ASSERT sy-subrc = 0. 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>.
lo_struct_descr ?= cl_abap_structdescr=>describe_by_data( <ls_details> ). lo_struct_descr ?= cl_abap_structdescr=>describe_by_data( <ls_details> ).
lo_table_descr = cl_abap_tabledescr=>create( lo_struct_descr ). lo_table_descr = cl_abap_tabledescr=>create( lo_struct_descr ).
@ -131,13 +166,48 @@ CLASS zcl_abapgit_object_iobj IMPLEMENTATION.
ASSERT sy-subrc = 0. ASSERT sy-subrc = 0.
io_xml->read( EXPORTING iv_name = 'IOBJ' io_xml->read( EXPORTING iv_name = 'IOBJ'
CHANGING cg_data = <ls_details> ). CHANGING cg_data = <ls_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> ).
TRY. TRY.
CALL FUNCTION 'BAPI_IOBJ_CREATE' CALL FUNCTION 'BAPI_IOBJ_CREATE'
EXPORTING EXPORTING
details = <ls_details> details = <ls_details>
IMPORTING IMPORTING
return = ls_return. 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>.
IF ls_return-type = 'E'. IF ls_return-type = 'E'.
zcx_abapgit_exception=>raise( |Error when creating iobj: { ls_return-message }| ). zcx_abapgit_exception=>raise( |Error when creating iobj: { ls_return-message }| ).
@ -177,7 +247,7 @@ CLASS zcl_abapgit_object_iobj IMPLEMENTATION.
DATA: lv_iobjnm TYPE char30. DATA: lv_iobjnm TYPE char30.
SELECT SINGLE iobjnm SELECT SINGLE iobjnm
FROM rsdiobj FROM ('RSDIOBJ')
INTO lv_iobjnm INTO lv_iobjnm
WHERE iobjnm = ms_item-obj_name. WHERE iobjnm = ms_item-obj_name.
@ -258,24 +328,72 @@ CLASS zcl_abapgit_object_iobj IMPLEMENTATION.
METHOD zif_abapgit_object~serialize. METHOD zif_abapgit_object~serialize.
DATA: lv_iobjnam TYPE rsiobjnm, DATA:
ls_return TYPE bapiret2, lv_iobjnam TYPE rsiobjnm,
lr_details TYPE REF TO data. ls_return TYPE bapiret2,
lr_details TYPE REF TO data,
lr_details2 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: <ls_details> TYPE any. FIELD-SYMBOLS:
<ls_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.
CREATE DATA lr_details TYPE ('BAPI6108').
ASSIGN lr_details->* TO <ls_details>. ASSIGN lr_details->* TO <ls_details>.
ASSERT sy-subrc = 0. 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. lv_iobjnam = ms_item-obj_name.
CALL FUNCTION 'BAPI_IOBJ_GETDETAIL' CALL FUNCTION 'BAPI_IOBJ_GETDETAIL'
EXPORTING EXPORTING
infoobject = lv_iobjnam infoobject = lv_iobjnam
IMPORTING IMPORTING
details = <ls_details> details = <ls_details>
return = ls_return. 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>.
IF ls_return-type = 'E'. IF ls_return-type = 'E'.
zcx_abapgit_exception=>raise( |Error when geting getails of iobj: { ls_return-message }| ). zcx_abapgit_exception=>raise( |Error when geting getails of iobj: { ls_return-message }| ).
@ -293,6 +411,30 @@ CLASS zcl_abapgit_object_iobj IMPLEMENTATION.
io_xml->add( iv_name = 'IOBJ' io_xml->add( iv_name = 'IOBJ'
ig_data = <ls_details> ). ig_data = <ls_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. ENDMETHOD.