anchor.diff:  
     METHOD lif_object~changed_by.
   
  -    DATA: ls_last_changed TYPE thead.
  +    DATA: ls_last_changed TYPE tys_form_header.
   
       ls_last_changed = _get_last_changes( ms_item-obj_name ).
   
  
positive.code:     CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result.
    ENDMETHOD.
  
    METHOD _build_extr_from_header.
      r_result = ls_header-tdid && '_' && ls_header-tdspras.
    ENDMETHOD.
  
    METHOD _get_last_changes.
  
      DATA: lv_name              TYPE thead-tdname.
      DATA: lt_header            TYPE tyt_header.
      FIELD-SYMBOLS: <ls_header> TYPE LINE OF tyt_header.
  
      CLEAR es_last_changed.
  
      lv_name = ms_item-obj_name.
  
      CALL FUNCTION 'SELECT_TEXT'
        EXPORTING
          database_only = abap_true
          id            = '*'
          language      = '*'
          name          = lv_name
          object        = c_objectname_form
        TABLES
          selections    = lt_header
        EXCEPTIONS
          OTHERS        = 1
          ##fm_subrc_ok.                                                   "#EC CI_SUBRC
  
      LOOP AT lt_header ASSIGNING <ls_header>.
  
        IF <ls_header>-tdldate > es_last_changed-tdldate OR
           <ls_header>-tdldate = es_last_changed-tdldate AND
           <ls_header>-tdltime > es_last_changed-tdltime.
          es_last_changed = <ls_header>.
        ENDIF.
  
      ENDLOOP.
  
    ENDMETHOD.
  
  
negative.code: 
    METHOD lif_object~delete.
  
      DATA: lv_name TYPE itcta-tdform.
  
      lv_name = ms_item-obj_name.
  
      CALL FUNCTION 'DELETE_FORM'
        EXPORTING
          form     = lv_name
          language = '*'.
  
    ENDMETHOD.
  
    METHOD lif_object~serialize.
  
      DATA: lt_form_data              TYPE tyt_form_data.
      DATA: ls_form_data              TYPE tys_form_data.
      DATA: lt_text_header            TYPE tyt_text_header.
      DATA: lt_lines                  TYPE tyt_lines.
      DATA: lo_xml                    TYPE REF TO lcl_xml_output.
      DATA: lv_form_found             TYPE flag.
      FIELD-SYMBOLS: <ls_text_header> LIKE LINE OF lt_text_header.
  
      lt_text_header = _find_form( ms_item-obj_name ).
  
      LOOP AT lt_text_header ASSIGNING <ls_text_header>.
        CLEAR lt_lines.
        CLEAR ls_form_data.
        FREE lo_xml.
  
        _read_form( EXPORTING is_text_header = <ls_text_header>
                    IMPORTING ev_form_found = lv_form_found
                              es_form_data  = ls_form_data
                              et_lines      = lt_lines ).
  
        IF lv_form_found = abap_true.
  
          _clear_changed_fields( CHANGING cs_form_data = ls_form_data ).
  
          _compress_lines( is_form_data = ls_form_data
                           it_lines     = lt_lines ).
  
          INSERT ls_form_data INTO TABLE lt_form_data.
  
        ENDIF.
  
      ENDLOOP.
  
      IF lt_form_data IS NOT INITIAL.
  
        io_xml->add( iv_name = c_objectname_form
                     ig_data = lt_form_data ).
  
      ENDIF.
  
    ENDMETHOD.
  
    METHOD lif_object~deserialize.
  
      DATA: lt_form_data            TYPE tyt_form_data.
      DATA: lt_lines                TYPE tyt_lines.
      FIELD-SYMBOLS: <ls_form_data> TYPE LINE OF tyt_form_data.
  
      io_xml->read( EXPORTING iv_name = c_objectname_form
                    CHANGING  cg_data = lt_form_data ).
  
      LOOP AT lt_form_data ASSIGNING <ls_form_data>.
  
        lt_lines = _extract_tdlines( <ls_form_data> ).
  
  
        _save_form( EXPORTING it_lines     = lt_lines
                    CHANGING  cs_form_data = <ls_form_data> ).
  
      ENDLOOP.
  
  