From 545bd5dea7de00a476e13b95872b477fb1ebdaca Mon Sep 17 00:00:00 2001 From: larshp Date: Thu, 23 Feb 2017 15:57:52 +0000 Subject: [PATCH] SFPF support #98 --- src/zabapgit_object_serializing.prog.abap | 1 + src/zabapgit_object_sfpf.prog.abap | 225 ++++++++++++++++++++++ src/zabapgit_object_sfpf.prog.xml | 22 +++ src/zabapgit_object_sfpi.prog.abap | 56 +----- 4 files changed, 249 insertions(+), 55 deletions(-) create mode 100644 src/zabapgit_object_sfpf.prog.abap create mode 100644 src/zabapgit_object_sfpf.prog.xml diff --git a/src/zabapgit_object_serializing.prog.abap b/src/zabapgit_object_serializing.prog.abap index 33ad3c7e9..f8153fd7d 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_sfpf. INCLUDE zabapgit_object_sfpi. INCLUDE zabapgit_object_sfsw. INCLUDE zabapgit_object_shi3. diff --git a/src/zabapgit_object_sfpf.prog.abap b/src/zabapgit_object_sfpf.prog.abap new file mode 100644 index 000000000..ce515d552 --- /dev/null +++ b/src/zabapgit_object_sfpf.prog.abap @@ -0,0 +1,225 @@ +*&---------------------------------------------------------------------* +*& Include ZABAPGIT_OBJECT_DOMA +*&---------------------------------------------------------------------* + +*----------------------------------------------------------------------* +* CLASS lcl_object_doma DEFINITION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_sfpf DEFINITION INHERITING FROM lcl_objects_super FINAL. + + PUBLIC SECTION. + INTERFACES lif_object. + ALIASES mo_files FOR lif_object~mo_files. + + CLASS-METHODS: + fix_oref + IMPORTING ii_document TYPE REF TO if_ixml_document. + + PRIVATE SECTION. + METHODS: + load + RETURNING VALUE(ri_wb_form) TYPE REF TO if_fp_wb_form + RAISING lcx_exception, + form_to_xstring + RETURNING VALUE(rv_xstr) TYPE xstring + RAISING lcx_exception. + +ENDCLASS. "lcl_object_doma DEFINITION + +*----------------------------------------------------------------------* +* CLASS lcl_object_doma IMPLEMENTATION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_sfpf 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 fplayout + INTO rv_user + WHERE name = ms_item-obj_name + AND state = 'A'. + IF rv_user IS INITIAL. + SELECT SINGLE firstuser FROM fplayout + 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 fpname. + + SELECT SINGLE name FROM fplayout + 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, SFPF jump' ). + ENDMETHOD. "jump + + METHOD lif_object~delete. + + DATA: lv_name TYPE fpname, + lo_wb_form TYPE REF TO cl_fp_wb_form. + + + lo_wb_form ?= load( ). + + lv_name = ms_item-obj_name. + + TRY. + lo_wb_form->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_form = cl_fp_wb_form=>load( lv_name ). + CATCH cx_fp_api. + lcx_exception=>raise( 'SFPF error, load' ). + ENDTRY. + + ENDMETHOD. + + METHOD form_to_xstring. + + DATA: lv_xstr TYPE xstring, + li_fp_form TYPE REF TO if_fp_form, + li_wb_form TYPE REF TO if_fp_wb_form. + + + TRY. + li_wb_form = load( ). + li_fp_form ?= li_wb_form->get_object( ). + rv_xstr = cl_fp_helper=>convert_form_to_xstring( li_fp_form ). + CATCH cx_fp_api. + lcx_exception=>raise( 'SFPF error, form_to_xstring' ). + ENDTRY. + + ENDMETHOD. + + METHOD fix_oref. + + DATA: li_iterator TYPE REF TO if_ixml_node_iterator, + lv_name TYPE string, + lv_value TYPE string, + lv_new TYPE n LENGTH 3, + lv_old TYPE string, + lt_map TYPE STANDARD TABLE OF string WITH DEFAULT KEY, + li_attr_map TYPE REF TO if_ixml_named_node_map, + li_attr TYPE REF TO if_ixml_node, + li_node TYPE REF TO if_ixml_node. + + DEFINE _lookup. + read table lt_map from &1 transporting no fields. + if sy-subrc <> 0. + append &1 to lt_map. + read table lt_map from &1 transporting no fields. + endif. + lv_new = sy-tabix + 100. + END-OF-DEFINITION. + + + li_iterator = ii_document->create_iterator( ). + li_node = li_iterator->get_next( ). + WHILE NOT li_node IS INITIAL. + li_attr_map = li_node->get_attributes( ). + + IF li_attr_map IS BOUND. + li_attr = li_attr_map->get_named_item_ns( 'href' ). + IF li_attr IS BOUND. + lv_old = li_attr->get_value( ). + IF lv_old(2) = '#o'. + _lookup lv_old+1. + li_attr->set_value( '#o' && lv_new ). + ENDIF. + ENDIF. + + li_attr = li_attr_map->get_named_item_ns( 'id' ). + IF li_attr IS BOUND. + lv_old = li_attr->get_value( ). + IF lv_old(1) = 'o'. + _lookup lv_old. + li_attr->set_value( 'o' && lv_new ). + ENDIF. + ENDIF. + ENDIF. + + li_node = li_iterator->get_next( ). + ENDWHILE. + + ENDMETHOD. + + METHOD lif_object~serialize. + + DATA: lv_xstr TYPE xstring, + li_document TYPE REF TO if_ixml_document. + + + lv_xstr = form_to_xstring( ). + li_document = cl_ixml_80_20=>parse_to_document( stream_xstring = lv_xstr ). + fix_oref( li_document ). + 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_form, + li_form TYPE REF TO if_fp_form. + + + lv_name = ms_item-obj_name. + lv_xstr = cl_ixml_80_20=>render_to_xstring( io_xml->get_raw( ) ). + + TRY. + li_form = cl_fp_helper=>convert_xstring_to_form( lv_xstr ). + tadir_insert( iv_package ). + li_wb_object = cl_fp_wb_form=>create( i_name = lv_name + i_form = li_form ). + li_wb_object->save( ). + li_wb_object->free( ). + CATCH cx_fp_api. + lcx_exception=>raise( 'SFPF 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_sfpf.prog.xml b/src/zabapgit_object_sfpf.prog.xml new file mode 100644 index 000000000..bfd12fb70 --- /dev/null +++ b/src/zabapgit_object_sfpf.prog.xml @@ -0,0 +1,22 @@ + + + + + + ZABAPGIT_OBJECT_SFPF + A + X + I + E + X + + + + R + Include ZABAPGIT_OBJECT_DOMA + 28 + + + + + diff --git a/src/zabapgit_object_sfpi.prog.abap b/src/zabapgit_object_sfpi.prog.abap index 930151f6d..d058e0a32 100644 --- a/src/zabapgit_object_sfpi.prog.abap +++ b/src/zabapgit_object_sfpi.prog.abap @@ -18,8 +18,6 @@ CLASS lcl_object_sfpi DEFINITION INHERITING FROM lcl_objects_super FINAL. load RETURNING VALUE(ri_wb_interface) TYPE REF TO if_fp_wb_interface RAISING lcx_exception, - fix_oref - IMPORTING ii_document TYPE REF TO if_ixml_document, interface_to_xstring RETURNING VALUE(rv_xstr) TYPE xstring RAISING lcx_exception. @@ -125,58 +123,6 @@ CLASS lcl_object_sfpi IMPLEMENTATION. ENDMETHOD. - METHOD fix_oref. - - DATA: li_iterator TYPE REF TO if_ixml_node_iterator, - lv_name TYPE string, - lv_value TYPE string, - lv_new TYPE n LENGTH 3, - lv_old TYPE string, - lt_map TYPE STANDARD TABLE OF string WITH DEFAULT KEY, - li_attr_map TYPE REF TO if_ixml_named_node_map, - li_attr TYPE REF TO if_ixml_node, - li_node TYPE REF TO if_ixml_node. - - DEFINE _lookup. - read table lt_map from &1 transporting no fields. - if sy-subrc <> 0. - append &1 to lt_map. - read table lt_map from &1 transporting no fields. - endif. - lv_new = sy-tabix + 100. - END-OF-DEFINITION. - - - li_iterator = ii_document->create_iterator( ). - li_node = li_iterator->get_next( ). - WHILE NOT li_node IS INITIAL. - li_attr_map = li_node->get_attributes( ). - - IF li_attr_map IS BOUND. - li_attr = li_attr_map->get_named_item_ns( 'href' ). - IF li_attr IS BOUND. - lv_old = li_attr->get_value( ). - IF lv_old(2) = '#o'. - _lookup lv_old+1. - li_attr->set_value( '#o' && lv_new ). - ENDIF. - ENDIF. - - li_attr = li_attr_map->get_named_item_ns( 'id' ). - IF li_attr IS BOUND. - lv_old = li_attr->get_value( ). - IF lv_old(1) = 'o'. - _lookup lv_old. - li_attr->set_value( 'o' && lv_new ). - ENDIF. - ENDIF. - ENDIF. - - li_node = li_iterator->get_next( ). - ENDWHILE. - - ENDMETHOD. - METHOD lif_object~serialize. DATA: lv_xstr TYPE xstring, @@ -185,7 +131,7 @@ CLASS lcl_object_sfpi IMPLEMENTATION. lv_xstr = interface_to_xstring( ). li_document = cl_ixml_80_20=>parse_to_document( stream_xstring = lv_xstr ). - fix_oref( li_document ). + lcl_object_sfpf=>fix_oref( li_document ). io_xml->set_raw( li_document->get_root_element( ) ). ENDMETHOD. "serialize