diff --git a/src/zabapgit_object_serializing.prog.abap b/src/zabapgit_object_serializing.prog.abap index 4e34ba17e..33ad3c7e9 100644 --- a/src/zabapgit_object_serializing.prog.abap +++ b/src/zabapgit_object_serializing.prog.abap @@ -29,6 +29,7 @@ INCLUDE zabapgit_object_pinf. INCLUDE zabapgit_object_prog. INCLUDE zabapgit_object_sfbf. INCLUDE zabapgit_object_sfbs. +INCLUDE zabapgit_object_sfpi. INCLUDE zabapgit_object_sfsw. INCLUDE zabapgit_object_shi3. INCLUDE zabapgit_object_shlp. diff --git a/src/zabapgit_object_sfpi.prog.abap b/src/zabapgit_object_sfpi.prog.abap new file mode 100644 index 000000000..67234e8cf --- /dev/null +++ b/src/zabapgit_object_sfpi.prog.abap @@ -0,0 +1,168 @@ +*&---------------------------------------------------------------------* +*& Include ZABAPGIT_OBJECT_DOMA +*&---------------------------------------------------------------------* + +*----------------------------------------------------------------------* +* CLASS lcl_object_doma DEFINITION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_sfpi DEFINITION INHERITING FROM lcl_objects_super FINAL. + + PUBLIC SECTION. + INTERFACES lif_object. + ALIASES mo_files FOR lif_object~mo_files. + + PRIVATE SECTION. + METHODS: + load + RETURNING VALUE(ri_wb_interface) TYPE REF TO if_fp_wb_interface + RAISING lcx_exception, + interface_to_xstring + RETURNING VALUE(rv_xstr) TYPE xstring + RAISING lcx_exception. + +ENDCLASS. "lcl_object_doma DEFINITION + +*----------------------------------------------------------------------* +* CLASS lcl_object_doma IMPLEMENTATION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_sfpi IMPLEMENTATION. + + METHOD lif_object~has_changed_since. + rv_changed = abap_true. + ENDMETHOD. "lif_object~has_changed_since + + METHOD lif_object~changed_by. + + SELECT SINGLE lastuser FROM fpinterface + INTO rv_user + WHERE name = ms_item-obj_name + AND state = 'A'. + IF rv_user IS INITIAL. + SELECT SINGLE firstuser FROM fpinterface + INTO rv_user + WHERE name = ms_item-obj_name + AND state = 'A'. + ENDIF. + IF rv_user IS INITIAL. + rv_user = c_user_unknown. + ENDIF. + + ENDMETHOD. + + METHOD lif_object~get_metadata. + rs_metadata = get_metadata( ). + ENDMETHOD. "lif_object~get_metadata + + METHOD lif_object~exists. + + DATA: lv_name TYPE fpinterface-name. + + SELECT SINGLE name FROM fpinterface + INTO lv_name + WHERE name = ms_item-obj_name + AND state = 'A'. + rv_bool = boolc( sy-subrc = 0 ). + + ENDMETHOD. "lif_object~exists + + METHOD lif_object~jump. + lcx_exception=>raise( 'todo, SFPI jump' ). + ENDMETHOD. "jump + + METHOD lif_object~delete. + + DATA: lv_name TYPE fpname, + lo_wb_interface TYPE REF TO cl_fp_wb_interface. + + + lo_wb_interface ?= load( ). + + lv_name = ms_item-obj_name. + + TRY. + lo_wb_interface->delete( lv_name ). + CATCH cx_fp_api. + lcx_exception=>raise( 'SFPI error, delete' ). + ENDTRY. + + ENDMETHOD. "delete + + METHOD load. + + DATA: lv_name TYPE fpname. + + + lv_name = ms_item-obj_name. + + TRY. + ri_wb_interface = cl_fp_wb_interface=>load( lv_name ). + CATCH cx_fp_api. + lcx_exception=>raise( 'SFPI error, load' ). + ENDTRY. + + ENDMETHOD. + + METHOD interface_to_xstring. + + DATA: lv_xstr TYPE xstring, + li_fp_interface TYPE REF TO if_fp_interface, + li_wb_interface TYPE REF TO if_fp_wb_interface. + + + TRY. + li_wb_interface = load( ). + li_fp_interface ?= li_wb_interface->get_object( ). + rv_xstr = cl_fp_helper=>convert_interface_to_xstring( li_fp_interface ). + CATCH cx_fp_api. + lcx_exception=>raise( 'SFPI error, interface_to_xstring' ). + ENDTRY. + + ENDMETHOD. + + METHOD lif_object~serialize. + + DATA: lv_xstr TYPE xstring, + li_document TYPE REF TO if_ixml_document. + + + lv_xstr = interface_to_xstring( ). + li_document = cl_ixml_80_20=>parse_to_document( stream_xstring = lv_xstr ). + io_xml->set_raw( li_document->get_root_element( ) ). + + ENDMETHOD. "serialize + + METHOD lif_object~deserialize. + + DATA: lv_xstr TYPE xstring, + lv_name TYPE fpname, + li_wb_object TYPE REF TO if_fp_wb_interface, + li_interface TYPE REF TO if_fp_interface. + + + lv_name = ms_item-obj_name. + lv_xstr = cl_ixml_80_20=>render_to_xstring( io_xml->get_raw( ) ). + + TRY. + li_interface = cl_fp_helper=>convert_xstring_to_interface( lv_xstr ). + tadir_insert( iv_package ). + li_wb_object = cl_fp_wb_interface=>create( i_name = lv_name + i_interface = li_interface ). + li_wb_object->save( ). + li_wb_object->free( ). + CATCH cx_fp_api. + lcx_exception=>raise( 'SFPI error, deserialize' ). + ENDTRY. + + lcl_objects_activation=>add_item( ms_item ). + + ENDMETHOD. "deserialize + + METHOD lif_object~compare_to_remote_version. + CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + ENDMETHOD. + +ENDCLASS. "lcl_object_doma IMPLEMENTATION diff --git a/src/zabapgit_object_sfpi.prog.xml b/src/zabapgit_object_sfpi.prog.xml new file mode 100644 index 000000000..15fde47e5 --- /dev/null +++ b/src/zabapgit_object_sfpi.prog.xml @@ -0,0 +1,22 @@ + + + + + + ZABAPGIT_OBJECT_SFPI + A + X + I + E + X + + + + R + Include ZABAPGIT_OBJECT_DOMA + 28 + + + + + diff --git a/src/zabapgit_object_ssfo.prog.abap b/src/zabapgit_object_ssfo.prog.abap index ff7ceb1f7..671881b61 100644 --- a/src/zabapgit_object_ssfo.prog.abap +++ b/src/zabapgit_object_ssfo.prog.abap @@ -200,7 +200,7 @@ CLASS lcl_object_ssfo IMPLEMENTATION. CREATE OBJECT lo_sf. * set "created by" and "changed by" to current user - li_iterator = io_xml->get_raw( )->create_iterator( ). + li_iterator = io_xml->get_raw( )->get_root_element( )->create_iterator( ). li_node = li_iterator->get_next( ). WHILE NOT li_node IS INITIAL. lv_name = li_node->get_name( ). @@ -226,7 +226,7 @@ CLASS lcl_object_ssfo IMPLEMENTATION. mode = 'INSERT' formname = lv_formname ). - lo_sf->xml_upload( EXPORTING dom = io_xml->get_raw( ) + lo_sf->xml_upload( EXPORTING dom = io_xml->get_raw( )->get_root_element( ) formname = lv_formname language = mv_language CHANGING sform = lo_res ). diff --git a/src/zabapgit_xml.prog.abap b/src/zabapgit_xml.prog.abap index 9bf5db1dd..edcd55efc 100644 --- a/src/zabapgit_xml.prog.abap +++ b/src/zabapgit_xml.prog.abap @@ -294,7 +294,7 @@ CLASS lcl_xml_input DEFINITION FINAL INHERITING FROM lcl_xml CREATE PUBLIC. CHANGING cg_data TYPE any RAISING lcx_exception, get_raw - RETURNING VALUE(ri_raw) TYPE REF TO if_ixml_node, + RETURNING VALUE(ri_raw) TYPE REF TO if_ixml_document, * todo, add read_xml to match add_xml in lcl_xml_output get_metadata RETURNING VALUE(rs_metadata) TYPE ty_metadata. @@ -320,7 +320,7 @@ CLASS lcl_xml_input IMPLEMENTATION. ENDMETHOD. "constructor METHOD get_raw. - ri_raw = mi_xml_doc->get_root_element( ). + ri_raw = mi_xml_doc. ENDMETHOD. "get_raw METHOD fix_xml.