From c9e8ca2c93d6b33ad60200ace4aace709a7c96ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Wiejkut?= Date: Sat, 11 Jan 2020 10:11:57 +0100 Subject: [PATCH] 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 --- src/objects/zcl_abapgit_object_iobj.clas.abap | 190 +++++++++++++++--- 1 file changed, 166 insertions(+), 24 deletions(-) diff --git a/src/objects/zcl_abapgit_object_iobj.clas.abap b/src/objects/zcl_abapgit_object_iobj.clas.abap index 83638b98b..3b03f7112 100644 --- a/src/objects/zcl_abapgit_object_iobj.clas.abap +++ b/src/objects/zcl_abapgit_object_iobj.clas.abap @@ -106,22 +106,57 @@ CLASS zcl_abapgit_object_iobj IMPLEMENTATION. 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, - lo_struct_descr TYPE REF TO cl_abap_structdescr, - lo_table_descr TYPE REF TO cl_abap_tabledescr. + lr_details TYPE REF TO data, + lr_infoobj TYPE REF TO data, + ls_return TYPE bapiret2, + lt_return TYPE STANDARD TABLE OF bapiret2, + lo_struct_descr TYPE REF TO cl_abap_structdescr, + 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: - TYPE any, - TYPE data, - TYPE STANDARD TABLE. + TYPE any, + TYPE STANDARD TABLE, + TYPE STANDARD TABLE, + TYPE STANDARD TABLE, + TYPE STANDARD TABLE, + TYPE STANDARD TABLE, + TYPE STANDARD TABLE, + TYPE STANDARD TABLE, + TYPE STANDARD TABLE, + TYPE data, + 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 . - ASSERT sy-subrc = 0. + ASSIGN lr_compounds->* TO . + ASSIGN lr_attributes->* TO . + ASSIGN lr_navigationattributes->* TO . + ASSIGN lr_atrnavinfoprovider->* TO . + ASSIGN lr_hierarchycharacteristics->* TO . + ASSIGN lr_elimination->* TO . + ASSIGN lr_hanafieldsmapping->* TO . + ASSIGN lr_xxlattributes->* TO . lo_struct_descr ?= cl_abap_structdescr=>describe_by_data( ). lo_table_descr = cl_abap_tabledescr=>create( lo_struct_descr ). @@ -131,13 +166,48 @@ CLASS zcl_abapgit_object_iobj IMPLEMENTATION. ASSERT sy-subrc = 0. io_xml->read( EXPORTING iv_name = 'IOBJ' - CHANGING cg_data = ). + CHANGING cg_data = ). + + io_xml->read( EXPORTING iv_name = 'COMPOUNDS' + CHANGING cg_data = ). + + io_xml->read( EXPORTING iv_name = 'ATTRIBUTES' + CHANGING cg_data = ). + + io_xml->read( EXPORTING iv_name = 'NAVIGATION_ATTRIBUTES' + CHANGING cg_data = ). + + io_xml->read( EXPORTING iv_name = 'ATTR_NAVIGATION' + CHANGING cg_data = ). + + io_xml->read( EXPORTING iv_name = 'HIERARCHY' + CHANGING cg_data = ). + + io_xml->read( EXPORTING iv_name = 'ELIMINATION' + CHANGING cg_data = ). + + io_xml->read( EXPORTING iv_name = 'HANA_FIELDS_MAPPING' + CHANGING cg_data = ). + + io_xml->read( EXPORTING iv_name = 'XXL_ATTRIBUTES' + CHANGING cg_data = ). + TRY. + CALL FUNCTION 'BAPI_IOBJ_CREATE' EXPORTING - details = + details = IMPORTING - return = ls_return. + return = ls_return + TABLES + compounds = + attributes = + navigationattributes = + atrnavinfoprovider = + hierarchycharacteristics = + elimination = + hanafieldsmapping = + xxlattributes = . IF ls_return-type = 'E'. 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. SELECT SINGLE iobjnm - FROM rsdiobj + FROM ('RSDIOBJ') INTO lv_iobjnm WHERE iobjnm = ms_item-obj_name. @@ -258,24 +328,72 @@ CLASS zcl_abapgit_object_iobj IMPLEMENTATION. METHOD zif_abapgit_object~serialize. - DATA: lv_iobjnam TYPE rsiobjnm, - ls_return TYPE bapiret2, - lr_details TYPE REF TO data. + DATA: + lv_iobjnam TYPE rsiobjnm, + 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: TYPE any. + FIELD-SYMBOLS: + TYPE any, + TYPE STANDARD TABLE, + TYPE STANDARD TABLE, + TYPE STANDARD TABLE, + TYPE STANDARD TABLE, + TYPE STANDARD TABLE, + TYPE STANDARD TABLE, + TYPE STANDARD TABLE, + 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 . - ASSERT sy-subrc = 0. + ASSIGN lr_compounds->* TO . + ASSIGN lr_attributes->* TO . + ASSIGN lr_navigationattributes->* TO . + ASSIGN lr_atrnavinfoprovider->* TO . + ASSIGN lr_hierarchycharacteristics->* TO . + ASSIGN lr_elimination->* TO . + ASSIGN lr_hanafieldsmapping->* TO . + ASSIGN lr_xxlattributes->* TO . lv_iobjnam = ms_item-obj_name. CALL FUNCTION 'BAPI_IOBJ_GETDETAIL' EXPORTING - infoobject = lv_iobjnam + infoobject = lv_iobjnam IMPORTING - details = - return = ls_return. + details = + return = ls_return + TABLES + compounds = + attributes = + navigationattributes = + atrnavinfoprovider = + hierarchycharacteristics = + elimination = + hanafieldsmapping = + xxlattributes = . IF ls_return-type = 'E'. 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' ig_data = ). + io_xml->add( iv_name = 'COMPOUNDS' + ig_data = ). + + io_xml->add( iv_name = 'ATTRIBUTES' + ig_data = ). + + io_xml->add( iv_name = 'NAVIGATION_ATTRIBUTES' + ig_data = ). + + io_xml->add( iv_name = 'ATTR_NAVIGATION' + ig_data = ). + + io_xml->add( iv_name = 'HIERARCHY' + ig_data = ). + + io_xml->add( iv_name = 'ELIMINATION' + ig_data = ). + + io_xml->add( iv_name = 'HANA_FIELDS_MAPPING' + ig_data = ). + + io_xml->add( iv_name = 'XXL_ATTRIBUTES' + ig_data = ). + ENDMETHOD.