anchor.diff:  
     METHOD lif_object~deserialize.
   
  -    DATA: lo_xml    TYPE REF TO lcl_xml,
  +    DATA: lo_xml    TYPE REF TO lcl_xml_input,
             lv_ddtext TYPE ddtypet-ddtext,
             lt_source TYPE abaptxt255_tab.
   
   
       lo_xml = mo_files->read_xml( ).
  -    lo_xml->element_read( CHANGING cg_element = lv_ddtext ).
  +    lo_xml->read( EXPORTING iv_name = 'DDTEXT'
  +                  CHANGING cg_data = lv_ddtext ).
   
       lt_source = mo_files->read_abap( ).
   
  
positive.code: *----------------------------------------------------------------------*
  *
  *----------------------------------------------------------------------*
  CLASS lcl_object_ssfo DEFINITION INHERITING FROM lcl_objects_super FINAL.
  
    PUBLIC SECTION.
      INTERFACES lif_object.
  
  ENDCLASS.                    "lcl_object_dtel DEFINITION
  
  *----------------------------------------------------------------------*
  *       CLASS lcl_object_dtel IMPLEMENTATION
  *----------------------------------------------------------------------*
  *
  *----------------------------------------------------------------------*
  CLASS lcl_object_ssfo IMPLEMENTATION.
  
    METHOD lif_object~exists.
  
      DATA: lv_formname TYPE stxfadm-formname.
  
  
      SELECT SINGLE formname FROM stxfadm INTO lv_formname
        WHERE formname = ms_item-obj_name.
      rv_bool = boolc( sy-subrc = 0 ).
  
    ENDMETHOD.
  
    METHOD lif_object~jump.
  
      DATA: lt_bdcdata TYPE TABLE OF bdcdata.
  
      FIELD-SYMBOLS: <ls_bdcdata> LIKE LINE OF lt_bdcdata.
  
  
      APPEND INITIAL LINE TO lt_bdcdata ASSIGNING <ls_bdcdata>.
      <ls_bdcdata>-program  = 'SAPMSSFO'.
      <ls_bdcdata>-dynpro   = '0100'.
      <ls_bdcdata>-dynbegin = abap_true.
  
      APPEND INITIAL LINE TO lt_bdcdata ASSIGNING <ls_bdcdata>.
      <ls_bdcdata>-fnam = 'BDC_OKCODE'.
      <ls_bdcdata>-fval = '=DISPLAY'.
  
      APPEND INITIAL LINE TO lt_bdcdata ASSIGNING <ls_bdcdata>.
      <ls_bdcdata>-fnam = 'RB_SF'.
      <ls_bdcdata>-fval = abap_true.
  
      APPEND INITIAL LINE TO lt_bdcdata ASSIGNING <ls_bdcdata>.
      <ls_bdcdata>-fnam = 'SSFSCREEN-FNAME'.
      <ls_bdcdata>-fval = ms_item-obj_name.
  
      CALL FUNCTION 'ABAP4_CALL_TRANSACTION'
        STARTING NEW TASK 'GIT'
        EXPORTING
          tcode                 = 'SMARTFORMS'
          mode_val              = 'E'
        TABLES
          using_tab             = lt_bdcdata
        EXCEPTIONS
          system_failure        = 1
          communication_failure = 2
          resource_failure      = 3
          OTHERS                = 4 ##fm_subrc_ok. "#EC CI_SUBRC
  
    ENDMETHOD.                    "jump
  
    METHOD lif_object~delete.
  
      DATA: lv_formname TYPE tdsfname.
  
  
      lv_formname = ms_item-obj_name.
  
      CALL FUNCTION 'FB_DELETE_FORM'
        EXPORTING
          i_formname            = lv_formname
          i_with_dialog         = abap_false
          i_with_confirm_dialog = abap_false
        EXCEPTIONS
          no_name               = 1
          no_form               = 2
          form_locked           = 3
          no_access_permission  = 4
          illegal_language      = 5
          illegal_formtype      = 6
          OTHERS                = 7.
      IF sy-subrc <> 0 AND sy-subrc <> 2.
        _raise 'Error from FB_DELETE_FORM'.
      ENDIF.
  
    ENDMETHOD.                    "delete
  
    METHOD lif_object~serialize.
  * see function module FB_DOWNLOAD_FORM
  
      DATA: lo_sf       TYPE REF TO cl_ssf_fb_smart_form,
            lo_xml      TYPE REF TO lcl_xml,
            lv_name     TYPE string,
            li_node     TYPE REF TO if_ixml_node,
            li_element  TYPE REF TO if_ixml_element,
            li_iterator TYPE REF TO if_ixml_node_iterator,
            li_attr     TYPE REF TO if_ixml_named_node_map,
            lv_formname TYPE tdsfname.
  
  
      CREATE OBJECT lo_xml
        EXPORTING
          iv_empty = abap_true.
  
      CREATE OBJECT lo_sf.
      lv_formname = ms_item-obj_name. " convert type
      TRY.
          lo_sf->load( im_formname = lv_formname
                       im_language = '' ).
        CATCH cx_ssf_fb.
  * the smartform is not present in system, or other error occured
          RETURN.
      ENDTRY.
  
      lo_sf->xml_download( EXPORTING parent   = lo_xml->mi_xml_doc
                           CHANGING  document = lo_xml->mi_xml_doc ).
  
      li_iterator = lo_xml->mi_xml_doc->create_iterator( ).
      li_node = li_iterator->get_next( ).
      WHILE NOT li_node IS INITIAL.
  
        lv_name = li_node->get_name( ).
        IF lv_name = 'DEVCLASS'
            OR lv_name = 'LASTDATE'
            OR lv_name = 'LASTTIME'.
          li_node->set_value( '' ).
        ENDIF.
        IF lv_name = 'FIRSTUSER'
            OR lv_name = 'LASTUSER'.
          li_node->set_value( 'DUMMY' ).
        ENDIF.
  
  * remove IDs it seems that they are not used for anything
  * the IDs are "random" so it caused diff files
        IF lv_name = 'NODE' OR lv_name = 'WINDOW'.
          li_attr = li_node->get_attributes( ).
          li_attr->remove_named_item( 'ID' ).
        ENDIF.
  
        li_node = li_iterator->get_next( ).
      ENDWHILE.
  
      li_element = lo_xml->mi_xml_doc->get_root_element( ).
      li_element->set_attribute(
        name      = 'sf'
        namespace = 'xmlns'
        value     = 'urn:sap-com:SmartForms:2000:internal-structure' ). "#EC NOTEXT
      li_element->set_attribute(
        name  = 'xmlns'
        value = 'urn:sap-com:sdixml-ifr:2000' ).              "#EC NOTEXT
  
  * the upload fails when the smartform is normalized
      mo_files->add_xml( io_xml       = lo_xml
                         iv_normalize = abap_false ).
  
    ENDMETHOD.                    "serialize
  
    METHOD lif_object~deserialize.
  * see function module FB_UPLOAD_FORM
  
      DATA: lo_xml      TYPE REF TO lcl_xml,
            li_node     TYPE REF TO if_ixml_node,
            lv_formname TYPE tdsfname,
            lv_name     TYPE string,
            li_iterator TYPE REF TO if_ixml_node_iterator,
            lo_sf       TYPE REF TO cl_ssf_fb_smart_form,
            lo_res      TYPE REF TO cl_ssf_fb_smart_form.
  
  
      CREATE OBJECT lo_sf.
  
      lo_xml = mo_files->read_xml( ).
  
  * set "created by" and "changed by" to current user
      li_iterator = lo_xml->mi_xml_doc->create_iterator( ).
      li_node = li_iterator->get_next( ).
      WHILE NOT li_node IS INITIAL.
        lv_name = li_node->get_name( ).
        CASE lv_name.
          WHEN 'LASTDATE'.
            li_node->set_value(
              sy-datum(4) && '-' && sy-datum+4(2) && '-' && sy-datum+6(2) ).
          WHEN 'LASTTIME'.
            li_node->set_value(
              sy-uzeit(2) && ':' && sy-uzeit+2(2) && ':' && sy-uzeit+4(2) ).
          WHEN 'FIRSTUSER' OR 'LASTUSER'.
            li_node->set_value( sy-uname && '' ).
        ENDCASE.
  
        li_node = li_iterator->get_next( ).
      ENDWHILE.
  
      li_node = lo_xml->mi_xml_doc->get_root_element( ).
      lv_formname = ms_item-obj_name.
  
  * todo, iv_package?
      lo_sf->enqueue( suppress_corr_check = space
                      master_language     = gc_english
                      mode                = 'INSERT'
                      formname            = lv_formname ).
  
      lo_sf->xml_upload( EXPORTING dom      = li_node
                                   formname = lv_formname
                                   language = gc_english
                         CHANGING  sform    = lo_res ).
  
      lo_res->store( im_formname = lo_res->header-formname
                     im_language = gc_english
                     im_active   = abap_true ).
  
      lo_sf->dequeue( lv_formname ).
  
    ENDMETHOD.                    "deserialize
  
  ENDCLASS.                    "lcl_object_ssfo IMPLEMENTATION
  
  *----------------------------------------------------------------------*
  *       CLASS lcl_object_dtel DEFINITION
  
negative.code: 
    METHOD lif_object~serialize.
  
      DATA: lo_xml    TYPE REF TO lcl_xml_output,
            lv_ddtext TYPE ddtypet-ddtext,
            lt_source TYPE abaptxt255_tab.
  
  