DATA: l_regex TYPE REF TO cl_abap_regex,
l_matcher TYPE REF TO cl_abap_matcher,
l_structdescr TYPE REF TO cl_abap_structdescr,
l_elemdescr TYPE REF TO cl_abap_elemdescr,
l_itab_components TYPE abap_component_tab,
l_tmp_components TYPE abap_component_tab,
l_wa_component TYPE abap_componentdescr,
l_tmp_component TYPE abap_componentdescr,
l_scrtext LIKE dd03vt-scrtext_l.
FIELD-SYMBOLS: <wa>,
<fld>,
<data> TYPE addr1_data,
<fs> TYPE szadr_addr1_complete.
ASSIGN ('(SAPMF02D)ADDR_COMPLETE') TO <fs>.
IF sy-subrc EQ 0.
*Regular expression:only those characters in the key board can be entered except !,
* or error will be popuped.
CREATE OBJECT l_regex
EXPORTING
pattern = '^[a-zA-Z0-9~`@#\\\$%\^&\*\(\)-_\+=\|/<>'':;\{\}\[\]\?,\. "]*$'.
LOOP AT <fs>-addr1_tab ASSIGNING <wa>.
ASSIGN COMPONENT 'DATA' OF STRUCTURE <wa> TO <data>.
l_structdescr ?= cl_abap_typedescr=>describe_by_data( <data> ).
l_itab_components = l_structdescr->get_components( ).
LOOP AT l_itab_components INTO l_wa_component.
IF l_wa_component-as_include IS INITIAL.
l_elemdescr ?= l_wa_component-type.
IF l_elemdescr->type_kind EQ cl_abap_elemdescr=>typekind_char.
ASSIGN COMPONENT l_wa_component-name OF STRUCTURE <data> TO <fld>.
CREATE OBJECT l_matcher
EXPORTING
regex = l_regex
text = <fld>.
IF l_matcher->match( ) NE abap_true.
SELECT SINGLE scrtext_l INTO l_scrtext FROM dd03vt WHERE tabname EQ 'ADDR1_DATA'
AND ddlanguage EQ sy-langu
AND fieldname EQ l_wa_component-name.
MESSAGE e023(z1) WITH l_scrtext.
ENDIF.
ENDIF.
ELSE. "Inlcude structure
l_structdescr ?= l_wa_component-type.
l_tmp_components = l_structdescr->get_components( ).
LOOP AT l_tmp_components INTO l_tmp_component.
l_elemdescr ?= l_tmp_component-type.
IF l_elemdescr->type_kind EQ cl_abap_elemdescr=>typekind_char.
ASSIGN COMPONENT l_tmp_component-name OF STRUCTURE <data> TO <fld>.
CREATE OBJECT l_matcher
EXPORTING
regex = l_regex
text = <fld>.
IF l_matcher->match( ) NE abap_true.
SELECT SINGLE scrtext_l INTO l_scrtext FROM dd03vt WHERE tabname EQ 'ADDR1_DATA'
AND ddlanguage EQ sy-langu
AND fieldname EQ l_tmp_component-name.
MESSAGE e023(z1) WITH l_scrtext.
ENDIF.
ENDIF.
ENDLOOP.
ENDIF.
ENDLOOP.
ENDLOOP.
ENDIF.
EXIT_SAPMF02D_001 check address data
最新推荐文章于 2023-11-28 11:22:50 发布