anchor.diff:  
     ENDMETHOD.                    "serialize
   
  -  METHOD strip_stamps.
  +  METHOD clear_fields.
   
       FIELD-SYMBOLS <ls_node> LIKE LINE OF ct_nodes.
   
       CLEAR: cs_head-luser, cs_head-ldate, cs_head-ltime.
       CLEAR: cs_head-fuser, cs_head-fdate, cs_head-ftime.
  +    CLEAR: cs_head-frelease, cs_head-lrelease.
       CLEAR: cs_head-responsibl.
   
       LOOP AT ct_nodes ASSIGNING <ls_node>.
         CLEAR: <ls_node>-luser, <ls_node>-ldate, <ls_node>-ltime.
         CLEAR: <ls_node>-fuser, <ls_node>-fdate, <ls_node>-ftime.
  +      CLEAR: <ls_node>-frelease, <ls_node>-lrelease.
       ENDLOOP.
   
     ENDMETHOD.                    "strip_stamps
   
  -  METHOD regenerate_ids.
  -
  -    DATA: ls_uid TYPE sys_uid,
  -          lt_map TYPE tt_id_map.
  -
  -    FIELD-SYMBOLS: <ls_node> LIKE LINE OF ct_nodes,
  -                   <ls_ref>  LIKE LINE OF ct_refs,
  -                   <ls_text> LIKE LINE OF ct_texts,
  -                   <ls_map>  LIKE LINE OF mt_map.
  -
  -    "Build map
  -    LOOP AT ct_nodes ASSIGNING <ls_node>.
  -      APPEND INITIAL LINE TO lt_map ASSIGNING <ls_map>.
  -      IF <ls_node>-parent_id IS INITIAL.
  -        <ls_map>-old = <ls_node>-node_id.
  -        <ls_map>-new = <ls_node>-node_id. "Root node
  -      ELSE.
  -        CALL FUNCTION 'STREE_GET_UNIQUE_ID'
  -          IMPORTING
  -            unique_id = ls_uid.
  -
  -        <ls_map>-old = <ls_node>-node_id.
  -        <ls_map>-new = ls_uid-id.
  -      ENDIF.
  -      <ls_node>-node_id = <ls_map>-new. "Replace id
  -    ENDLOOP.
  -
  -    mt_map = lt_map. "Sort
  -
  -    LOOP AT ct_nodes ASSIGNING <ls_node>.
  -      <ls_node>-parent_id  = replace_id( <ls_node>-parent_id ).
  -      <ls_node>-brother_id = replace_id( <ls_node>-brother_id ).
  -    ENDLOOP.
  -
  -    LOOP AT ct_refs ASSIGNING <ls_ref>.
  -      <ls_ref>-node_id = replace_id( <ls_ref>-node_id ).
  -    ENDLOOP.
  -
  -    LOOP AT ct_texts ASSIGNING <ls_text>.
  -      <ls_text>-node_id = replace_id( <ls_text>-node_id ).
  -    ENDLOOP.
  -
  -  ENDMETHOD.                    "regenerate_ids
  -
  -  METHOD replace_id.
  -
  -    DATA ls_map LIKE LINE OF mt_map.
  -
  -    IF iv_id IS INITIAL.
  -      RETURN. "No substitution for empty values
  -    ENDIF.
  -
  -    READ TABLE mt_map WITH TABLE KEY old = iv_id INTO ls_map.
  -    IF sy-subrc <> 0.
  -      lcx_exception=>raise( 'Cannot replace id, SHI3' ).
  -    ENDIF.
  -
  -    rv_new_id = ls_map-new.
  -
  -  ENDMETHOD.                    "replace_id
  +*  METHOD regenerate_ids.
  +*
  +*    DATA: ls_uid TYPE sys_uid,
  +*          lt_map TYPE tt_id_map.
  +*
  +*    FIELD-SYMBOLS: <ls_node> LIKE LINE OF ct_nodes,
  +*                   <ls_ref>  LIKE LINE OF ct_refs,
  +*                   <ls_text> LIKE LINE OF ct_texts,
  +*                   <ls_map>  LIKE LINE OF mt_map.
  +*
  +*    "Build map
  +*    LOOP AT ct_nodes ASSIGNING <ls_node>.
  +*      APPEND INITIAL LINE TO lt_map ASSIGNING <ls_map>.
  +*      IF <ls_node>-parent_id IS INITIAL.
  +*        <ls_map>-old = <ls_node>-node_id.
  +*        <ls_map>-new = <ls_node>-node_id. "Root node
  +*      ELSE.
  +*        CALL FUNCTION 'STREE_GET_UNIQUE_ID'
  +*          IMPORTING
  +*            unique_id = ls_uid.
  +*
  +*        <ls_map>-old = <ls_node>-node_id.
  +*        <ls_map>-new = ls_uid-id.
  +*      ENDIF.
  +*      <ls_node>-node_id = <ls_map>-new. "Replace id
  +*    ENDLOOP.
  +*
  +*    mt_map = lt_map. "Sort
  +*
  +*    LOOP AT ct_nodes ASSIGNING <ls_node>.
  +*      <ls_node>-parent_id  = replace_id( <ls_node>-parent_id ).
  +*      <ls_node>-brother_id = replace_id( <ls_node>-brother_id ).
  +*    ENDLOOP.
  +*
  +*    LOOP AT ct_refs ASSIGNING <ls_ref>.
  +*      <ls_ref>-node_id = replace_id( <ls_ref>-node_id ).
  +*    ENDLOOP.
  +*
  +*    LOOP AT ct_texts ASSIGNING <ls_text>.
  +*      <ls_text>-node_id = replace_id( <ls_text>-node_id ).
  +*    ENDLOOP.
  +*
  +*  ENDMETHOD.                    "regenerate_ids
  +*
  +*  METHOD replace_id.
  +*
  +*    DATA ls_map LIKE LINE OF mt_map.
  +*
  +*    IF iv_id IS INITIAL.
  +*      RETURN. "No substitution for empty values
  +*    ENDIF.
  +*
  +*    READ TABLE mt_map WITH TABLE KEY old = iv_id INTO ls_map.
  +*    IF sy-subrc <> 0.
  +*      lcx_exception=>raise( 'Cannot replace id, SHI3' ).
  +*    ENDIF.
  +*
  +*    rv_new_id = ls_map-new.
  +*
  +*  ENDMETHOD.                    "replace_id
   
     METHOD lif_object~deserialize.
   
  
positive.code:   ENDMETHOD.  "lif_object~has_changed_since
  
    METHOD lif_object~changed_by.
      rv_user = c_user_unknown. " todo
    ENDMETHOD.
  
    METHOD constructor.
  
negative.code:         no_authority       = 2
          canceled           = 3
          OTHERS             = 4.
      IF sy-subrc <> 0.
        lcx_exception=>raise( 'error from BMENU_DELETE_TREE, SHI3' ).
      ENDIF.
  