diff --git a/src/zabapgit_object_acid.prog.abap b/src/zabapgit_object_acid.prog.abap
index 10607a865..efc47f9e1 100644
--- a/src/zabapgit_object_acid.prog.abap
+++ b/src/zabapgit_object_acid.prog.abap
@@ -146,4 +146,8 @@ CLASS lcl_object_acid IMPLEMENTATION.
ENDMETHOD. "lif_object~jump
+ METHOD lif_object~compare_to_remote_version.
+ CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result.
+ ENDMETHOD.
+
ENDCLASS. "lcl_object_acid IMPLEMENTATION
\ No newline at end of file
diff --git a/src/zabapgit_object_auth.prog.abap b/src/zabapgit_object_auth.prog.abap
index b0a07c348..f772b72ce 100644
--- a/src/zabapgit_object_auth.prog.abap
+++ b/src/zabapgit_object_auth.prog.abap
@@ -119,4 +119,8 @@ CLASS lcl_object_auth IMPLEMENTATION.
ENDMETHOD. "lif_object~jump
+ METHOD lif_object~compare_to_remote_version.
+ CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result.
+ ENDMETHOD.
+
ENDCLASS. "lcl_object_auth IMPLEMENTATION
\ No newline at end of file
diff --git a/src/zabapgit_object_clas.prog.abap b/src/zabapgit_object_clas.prog.abap
index 1561da156..755b52a00 100644
--- a/src/zabapgit_object_clas.prog.abap
+++ b/src/zabapgit_object_clas.prog.abap
@@ -987,4 +987,8 @@ CLASS lcl_object_clas IMPLEMENTATION.
ENDMETHOD.
+ METHOD lif_object~compare_to_remote_version.
+ CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result.
+ ENDMETHOD.
+
ENDCLASS. "lcl_object_CLAS IMPLEMENTATION
\ No newline at end of file
diff --git a/src/zabapgit_object_doct.prog.abap b/src/zabapgit_object_doct.prog.abap
index 93558019a..76ed284a4 100644
--- a/src/zabapgit_object_doct.prog.abap
+++ b/src/zabapgit_object_doct.prog.abap
@@ -151,4 +151,8 @@ CLASS lcl_object_doct IMPLEMENTATION.
ENDMETHOD. "serialize
+ METHOD lif_object~compare_to_remote_version.
+ CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result.
+ ENDMETHOD.
+
ENDCLASS. "lcl_object_msag IMPLEMENTATION
\ No newline at end of file
diff --git a/src/zabapgit_object_docv.prog.abap b/src/zabapgit_object_docv.prog.abap
index b5a316fba..c54655a2e 100644
--- a/src/zabapgit_object_docv.prog.abap
+++ b/src/zabapgit_object_docv.prog.abap
@@ -155,4 +155,8 @@ CLASS lcl_object_docv IMPLEMENTATION.
ENDMETHOD. "serialize
+ METHOD lif_object~compare_to_remote_version.
+ CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result.
+ ENDMETHOD.
+
ENDCLASS. "lcl_object_msag IMPLEMENTATION
\ No newline at end of file
diff --git a/src/zabapgit_object_doma.prog.abap b/src/zabapgit_object_doma.prog.abap
index ab38f2049..5f570f60a 100644
--- a/src/zabapgit_object_doma.prog.abap
+++ b/src/zabapgit_object_doma.prog.abap
@@ -343,4 +343,8 @@ CLASS lcl_object_doma IMPLEMENTATION.
ENDMETHOD. "deserialize_texts
+ METHOD lif_object~compare_to_remote_version.
+ CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result.
+ ENDMETHOD.
+
ENDCLASS. "lcl_object_doma IMPLEMENTATION
\ No newline at end of file
diff --git a/src/zabapgit_object_dtel.prog.abap b/src/zabapgit_object_dtel.prog.abap
index 628fbae27..311c887d7 100644
--- a/src/zabapgit_object_dtel.prog.abap
+++ b/src/zabapgit_object_dtel.prog.abap
@@ -306,4 +306,8 @@ CLASS lcl_object_dtel IMPLEMENTATION.
ENDMETHOD.
+ METHOD lif_object~compare_to_remote_version.
+ CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result.
+ ENDMETHOD.
+
ENDCLASS. "lcl_object_dtel IMPLEMENTATION
\ No newline at end of file
diff --git a/src/zabapgit_object_enho.prog.abap b/src/zabapgit_object_enho.prog.abap
index 63137394a..95ba504f9 100644
--- a/src/zabapgit_object_enho.prog.abap
+++ b/src/zabapgit_object_enho.prog.abap
@@ -416,4 +416,8 @@ CLASS lcl_object_enho IMPLEMENTATION.
ENDMETHOD. "jump
+ METHOD lif_object~compare_to_remote_version.
+ CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result.
+ ENDMETHOD.
+
ENDCLASS. "lcl_object_enho IMPLEMENTATION
\ No newline at end of file
diff --git a/src/zabapgit_object_enhs.prog.abap b/src/zabapgit_object_enhs.prog.abap
index 4ff8fcec2..e3e021e3a 100644
--- a/src/zabapgit_object_enhs.prog.abap
+++ b/src/zabapgit_object_enhs.prog.abap
@@ -211,4 +211,8 @@ CLASS lcl_object_enhs IMPLEMENTATION.
ENDMETHOD. "jump
+ METHOD lif_object~compare_to_remote_version.
+ CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result.
+ ENDMETHOD.
+
ENDCLASS. "lcl_object_enhs
\ No newline at end of file
diff --git a/src/zabapgit_object_enqu.prog.abap b/src/zabapgit_object_enqu.prog.abap
index 802845b5f..617f5402b 100644
--- a/src/zabapgit_object_enqu.prog.abap
+++ b/src/zabapgit_object_enqu.prog.abap
@@ -173,4 +173,8 @@ CLASS lcl_object_enqu IMPLEMENTATION.
ENDMETHOD. "deserialize
+ METHOD lif_object~compare_to_remote_version.
+ CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result.
+ ENDMETHOD.
+
ENDCLASS. "lcl_object_enqu IMPLEMENTATION
\ No newline at end of file
diff --git a/src/zabapgit_object_ensc.prog.abap b/src/zabapgit_object_ensc.prog.abap
index 730d7a48c..3434d3c3f 100644
--- a/src/zabapgit_object_ensc.prog.abap
+++ b/src/zabapgit_object_ensc.prog.abap
@@ -191,4 +191,8 @@ CLASS lcl_object_ensc IMPLEMENTATION.
ENDMETHOD. "jump
+ METHOD lif_object~compare_to_remote_version.
+ CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result.
+ ENDMETHOD.
+
ENDCLASS. "lcl_object_ensc
\ No newline at end of file
diff --git a/src/zabapgit_object_fugr.prog.abap b/src/zabapgit_object_fugr.prog.abap
index d8f0f107b..d2ec84331 100644
--- a/src/zabapgit_object_fugr.prog.abap
+++ b/src/zabapgit_object_fugr.prog.abap
@@ -652,4 +652,8 @@ CLASS lcl_object_fugr IMPLEMENTATION.
ENDMETHOD. "jump
+ METHOD lif_object~compare_to_remote_version.
+ CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result.
+ ENDMETHOD.
+
ENDCLASS. "lcl_object_fugr IMPLEMENTATION
\ No newline at end of file
diff --git a/src/zabapgit_object_iarp.prog.abap b/src/zabapgit_object_iarp.prog.abap
index 66ae8b2f3..9d6fb5bed 100644
--- a/src/zabapgit_object_iarp.prog.abap
+++ b/src/zabapgit_object_iarp.prog.abap
@@ -188,4 +188,8 @@ CLASS lcl_object_iarp IMPLEMENTATION.
lcx_exception=>raise( 'todo, IARP, jump' ).
ENDMETHOD. "lif_object~jump
+ METHOD lif_object~compare_to_remote_version.
+ CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result.
+ ENDMETHOD.
+
ENDCLASS. "lcl_object_iarp IMPLEMENTATION
\ No newline at end of file
diff --git a/src/zabapgit_object_iasp.prog.abap b/src/zabapgit_object_iasp.prog.abap
index f1a345829..30ee4e5f7 100644
--- a/src/zabapgit_object_iasp.prog.abap
+++ b/src/zabapgit_object_iasp.prog.abap
@@ -188,4 +188,8 @@ CLASS lcl_object_iasp IMPLEMENTATION.
lcx_exception=>raise( 'todo, IASP, jump' ).
ENDMETHOD. "lif_object~jump
+ METHOD lif_object~compare_to_remote_version.
+ CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result.
+ ENDMETHOD.
+
ENDCLASS. "lcl_object_iasp IMPLEMENTATION
\ No newline at end of file
diff --git a/src/zabapgit_object_iatu.prog.abap b/src/zabapgit_object_iatu.prog.abap
index f0b5a4a7e..2373edf40 100644
--- a/src/zabapgit_object_iatu.prog.abap
+++ b/src/zabapgit_object_iatu.prog.abap
@@ -205,4 +205,8 @@ CLASS lcl_object_iatu IMPLEMENTATION.
lcx_exception=>raise( 'todo, IATU, jump' ).
ENDMETHOD. "lif_object~jump
+ METHOD lif_object~compare_to_remote_version.
+ CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result.
+ ENDMETHOD.
+
ENDCLASS. "lcl_object_iatu IMPLEMENTATION
\ No newline at end of file
diff --git a/src/zabapgit_object_msag.prog.abap b/src/zabapgit_object_msag.prog.abap
index c846270d1..1e030e260 100644
--- a/src/zabapgit_object_msag.prog.abap
+++ b/src/zabapgit_object_msag.prog.abap
@@ -179,6 +179,11 @@ CLASS lcl_object_msag IMPLEMENTATION.
io_xml->add( ig_data = lt_source
iv_name = 'T100' ).
+
ENDMETHOD. "serialize
+ METHOD lif_object~compare_to_remote_version.
+ CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result.
+ ENDMETHOD.
+
ENDCLASS. "lcl_object_msag IMPLEMENTATION
\ No newline at end of file
diff --git a/src/zabapgit_object_nrob.prog.abap b/src/zabapgit_object_nrob.prog.abap
index b1aa46c79..47edb4254 100644
--- a/src/zabapgit_object_nrob.prog.abap
+++ b/src/zabapgit_object_nrob.prog.abap
@@ -268,4 +268,8 @@ CLASS lcl_object_nrob IMPLEMENTATION.
ENDMETHOD. "jump
+ METHOD lif_object~compare_to_remote_version.
+ CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result.
+ ENDMETHOD.
+
ENDCLASS. "lcl_object_nrob IMPLEMENTATION
\ No newline at end of file
diff --git a/src/zabapgit_object_para.prog.abap b/src/zabapgit_object_para.prog.abap
index 4523cc560..585093d68 100644
--- a/src/zabapgit_object_para.prog.abap
+++ b/src/zabapgit_object_para.prog.abap
@@ -147,4 +147,8 @@ CLASS lcl_object_para IMPLEMENTATION.
ENDMETHOD. "jump
+ METHOD lif_object~compare_to_remote_version.
+ CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result.
+ ENDMETHOD.
+
ENDCLASS. "lcl_object_para IMPLEMENTATION
\ No newline at end of file
diff --git a/src/zabapgit_object_pinf.prog.abap b/src/zabapgit_object_pinf.prog.abap
index 857d750f2..873c19355 100644
--- a/src/zabapgit_object_pinf.prog.abap
+++ b/src/zabapgit_object_pinf.prog.abap
@@ -348,4 +348,8 @@ CLASS lcl_object_pinf IMPLEMENTATION.
ENDMETHOD. "jump
+ METHOD lif_object~compare_to_remote_version.
+ CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result.
+ ENDMETHOD.
+
ENDCLASS. "lcl_object_PINF IMPLEMENTATION
\ No newline at end of file
diff --git a/src/zabapgit_object_prog.prog.abap b/src/zabapgit_object_prog.prog.abap
index d04c51d5b..d3b29e3c8 100644
--- a/src/zabapgit_object_prog.prog.abap
+++ b/src/zabapgit_object_prog.prog.abap
@@ -161,4 +161,8 @@ CLASS lcl_object_prog IMPLEMENTATION.
ENDMETHOD. "lif_serialize~deserialize
+ METHOD lif_object~compare_to_remote_version.
+ CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result.
+ ENDMETHOD.
+
ENDCLASS. "lcl_object_prog IMPLEMENTATION
\ No newline at end of file
diff --git a/src/zabapgit_object_serializing.prog.abap b/src/zabapgit_object_serializing.prog.abap
index d40ed907b..0536d687c 100644
--- a/src/zabapgit_object_serializing.prog.abap
+++ b/src/zabapgit_object_serializing.prog.abap
@@ -36,6 +36,7 @@ INCLUDE zabapgit_object_ssfo.
INCLUDE zabapgit_object_ssst.
INCLUDE zabapgit_object_susc.
INCLUDE zabapgit_object_suso.
+INCLUDE zabapgit_object_tabl_valid.
INCLUDE zabapgit_object_tabl.
INCLUDE zabapgit_object_tobj.
INCLUDE zabapgit_object_tran.
diff --git a/src/zabapgit_object_sfbf.prog.abap b/src/zabapgit_object_sfbf.prog.abap
index 4af733532..5caaf627a 100644
--- a/src/zabapgit_object_sfbf.prog.abap
+++ b/src/zabapgit_object_sfbf.prog.abap
@@ -233,4 +233,8 @@ CLASS lcl_object_sfbf IMPLEMENTATION.
ENDMETHOD. "jump
+ METHOD lif_object~compare_to_remote_version.
+ CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result.
+ ENDMETHOD.
+
ENDCLASS. "lcl_object_SFBF IMPLEMENTATION
\ No newline at end of file
diff --git a/src/zabapgit_object_sfbs.prog.abap b/src/zabapgit_object_sfbs.prog.abap
index e3e4c28da..4bbd85222 100644
--- a/src/zabapgit_object_sfbs.prog.abap
+++ b/src/zabapgit_object_sfbs.prog.abap
@@ -207,4 +207,10 @@ CLASS lcl_object_sfbs IMPLEMENTATION.
ENDMETHOD. "jump
+ METHOD lif_object~compare_to_remote_version.
+ CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result.
+ ENDMETHOD.
+
+
+
ENDCLASS. "lcl_object_SFBS IMPLEMENTATION
\ No newline at end of file
diff --git a/src/zabapgit_object_sfsw.prog.abap b/src/zabapgit_object_sfsw.prog.abap
index cff1206f2..33e9c21ff 100644
--- a/src/zabapgit_object_sfsw.prog.abap
+++ b/src/zabapgit_object_sfsw.prog.abap
@@ -201,4 +201,8 @@ CLASS lcl_object_sfsw IMPLEMENTATION.
ENDMETHOD. "jump
+ METHOD lif_object~compare_to_remote_version.
+ CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result.
+ ENDMETHOD.
+
ENDCLASS. "lcl_object_sfsw IMPLEMENTATION
\ No newline at end of file
diff --git a/src/zabapgit_object_shi3.prog.abap b/src/zabapgit_object_shi3.prog.abap
index e1b2bce82..d7789e964 100644
--- a/src/zabapgit_object_shi3.prog.abap
+++ b/src/zabapgit_object_shi3.prog.abap
@@ -330,4 +330,8 @@ CLASS lcl_object_shi3 IMPLEMENTATION.
ENDMETHOD. "deserialize
+ METHOD lif_object~compare_to_remote_version.
+ CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result.
+ ENDMETHOD.
+
ENDCLASS. "lcl_object_shi3 IMPLEMENTATION
\ No newline at end of file
diff --git a/src/zabapgit_object_shlp.prog.abap b/src/zabapgit_object_shlp.prog.abap
index ba905258f..9d32eb6db 100644
--- a/src/zabapgit_object_shlp.prog.abap
+++ b/src/zabapgit_object_shlp.prog.abap
@@ -203,4 +203,8 @@ CLASS lcl_object_shlp IMPLEMENTATION.
ENDMETHOD. "deserialize
+ METHOD lif_object~compare_to_remote_version.
+ CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result.
+ ENDMETHOD.
+
ENDCLASS. "lcl_object_shlp IMPLEMENTATION
\ No newline at end of file
diff --git a/src/zabapgit_object_sicf.prog.abap b/src/zabapgit_object_sicf.prog.abap
index 343a4e4f4..3ff67774b 100644
--- a/src/zabapgit_object_sicf.prog.abap
+++ b/src/zabapgit_object_sicf.prog.abap
@@ -418,4 +418,8 @@ CLASS lcl_object_sicf IMPLEMENTATION.
lcx_exception=>raise( 'todo, SICF, jump' ).
ENDMETHOD. "jump
+ METHOD lif_object~compare_to_remote_version.
+ CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result.
+ ENDMETHOD.
+
ENDCLASS. "lcl_object_sicf IMPLEMENTATION
\ No newline at end of file
diff --git a/src/zabapgit_object_smim.prog.abap b/src/zabapgit_object_smim.prog.abap
index ce83ec3be..b03edb856 100644
--- a/src/zabapgit_object_smim.prog.abap
+++ b/src/zabapgit_object_smim.prog.abap
@@ -317,4 +317,8 @@ CLASS lcl_object_smim IMPLEMENTATION.
lcx_exception=>raise( 'todo, SMIM, jump' ).
ENDMETHOD. "jump
+ METHOD lif_object~compare_to_remote_version.
+ CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result.
+ ENDMETHOD.
+
ENDCLASS. "lcl_object_smim IMPLEMENTATION
\ No newline at end of file
diff --git a/src/zabapgit_object_splo.prog.abap b/src/zabapgit_object_splo.prog.abap
index 784192728..c8a958482 100644
--- a/src/zabapgit_object_splo.prog.abap
+++ b/src/zabapgit_object_splo.prog.abap
@@ -127,4 +127,8 @@ CLASS lcl_object_splo IMPLEMENTATION.
lcx_exception=>raise( 'todo, jump, SPLO' ).
ENDMETHOD. "lif_object~jump
+ METHOD lif_object~compare_to_remote_version.
+ CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result.
+ ENDMETHOD.
+
ENDCLASS. "lcl_object_splo IMPLEMENTATION
\ No newline at end of file
diff --git a/src/zabapgit_object_ssfo.prog.abap b/src/zabapgit_object_ssfo.prog.abap
index fc0c3b8cd..efef1e0c8 100644
--- a/src/zabapgit_object_ssfo.prog.abap
+++ b/src/zabapgit_object_ssfo.prog.abap
@@ -238,4 +238,8 @@ CLASS lcl_object_ssfo IMPLEMENTATION.
ENDMETHOD. "deserialize
+ METHOD lif_object~compare_to_remote_version.
+ CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result.
+ ENDMETHOD.
+
ENDCLASS. "lcl_object_ssfo IMPLEMENTATION
\ No newline at end of file
diff --git a/src/zabapgit_object_ssst.prog.abap b/src/zabapgit_object_ssst.prog.abap
index 97a64a3c9..40dced694 100644
--- a/src/zabapgit_object_ssst.prog.abap
+++ b/src/zabapgit_object_ssst.prog.abap
@@ -203,4 +203,8 @@ CLASS lcl_object_ssst IMPLEMENTATION.
lcx_exception=>raise( 'todo' ).
ENDMETHOD. "jump
+ METHOD lif_object~compare_to_remote_version.
+ CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result.
+ ENDMETHOD.
+
ENDCLASS. "lcl_object_ssst IMPLEMENTATION
\ No newline at end of file
diff --git a/src/zabapgit_object_susc.prog.abap b/src/zabapgit_object_susc.prog.abap
index 165a100f0..1583f08fe 100644
--- a/src/zabapgit_object_susc.prog.abap
+++ b/src/zabapgit_object_susc.prog.abap
@@ -122,4 +122,8 @@ CLASS lcl_object_susc IMPLEMENTATION.
ENDMETHOD. "jump
+ METHOD lif_object~compare_to_remote_version.
+ CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result.
+ ENDMETHOD.
+
ENDCLASS. "lcl_object_susc IMPLEMENTATION
\ No newline at end of file
diff --git a/src/zabapgit_object_suso.prog.abap b/src/zabapgit_object_suso.prog.abap
index 208c75eb8..09eace64a 100644
--- a/src/zabapgit_object_suso.prog.abap
+++ b/src/zabapgit_object_suso.prog.abap
@@ -169,4 +169,8 @@ CLASS lcl_object_suso IMPLEMENTATION.
ENDMETHOD. "jump
+ METHOD lif_object~compare_to_remote_version.
+ CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result.
+ ENDMETHOD.
+
ENDCLASS. "lcl_object_suso IMPLEMENTATION
\ No newline at end of file
diff --git a/src/zabapgit_object_tabl.prog.abap b/src/zabapgit_object_tabl.prog.abap
index 6b1e4ce03..3b1380db0 100644
--- a/src/zabapgit_object_tabl.prog.abap
+++ b/src/zabapgit_object_tabl.prog.abap
@@ -7,6 +7,7 @@
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
+
CLASS lcl_object_tabl DEFINITION INHERITING FROM lcl_objects_super FINAL.
PUBLIC SECTION.
@@ -377,4 +378,32 @@ CLASS lcl_object_tabl IMPLEMENTATION.
ENDMETHOD. "deserialize
+ METHOD lif_object~compare_to_remote_version.
+ DATA: lo_table_validation TYPE REF TO lcl_object_tabl_validation,
+ lo_local_version_output TYPE REF TO lcl_xml_output,
+ lo_local_version_input TYPE REF TO lcl_xml_input,
+ lv_validation_text TYPE string.
+
+ CREATE OBJECT lo_local_version_output.
+ me->lif_object~serialize( lo_local_version_output ).
+
+ CREATE OBJECT lo_local_version_input
+ EXPORTING
+ iv_xml = lo_local_version_output->render( ).
+
+ CREATE OBJECT lo_table_validation.
+
+ lv_validation_text = lo_table_validation->validate(
+ io_remote_version = io_remote_version_xml
+ io_local_version = lo_local_version_input ).
+ IF lv_validation_text IS NOT INITIAL.
+ lv_validation_text = |Database Table { ms_item-obj_name }: { lv_validation_text }|.
+ CREATE OBJECT ro_comparison_result TYPE lcl_tabl_validation_dialog
+ EXPORTING
+ iv_message = lv_validation_text.
+ ELSE.
+ CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result.
+ ENDIF.
+ ENDMETHOD.
+
ENDCLASS. "lcl_object_TABL IMPLEMENTATION
\ No newline at end of file
diff --git a/src/zabapgit_object_tabl_valid.prog.abap b/src/zabapgit_object_tabl_valid.prog.abap
new file mode 100644
index 000000000..0247006be
--- /dev/null
+++ b/src/zabapgit_object_tabl_valid.prog.abap
@@ -0,0 +1,227 @@
+*&---------------------------------------------------------------------*
+*& Include zabapgit_object_tabl_valid
+*&---------------------------------------------------------------------*
+
+CLASS lcl_object_tabl_validation DEFINITION.
+ PUBLIC SECTION.
+ METHODS validate
+ IMPORTING
+ io_remote_version TYPE REF TO lcl_xml_input
+ io_local_version TYPE REF TO lcl_xml_input
+ RETURNING
+ VALUE(rv_message) TYPE string
+ RAISING
+ lcx_exception.
+ENDCLASS.
+
+CLASS lcl_tabl_validation_dialog DEFINITION.
+ PUBLIC SECTION.
+ METHODS:
+ constructor
+ IMPORTING
+ iv_message TYPE string.
+ INTERFACES: lif_object_comparison_result.
+ PRIVATE SECTION.
+ DATA mv_message TYPE string.
+ DATA mv_halt TYPE string.
+
+ENDCLASS.
+
+CLASS lcl_object_tabl_validation IMPLEMENTATION.
+
+ METHOD validate.
+ DATA: lt_previous_table_fields TYPE TABLE OF dd03p,
+ ls_previous_table_field LIKE LINE OF lt_previous_table_fields,
+ lt_current_table_fields TYPE TABLE OF dd03p,
+ ls_current_table_field LIKE LINE OF lt_current_table_fields.
+ io_remote_version->read(
+ EXPORTING
+ iv_name = 'DD03P_TABLE'
+ CHANGING
+ cg_data = lt_previous_table_fields ).
+ io_local_version->read(
+ EXPORTING
+ iv_name = 'DD03P_TABLE'
+ CHANGING
+ cg_data = lt_current_table_fields ).
+
+ LOOP AT lt_previous_table_fields INTO ls_previous_table_field.
+ READ TABLE lt_current_table_fields WITH KEY fieldname = ls_previous_table_field-fieldname
+ INTO ls_current_table_field.
+ IF sy-subrc = 0.
+ IF ls_current_table_field-rollname <> ls_previous_table_field-rollname.
+ rv_message = 'Fields were changed. This may lead to inconsistencies.'.
+ ENDIF.
+ ELSE.
+ rv_message = 'Fields were changed. This may lead to inconsistencies.'.
+ ENDIF.
+ ENDLOOP.
+ ENDMETHOD.
+
+ENDCLASS.
+
+CLASS lcl_tabl_validation_dialog IMPLEMENTATION.
+ METHOD constructor.
+ mv_message = iv_message.
+ ENDMETHOD.
+ METHOD lif_object_comparison_result~is_result_complete_halt.
+ rv_response = mv_halt.
+ ENDMETHOD.
+
+ METHOD lif_object_comparison_result~show_confirmation_dialog.
+ DATA lv_answer TYPE string.
+ TRY.
+ lv_answer = lcl_popups=>popup_to_confirm(
+ titlebar = 'Warning'
+ text_question = mv_message
+ text_button_1 = 'Abort'
+ icon_button_1 = 'ICON_CANCEL'
+ text_button_2 = 'Pull anyway'
+ icon_button_2 = 'ICON_OKAY'
+ default_button = '2'
+ display_cancel_button = abap_false ).
+ CATCH lcx_exception.
+ mv_halt = abap_true.
+ ENDTRY.
+
+ IF lv_answer = 1.
+ mv_halt = abap_true.
+ ENDIF.
+ ENDMETHOD.
+ENDCLASS.
+
+
+CLASS lct_table_validation DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT.
+ PRIVATE SECTION.
+ METHODS:
+ setup,
+ type_changed FOR TESTING RAISING lcx_exception,
+ no_type_changes FOR TESTING RAISING lcx_exception,
+ field_not_found FOR TESTING RAISING lcx_exception,
+ no_fields_no_message FOR TESTING RAISING lcx_exception,
+ create_xmls
+ RAISING
+ lcx_exception.
+ DATA: mo_table_validator TYPE REF TO lcl_object_tabl_validation,
+ mo_previous_version_out_xml TYPE REF TO lcl_xml_output,
+ mo_previous_version_input_xml TYPE REF TO lcl_xml_input,
+ mo_current_version_out_xml TYPE REF TO lcl_xml_output,
+ mo_current_version_input_xml TYPE REF TO lcl_xml_input,
+ mt_previous_table_fields TYPE TABLE OF dd03p,
+ mt_current_table_fields TYPE TABLE OF dd03p,
+ mv_validation_message TYPE string.
+
+ENDCLASS.
+
+CLASS lct_table_validation IMPLEMENTATION.
+ METHOD setup.
+ CREATE OBJECT mo_table_validator.
+ ENDMETHOD.
+ METHOD type_changed.
+ DATA:
+ ls_previous_table_field LIKE LINE OF mt_previous_table_fields,
+ ls_current_table_field LIKE LINE OF mt_current_table_fields.
+
+ ls_previous_table_field-fieldname = 'FIELD1'.
+ ls_previous_table_field-rollname = 'INT4'.
+ APPEND ls_previous_table_field TO mt_previous_table_fields.
+
+ ls_current_table_field-fieldname = 'FIELD1'.
+ ls_current_table_field-rollname = 'CHAR30'.
+ APPEND ls_current_table_field TO mt_current_table_fields.
+
+ create_xmls( ).
+
+ mv_validation_message = mo_table_validator->validate(
+ io_remote_version = mo_previous_version_input_xml
+ io_local_version = mo_current_version_input_xml ).
+
+ cl_abap_unit_assert=>assert_equals(
+ act = mv_validation_message
+ exp = 'Fields were changed. This may lead to inconsistencies.' ).
+ ENDMETHOD.
+
+ METHOD no_type_changes.
+ DATA:
+ ls_previous_table_field LIKE LINE OF mt_previous_table_fields,
+ ls_current_table_field LIKE LINE OF mt_current_table_fields.
+
+ ls_previous_table_field-fieldname = 'FIELD1'.
+ ls_previous_table_field-rollname = 'INT4'.
+ APPEND ls_previous_table_field TO mt_previous_table_fields.
+
+ mt_current_table_fields = mt_previous_table_fields.
+
+ create_xmls( ).
+
+ mv_validation_message = mo_table_validator->validate(
+ io_remote_version = mo_previous_version_input_xml
+ io_local_version = mo_current_version_input_xml ).
+
+ cl_abap_unit_assert=>assert_equals(
+ act = mv_validation_message
+ exp = '' ).
+ ENDMETHOD.
+
+ METHOD field_not_found.
+ DATA:
+ ls_previous_table_field LIKE LINE OF mt_previous_table_fields,
+ ls_current_table_field LIKE LINE OF mt_current_table_fields.
+
+ ls_previous_table_field-fieldname = 'FIELD1'.
+ ls_previous_table_field-rollname = 'INT4'.
+ APPEND ls_previous_table_field TO mt_previous_table_fields.
+
+ ls_current_table_field-fieldname = 'ANOTHER_FIELD'.
+ ls_current_table_field-rollname = 'CHAR30'.
+ APPEND ls_current_table_field TO mt_current_table_fields.
+
+ create_xmls( ).
+
+ mv_validation_message = mo_table_validator->validate(
+ io_remote_version = mo_previous_version_input_xml
+ io_local_version = mo_current_version_input_xml ).
+
+ cl_abap_unit_assert=>assert_equals(
+ act = mv_validation_message
+ exp = 'Fields were changed. This may lead to inconsistencies.' ).
+ ENDMETHOD.
+
+ METHOD no_fields_no_message.
+ DATA:
+ ls_previous_table_field LIKE LINE OF mt_previous_table_fields,
+ ls_current_table_field LIKE LINE OF mt_current_table_fields.
+
+ create_xmls( ).
+
+ mv_validation_message = mo_table_validator->validate(
+ io_remote_version = mo_previous_version_input_xml
+ io_local_version = mo_current_version_input_xml ).
+
+ cl_abap_unit_assert=>assert_initial( mv_validation_message ).
+ ENDMETHOD.
+
+
+ METHOD create_xmls.
+ CREATE OBJECT mo_previous_version_out_xml.
+ mo_previous_version_out_xml->add(
+ iv_name = 'DD03P_TABLE'
+ ig_data = mt_previous_table_fields ).
+
+ CREATE OBJECT mo_previous_version_input_xml
+ EXPORTING
+ iv_xml = mo_previous_version_out_xml->render( ).
+
+ CREATE OBJECT mo_current_version_out_xml.
+ mo_current_version_out_xml->add(
+ iv_name = 'DD03P_TABLE'
+ ig_data = mt_current_table_fields ).
+
+ CREATE OBJECT mo_current_version_input_xml
+ EXPORTING
+ iv_xml = mo_current_version_out_xml->render( ).
+ ENDMETHOD.
+
+
+
+ENDCLASS.
\ No newline at end of file
diff --git a/src/zabapgit_object_tabl_valid.prog.xml b/src/zabapgit_object_tabl_valid.prog.xml
new file mode 100644
index 000000000..0a56f24a3
--- /dev/null
+++ b/src/zabapgit_object_tabl_valid.prog.xml
@@ -0,0 +1,48 @@
+
+
+
+
+
+ ZABAPGIT_OBJECT_TABL_VALID
+ A
+
+
+ X
+
+
+
+
+
+ I
+
+
+
+ 0000-00-00
+
+ 0000-00-00
+
+
+
+
+ E
+
+
+ 0000-00-00
+
+ 0000-00-00
+
+
+ X
+
+
+ -
+ R
+
+ Include ZABAPGIT_OBJECT_TABL_VALID
+ 34
+
+
+
+
+
+
diff --git a/src/zabapgit_object_tobj.prog.abap b/src/zabapgit_object_tobj.prog.abap
index 39198e726..3319bbee6 100644
--- a/src/zabapgit_object_tobj.prog.abap
+++ b/src/zabapgit_object_tobj.prog.abap
@@ -183,4 +183,8 @@ CLASS lcl_object_tobj IMPLEMENTATION.
lcx_exception=>raise( 'todo, TOBJ jump' ).
ENDMETHOD. "jump
+ METHOD lif_object~compare_to_remote_version.
+ CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result.
+ ENDMETHOD.
+
ENDCLASS. "lcl_object_tobj IMPLEMENTATION
\ No newline at end of file
diff --git a/src/zabapgit_object_tran.prog.abap b/src/zabapgit_object_tran.prog.abap
index a483192f2..5f4b9cbff 100644
--- a/src/zabapgit_object_tran.prog.abap
+++ b/src/zabapgit_object_tran.prog.abap
@@ -413,4 +413,8 @@ CLASS lcl_object_tran IMPLEMENTATION.
ENDMETHOD. "serialize
+ METHOD lif_object~compare_to_remote_version.
+ CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result.
+ ENDMETHOD.
+
ENDCLASS. "lcl_object_tran IMPLEMENTATION
\ No newline at end of file
diff --git a/src/zabapgit_object_ttyp.prog.abap b/src/zabapgit_object_ttyp.prog.abap
index ec2421f99..b85104ebc 100644
--- a/src/zabapgit_object_ttyp.prog.abap
+++ b/src/zabapgit_object_ttyp.prog.abap
@@ -182,4 +182,8 @@ CLASS lcl_object_ttyp IMPLEMENTATION.
ENDMETHOD. "deserialize
+ METHOD lif_object~compare_to_remote_version.
+ CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result.
+ ENDMETHOD.
+
ENDCLASS. "lcl_object_ttyp IMPLEMENTATION
\ No newline at end of file
diff --git a/src/zabapgit_object_type.prog.abap b/src/zabapgit_object_type.prog.abap
index 5a47d8ed9..8c7273888 100644
--- a/src/zabapgit_object_type.prog.abap
+++ b/src/zabapgit_object_type.prog.abap
@@ -205,4 +205,8 @@ CLASS lcl_object_type IMPLEMENTATION.
ENDMETHOD. "jump
+ METHOD lif_object~compare_to_remote_version.
+ CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result.
+ ENDMETHOD.
+
ENDCLASS. "lcl_object_type IMPLEMENTATION
\ No newline at end of file
diff --git a/src/zabapgit_object_vcls.prog.abap b/src/zabapgit_object_vcls.prog.abap
index e6ad172aa..0fad2048b 100644
--- a/src/zabapgit_object_vcls.prog.abap
+++ b/src/zabapgit_object_vcls.prog.abap
@@ -189,4 +189,8 @@ CLASS lcl_object_vcls IMPLEMENTATION.
ENDMETHOD. "jump
+ METHOD lif_object~compare_to_remote_version.
+ CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result.
+ ENDMETHOD.
+
ENDCLASS. "lcl_object_vcls IMPLEMENTATION
\ No newline at end of file
diff --git a/src/zabapgit_object_view.prog.abap b/src/zabapgit_object_view.prog.abap
index b8b773741..31481e426 100644
--- a/src/zabapgit_object_view.prog.abap
+++ b/src/zabapgit_object_view.prog.abap
@@ -217,4 +217,8 @@ CLASS lcl_object_view IMPLEMENTATION.
ENDMETHOD. "deserialize
+ METHOD lif_object~compare_to_remote_version.
+ CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result.
+ ENDMETHOD.
+
ENDCLASS. "lcl_object_view IMPLEMENTATION
\ No newline at end of file
diff --git a/src/zabapgit_object_w3xx.prog.abap b/src/zabapgit_object_w3xx.prog.abap
index c69b5355c..b2f53c6a0 100644
--- a/src/zabapgit_object_w3xx.prog.abap
+++ b/src/zabapgit_object_w3xx.prog.abap
@@ -340,6 +340,10 @@ CLASS lcl_object_w3super IMPLEMENTATION.
ENDMETHOD. "lif_object~delete
+ METHOD lif_object~compare_to_remote_version.
+ CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result.
+ ENDMETHOD.
+
ENDCLASS. "lcl_object_W3SUPER IMPLEMENTATION
*----------------------------------------------------------------------*
diff --git a/src/zabapgit_object_wdya.prog.abap b/src/zabapgit_object_wdya.prog.abap
index 954f78795..3d1defc49 100644
--- a/src/zabapgit_object_wdya.prog.abap
+++ b/src/zabapgit_object_wdya.prog.abap
@@ -211,4 +211,8 @@ CLASS lcl_object_wdya IMPLEMENTATION.
ENDMETHOD. "jump
+ METHOD lif_object~compare_to_remote_version.
+ CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result.
+ ENDMETHOD.
+
ENDCLASS. "lcl_object_wdya IMPLEMENTATION
\ No newline at end of file
diff --git a/src/zabapgit_object_wdyn.prog.abap b/src/zabapgit_object_wdyn.prog.abap
index 42f603e28..5f9763e4c 100644
--- a/src/zabapgit_object_wdyn.prog.abap
+++ b/src/zabapgit_object_wdyn.prog.abap
@@ -647,4 +647,8 @@ CLASS lcl_object_wdyn IMPLEMENTATION.
ENDMETHOD. "jump
+ METHOD lif_object~compare_to_remote_version.
+ CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result.
+ ENDMETHOD.
+
ENDCLASS. "lcl_object_wdyn IMPLEMENTATION
\ No newline at end of file
diff --git a/src/zabapgit_object_webi.prog.abap b/src/zabapgit_object_webi.prog.abap
index d74dc4d56..e3a690dbb 100644
--- a/src/zabapgit_object_webi.prog.abap
+++ b/src/zabapgit_object_webi.prog.abap
@@ -443,4 +443,8 @@ CLASS lcl_object_webi IMPLEMENTATION.
rs_metadata = get_metadata( ).
ENDMETHOD. "lif_object~get_metadata
+ METHOD lif_object~compare_to_remote_version.
+ CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result.
+ ENDMETHOD.
+
ENDCLASS. "lcl_object_webi IMPLEMENTATION
\ No newline at end of file
diff --git a/src/zabapgit_object_xslt.prog.abap b/src/zabapgit_object_xslt.prog.abap
index 26eaf6905..dc359b965 100644
--- a/src/zabapgit_object_xslt.prog.abap
+++ b/src/zabapgit_object_xslt.prog.abap
@@ -188,4 +188,8 @@ CLASS lcl_object_xslt IMPLEMENTATION.
rs_metadata = get_metadata( ).
ENDMETHOD. "lif_object~get_metadata
+ METHOD lif_object~compare_to_remote_version.
+ CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result.
+ ENDMETHOD.
+
ENDCLASS. "lcl_object_xslt IMPLEMENTATION
\ No newline at end of file
diff --git a/src/zabapgit_objects.prog.abap b/src/zabapgit_objects.prog.abap
index d18b45734..78df27363 100644
--- a/src/zabapgit_objects.prog.abap
+++ b/src/zabapgit_objects.prog.abap
@@ -255,6 +255,31 @@ CLASS lcl_objects_files DEFINITION FINAL.
ENDCLASS. "lcl_objects_files DEFINITION
+INTERFACE lif_object_comparison_result.
+ METHODS:
+ show_confirmation_dialog,
+ is_result_complete_halt
+ RETURNING VALUE(rv_response) TYPE abap_bool.
+
+ENDINTERFACE.
+
+"Null Object Pattern
+CLASS lcl_null_comparison_result DEFINITION FINAL.
+ PUBLIC SECTION.
+ INTERFACES lif_object_comparison_result.
+ENDCLASS.
+CLASS lcl_null_comparison_result IMPLEMENTATION.
+
+ METHOD lif_object_comparison_result~is_result_complete_halt.
+ rv_response = abap_false.
+ ENDMETHOD.
+
+ METHOD lif_object_comparison_result~show_confirmation_dialog.
+ RETURN.
+ ENDMETHOD.
+
+ENDCLASS.
+
*----------------------------------------------------------------------*
* INTERFACE lif_object DEFINITION
*----------------------------------------------------------------------*
@@ -286,6 +311,11 @@ INTERFACE lif_object.
IMPORTING iv_timestamp TYPE timestamp
RETURNING VALUE(rv_changed) TYPE abap_bool
RAISING lcx_exception.
+ METHODS:
+ compare_to_remote_version
+ IMPORTING io_remote_version_xml TYPE REF TO lcl_xml_input
+ RETURNING VALUE(ro_comparison_result) TYPE REF TO lif_object_comparison_result
+ RAISING lcx_exception.
DATA: mo_files TYPE REF TO lcl_objects_files.
@@ -727,6 +757,10 @@ CLASS lcl_objects_bridge IMPLEMENTATION.
ENDMETHOD. "class_constructor
+ METHOD lif_object~compare_to_remote_version.
+
+ ENDMETHOD.
+
ENDCLASS. "lcl_objects_bridge IMPLEMENTATION
**********************************************************************
@@ -791,7 +825,7 @@ CLASS lcl_objects_program DEFINITION INHERITING FROM lcl_objects_super.
TYPES: ty_spaces_tt TYPE STANDARD TABLE OF i WITH DEFAULT KEY.
TYPES: BEGIN OF ty_tpool.
- INCLUDE TYPE textpool.
+ INCLUDE TYPE textpool.
TYPES: split TYPE c LENGTH 8.
TYPES: END OF ty_tpool.
diff --git a/src/zabapgit_objects_impl.prog.abap b/src/zabapgit_objects_impl.prog.abap
index 05696b421..0a1635957 100644
--- a/src/zabapgit_objects_impl.prog.abap
+++ b/src/zabapgit_objects_impl.prog.abap
@@ -587,15 +587,18 @@ CLASS lcl_objects IMPLEMENTATION.
METHOD deserialize.
- DATA: ls_item TYPE ty_item,
- lv_cancel TYPE abap_bool,
- li_obj TYPE REF TO lif_object,
- lt_remote TYPE ty_files_tt,
- lv_package TYPE devclass,
- lo_files TYPE REF TO lcl_objects_files,
- lo_xml TYPE REF TO lcl_xml_input,
- lt_results TYPE ty_results_tt,
- lt_late TYPE TABLE OF ty_late.
+ DATA: ls_item TYPE ty_item,
+ lv_cancel TYPE abap_bool,
+ li_obj TYPE REF TO lif_object,
+ lt_remote TYPE ty_files_tt,
+ ls_remote_file LIKE LINE OF lt_remote,
+ lv_package TYPE devclass,
+ lo_files TYPE REF TO lcl_objects_files,
+ lo_xml TYPE REF TO lcl_xml_input,
+ lt_results TYPE ty_results_tt,
+ lt_late TYPE TABLE OF ty_late,
+ lo_current_version TYPE REF TO lcl_xml_input,
+ lo_comparison_result TYPE REF TO lif_object_comparison_result.
FIELD-SYMBOLS: LIKE LINE OF lt_results,
LIKE LINE OF lt_late.
@@ -652,6 +655,26 @@ CLASS lcl_objects IMPLEMENTATION.
iv_language = io_repo->get_master_language( )
is_metadata = lo_xml->get_metadata( ) ).
+ break copat.
+ READ TABLE lt_remote WITH KEY filename = -filename INTO ls_remote_file.
+ IF ls_remote_file-filename NS '.abap'.
+
+ "if file does not exist in remote, we don't need to validate
+ IF sy-subrc = 0.
+ CREATE OBJECT lo_current_version
+ EXPORTING
+ iv_xml = lcl_convert=>xstring_to_string_utf8( ls_remote_file-data ).
+ lo_comparison_result = li_obj->compare_to_remote_version( lo_current_version ).
+ lo_comparison_result->show_confirmation_dialog( ).
+
+ IF lo_comparison_result->is_result_complete_halt( ) = abap_true.
+ RAISE EXCEPTION TYPE lcx_exception
+ EXPORTING
+ iv_text = 'Deserialization aborted by user'.
+ ENDIF.
+ ENDIF.
+ endif.
+
li_obj->mo_files = lo_files.
IF li_obj->get_metadata( )-late_deser = abap_true.
@@ -662,6 +685,7 @@ CLASS lcl_objects IMPLEMENTATION.
CONTINUE.
ENDIF.
+
li_obj->deserialize( iv_package = lv_package
io_xml = lo_xml ).