SAP 函数--特殊字符转换

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 '&lt;'.
     REPLACE ALL OCCURRENCES OF '>' IN <f_value> WITH '&gt;'.
    REPLACE ALL OCCURRENCES OF '&' IN <f_value> WITH '&amp;'.
    REPLACE ALL OCCURRENCES OF ''''IN <f_value> WITH '&apos;'.
    REPLACE ALL OCCURRENCES OF '"'IN <f_value> WITH '&quot;'.
        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.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值