Clear metadata fields (#5464)

* Add zcl_abapgit_rule and zif_abapgit_rule

* Insert clear and fill logic

* Pass rule to the generic serializer in IWSG class

* Remove extra space

* Remove inline declaration

* Format the code

* Replace CHECK with IF

* Rename class/interface

* Multiple changes

Rename method name
Change method signature
Remove clear field

* loop over all fields of given fields

* Align method call parameters

* Remove class reference for member

* Use string template to convert to type

Co-authored-by: Lars Hvam <larshp@hotmail.com>
Co-authored-by: Marc Bernard <59966492+mbtools@users.noreply.github.com>
This commit is contained in:
yellappam 2022-04-27 02:33:21 +12:00 committed by GitHub
parent 0ec0fd077b
commit e50a7dcc3c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 235 additions and 4 deletions

View File

@ -0,0 +1,108 @@
CLASS zcl_abapgit_field_rules DEFINITION
PUBLIC
FINAL
CREATE PRIVATE .
PUBLIC SECTION.
INTERFACES zif_abapgit_field_rules.
CLASS-METHODS create
RETURNING
VALUE(ro_result) TYPE REF TO zif_abapgit_field_rules.
PROTECTED SECTION.
PRIVATE SECTION.
TYPES:
BEGIN OF ty_item,
tabname TYPE tabname,
fieldname TYPE fieldname,
fill_rule TYPE zif_abapgit_field_rules=>ty_fill_rule,
END OF ty_item,
ty_items TYPE SORTED TABLE OF ty_item WITH UNIQUE KEY tabname fieldname.
DATA mt_item TYPE ty_items.
METHODS fill_value
IMPORTING
iv_rule TYPE zif_abapgit_field_rules=>ty_fill_rule
CHANGING
cv_value TYPE any.
ENDCLASS.
CLASS zcl_abapgit_field_rules IMPLEMENTATION.
METHOD create.
CREATE OBJECT ro_result TYPE zcl_abapgit_field_rules.
ENDMETHOD.
METHOD zif_abapgit_field_rules~add.
DATA ls_item TYPE ty_item.
ls_item-tabname = iv_table.
ls_item-fieldname = iv_field.
ls_item-fill_rule = iv_fill_rule.
INSERT ls_item INTO TABLE mt_item.
ro_self = me.
ENDMETHOD.
METHOD zif_abapgit_field_rules~apply_clear_logic.
DATA ls_item TYPE ty_item.
FIELD-SYMBOLS <ls_data> TYPE any.
FIELD-SYMBOLS <lv_value> TYPE any.
IF mt_item IS INITIAL.
RETURN.
ENDIF.
LOOP AT ct_data ASSIGNING <ls_data>.
LOOP AT mt_item INTO ls_item WHERE tabname = iv_table.
ASSIGN COMPONENT ls_item-fieldname OF STRUCTURE <ls_data> TO <lv_value>.
IF sy-subrc = 0.
CLEAR <lv_value>.
ENDIF.
ENDLOOP.
ENDLOOP.
ENDMETHOD.
METHOD zif_abapgit_field_rules~apply_fill_logic.
DATA ls_item TYPE ty_item.
FIELD-SYMBOLS <ls_data> TYPE any.
FIELD-SYMBOLS <lv_value> TYPE any.
IF mt_item IS INITIAL.
RETURN.
ENDIF.
LOOP AT ct_data ASSIGNING <ls_data>.
LOOP AT mt_item INTO ls_item WHERE tabname = iv_table.
ASSIGN COMPONENT ls_item-fieldname OF STRUCTURE <ls_data> TO <lv_value>.
IF sy-subrc = 0.
fill_value( EXPORTING iv_rule = ls_item-fill_rule
CHANGING cv_value = <lv_value> ).
ENDIF.
ENDLOOP.
ENDLOOP.
ENDMETHOD.
METHOD fill_value.
CASE iv_rule.
WHEN zif_abapgit_field_rules=>c_fill_rule-date.
cv_value = sy-datum.
WHEN zif_abapgit_field_rules=>c_fill_rule-time.
cv_value = sy-uzeit.
WHEN zif_abapgit_field_rules=>c_fill_rule-timestamp.
GET TIME STAMP FIELD cv_value.
WHEN zif_abapgit_field_rules=>c_fill_rule-user.
cv_value = sy-uname.
WHEN zif_abapgit_field_rules=>c_fill_rule-client.
cv_value = sy-mandt.
ENDCASE.
ENDMETHOD.
ENDCLASS.

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<VSEOCLASS>
<CLSNAME>ZCL_ABAPGIT_FIELD_RULES</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>abapGit Rule</DESCRIPT>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
</VSEOCLASS>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -14,6 +14,9 @@ CLASS zcl_abapgit_object_iwsg DEFINITION
RAISING
zcx_abapgit_exception .
PRIVATE SECTION.
METHODS get_field_rules
RETURNING
VALUE(ro_result) TYPE REF TO zif_abapgit_field_rules.
ENDCLASS.
@ -25,8 +28,9 @@ CLASS zcl_abapgit_object_iwsg IMPLEMENTATION.
CREATE OBJECT ro_generic
EXPORTING
is_item = ms_item
iv_language = mv_language.
io_field_rules = get_field_rules( )
is_item = ms_item
iv_language = mv_language.
ENDMETHOD.
@ -98,4 +102,27 @@ CLASS zcl_abapgit_object_iwsg IMPLEMENTATION.
get_generic( )->serialize( io_xml ).
ENDMETHOD.
METHOD get_field_rules.
ro_result = zcl_abapgit_field_rules=>create( ).
ro_result->add(
iv_table = '/IWFND/I_MED_SRH'
iv_field = 'CREATED_BY'
iv_fill_rule = zif_abapgit_field_rules=>c_fill_rule-user
)->add(
iv_table = '/IWFND/I_MED_SRH'
iv_field = 'CREATED_TIMESTMP'
iv_fill_rule = zif_abapgit_field_rules=>c_fill_rule-timestamp
)->add(
iv_table = '/IWFND/I_MED_SRH'
iv_field = 'CHANGED_BY'
iv_fill_rule = zif_abapgit_field_rules=>c_fill_rule-user
)->add(
iv_table = '/IWFND/I_MED_SRH'
iv_field = 'CHANGED_TIMESTMP'
iv_fill_rule = zif_abapgit_field_rules=>c_fill_rule-timestamp ).
ENDMETHOD.
ENDCLASS.

View File

@ -6,8 +6,9 @@ CLASS zcl_abapgit_objects_generic DEFINITION
METHODS constructor
IMPORTING
!is_item TYPE zif_abapgit_definitions=>ty_item
!iv_language TYPE spras DEFAULT sy-langu
!is_item TYPE zif_abapgit_definitions=>ty_item
!iv_language TYPE spras DEFAULT sy-langu
io_field_rules TYPE REF TO zif_abapgit_field_rules OPTIONAL
RAISING
zcx_abapgit_exception .
METHODS delete
@ -105,6 +106,18 @@ CLASS zcl_abapgit_objects_generic DEFINITION
RAISING
zcx_abapgit_exception .
PRIVATE SECTION.
DATA mo_field_rules TYPE REF TO zif_abapgit_field_rules.
METHODS apply_clear_logic
IMPORTING
iv_table TYPE objsl-tobj_name
CHANGING
ct_data TYPE STANDARD TABLE.
METHODS apply_fill_logic
IMPORTING
iv_table TYPE objsl-tobj_name
CHANGING
ct_data TYPE STANDARD TABLE.
ENDCLASS.
@ -213,6 +226,7 @@ CLASS zcl_abapgit_objects_generic IMPLEMENTATION.
ms_item = is_item.
mv_language = iv_language.
mo_field_rules = io_field_rules.
ENDMETHOD.
@ -295,6 +309,8 @@ CLASS zcl_abapgit_objects_generic IMPLEMENTATION.
CREATE DATA lr_ref TYPE STANDARD TABLE OF (<ls_table>-tobj_name).
ASSIGN lr_ref->* TO <lt_data>.
apply_fill_logic( EXPORTING iv_table = <ls_table>-tobj_name
CHANGING ct_data = <lt_data> ).
io_xml->read(
EXPORTING
iv_name = <ls_table>-tobj_name
@ -609,6 +625,9 @@ CLASS zcl_abapgit_objects_generic IMPLEMENTATION.
WHERE (lv_where)
ORDER BY PRIMARY KEY.
apply_clear_logic( EXPORTING iv_table = <ls_object_table>-tobj_name
CHANGING ct_data = <lt_data> ).
io_xml->add(
iv_name = <ls_object_table>-tobj_name
ig_data = <lt_data> ).
@ -691,4 +710,20 @@ CLASS zcl_abapgit_objects_generic IMPLEMENTATION.
ENDIF.
ENDMETHOD.
METHOD apply_clear_logic.
IF mo_field_rules IS BOUND.
mo_field_rules->apply_clear_logic( EXPORTING iv_table = |{ iv_table }|
CHANGING ct_data = ct_data ).
ENDIF.
ENDMETHOD.
METHOD apply_fill_logic.
IF mo_field_rules IS BOUND.
mo_field_rules->apply_fill_logic( EXPORTING iv_table = |{ iv_table }|
CHANGING ct_data = ct_data ).
ENDIF.
ENDMETHOD.
ENDCLASS.

View File

@ -0,0 +1,30 @@
INTERFACE zif_abapgit_field_rules
PUBLIC .
TYPES ty_fill_rule TYPE c LENGTH 2.
CONSTANTS:
BEGIN OF c_fill_rule,
date TYPE ty_fill_rule VALUE 'DT',
time TYPE ty_fill_rule VALUE 'TM',
timestamp TYPE ty_fill_rule VALUE 'TS',
user TYPE ty_fill_rule VALUE 'UR',
client TYPE ty_fill_rule VALUE 'CT',
END OF c_fill_rule.
METHODS add
IMPORTING
iv_table TYPE tabname
iv_field TYPE fieldname
iv_fill_rule TYPE ty_fill_rule
RETURNING
VALUE(ro_self) TYPE REF TO zif_abapgit_field_rules.
METHODS apply_clear_logic
IMPORTING
iv_table TYPE tabname
CHANGING
ct_data TYPE STANDARD TABLE.
METHODS apply_fill_logic
IMPORTING
iv_table TYPE tabname
CHANGING
ct_data TYPE STANDARD TABLE.
ENDINTERFACE.

View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_INTF" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<VSEOINTERF>
<CLSNAME>ZIF_ABAPGIT_FIELD_RULES</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>abapGit Rule</DESCRIPT>
<EXPOSURE>2</EXPOSURE>
<STATE>1</STATE>
<UNICODE>X</UNICODE>
</VSEOINTERF>
</asx:values>
</asx:abap>
</abapGit>