CALL FUNCTION ‘ZFG_XML_TRANSLATION’
CHANGING
cs_data = wa_xsdd.
FUNCTION zfg_xml_translation.
*"----------------------------------------------------------
"“本地接口:
*” CHANGING
*" REFERENCE(CS_DATA) OPTIONAL
*" REFERENCE(C_DATA) OPTIONAL
*"-------------------------------------------------------------
- 说明:
-
调用Proxy代理类推送数据之前 进行特殊字符处理
-
其中C_DATA 代表单个字符串
-
CS_DATA 代表一个结构或者一个内表
-
2018/07/25 Create by SH-LYP
*"------------------------------------------------------
-
1.数据对象/指针声明
DATA:lo_struct_descr TYPE REF TO cl_abap_structdescr,
lt_comp_tab TYPE abap_component_tab,
wa_comp_tab TYPE abap_componentdescr,
wa_field_descr TYPE fpmgb_s_listfield_descr.FIELD-SYMBOLS:<f_value> TYPE any,
<fs_value> TYPE any,
<f_data> TYPE any,
<ft_data> TYPE STANDARD TABLE. -
2.1 参照传入的参数创建动态结构
IF cs_data IS NOT INITIAL.
TRY .
lo_struct_descr ?= cl_abap_structdescr=>describe_by_data( cs_data ).
lt_comp_tab = lo_struct_descr->get_components( )." 3.动态处理字段 LOOP AT lt_comp_tab INTO wa_comp_tab WHERE name NE 'CONTROLLER'. ASSIGN COMPONENT wa_comp_tab-name OF STRUCTURE cs_data TO <f_value>. IF <f_value> IS ASSIGNED. REPLACE ALL OCCURRENCES OF '<' IN <f_value> WITH '<'. REPLACE ALL OCCURRENCES OF '>' IN <f_value> WITH '>'. REPLACE ALL OCCURRENCES OF '&' IN <f_value> WITH '&'. REPLACE ALL OCCURRENCES OF ''''IN <f_value> WITH '''. REPLACE ALL OCCURRENCES OF '"'IN <f_value> WITH '"'. ENDIF. ENDLOOP. CATCH cx_sy_move_cast_error. "若传入的为内表 处理如下 ASSIGN cs_data TO <ft_data>. IF <ft_data> IS NOT ASSIGNED. RETURN. ENDIF. READ TABLE <ft_data> ASSIGNING <f_data> INDEX 1. IF <f_data> IS ASSIGNED. lo_struct_descr ?= cl_abap_structdescr=>describe_by_data( <f_data> ). lt_comp_tab = lo_struct_descr->get_components( ). "动态处理字段 LOOP AT lt_comp_tab INTO wa_comp_tab WHERE name NE 'CONTROLLER'. LOOP AT <ft_data> ASSIGNING <fs_value>. ASSIGN COMPONENT wa_comp_tab-name OF STRUCTURE <fs_value> TO <f_value>. IF <f_value> IS ASSIGNED.
REPLACE ALL OCCURRENCES OF ‘<’ IN <f_value> WITH ‘<’.
REPLACE ALL OCCURRENCES OF ‘>’ IN <f_value> WITH ‘>’.
REPLACE ALL OCCURRENCES OF ‘&’ IN <f_value> WITH ‘&’.
REPLACE ALL OCCURRENCES OF ‘’’’ IN <f_value> WITH ‘’’.
REPLACE ALL OCCURRENCES OF ‘"’ IN <f_value> WITH ‘"’.
ENDIF.
ENDLOOP.
ENDLOOP.
ENDIF.ENDTRY.
ENDIF. -
2.2 替换单个字段的特殊字符
IF c_data IS NOT INITIAL.
ASSIGN c_data TO <f_value>.
IF <f_value> IS ASSIGNED.
REPLACE ALL OCCURRENCES OF ‘<’ IN <f_value> WITH ‘<’.
REPLACE ALL OCCURRENCES OF ‘>’ IN <f_value> WITH ‘>’.
REPLACE ALL OCCURRENCES OF ‘&’ IN <f_value> WITH ‘&’.
REPLACE ALL OCCURRENCES OF ‘’’’ IN <f_value> WITH ‘’’.
REPLACE ALL OCCURRENCES OF ‘"’ IN <f_value> WITH ‘"’.
ENDIF.ENDIF.
ENDFUNCTION.