BW非法字符处理
非法字符配置表结构
非法字符配置表内容
MANDT SEQNO BAD_HEX GOOD_HEX
700 1 0000 0020
700 2 0001 0020
700 3 0002 0020
700 4 0003 0020
700 5 0004 0020
700 6 0005 0020
700 7 0006 0020
700 8 0007 0020
700 9 0008 0020
700 10 0009 0020
700 11 000A 0020
700 12 000B 0020
700 13 000C 0020
700 14 000D 0020
700 15 000E 0020
700 16 000F 0020
700 17 0010 0020
700 18 0011 0020
700 19 0012 0020
700 20 0013 0020
700 21 0022 0020
700 22 FF08 0020
700 23 FF09 0020
非法字符处理编码
CALL METHOD ZCL_BW_UTILITIES=>REMOVE_PACKAGE_ILLEGAL_CHARSCHANGINGC_SOURCETAB = SOURCE_PACKAGE.class ZCL_BW_UTILITIES definitionpublicfinalcreate public .public section. "methods CONSTRUCTOR .class-methods REMOVE_PACKAGE_ILLEGAL_CHARSimporting!I_CHAR_LENGTH type I optionalchanging!C_SOURCETAB type TABLE .class-methods CLASS_CONSTRUCTOR .
protected section.
private section.class-data A_ILLEGAL_HEX_CHAR type STRING . "class-data A_ILLEGAL_HEX_PAIR type STRING .class-methods CHECK_SINGLE_FIELDchanging!C_FIELD type CLIKE .
ENDCLASS.CLASS ZCL_BW_UTILITIES IMPLEMENTATION.* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Static Private Method ZCL_BW_UTILITIES=>CHECK_SINGLE_FIELD
* +-------------------------------------------------------------------------------------------------+
* | [<-->] C_FIELD TYPE CLIKE
* +--------------------------------------------------------------------------------------</SIGNATURE>METHOD CHECK_SINGLE_FIELD."IF ( STRLEN( C_FIELD ) = 1 AND C_FIELD = '#' ) ORC_FIELD+0(1) = '!'.C_FIELD+0(1) = SPACE.ENDIF.IF C_FIELD CA A_ILLEGAL_HEX_CHAR.TRANSLATE C_FIELD USING A_ILLEGAL_HEX_PAIR.ENDIF.ENDMETHOD.* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Static Public Method ZCL_BW_UTILITIES=>CLASS_CONSTRUCTOR
* +-------------------------------------------------------------------------------------------------+
* +--------------------------------------------------------------------------------------</SIGNATURE>METHOD CLASS_CONSTRUCTOR.DATA: IT_HEX TYPE STANDARD TABLE OF ZBW_ILLEGAL_HEX,"HEX_PAIR TYPE XSTRING,HEX_CHAR TYPE XSTRING,CONVERTER TYPE REF TO CL_ABAP_CONV_IN_CE.FIELD-SYMBOLS: <FS_HEX> TYPE ZBW_ILLEGAL_HEX.SELECT * FROM ZBW_ILLEGAL_HEX INTO TABLE IT_HEX.LOOP AT IT_HEX ASSIGNING <FS_HEX>.CONCATENATE HEX_PAIR <FS_HEX>-BAD_HEX <FS_HEX>-GOOD_HEX INTO HEX_PAIR IN BYTE MODE.CONCATENATE HEX_CHAR <FS_HEX>-BAD_HEX INTO HEX_CHAR IN BYTE MODE.ENDLOOP.CALL METHOD CL_ABAP_CONV_IN_CE=>CREATEEXPORTINGINPUT = HEX_PAIRENCODING = '4102'REPLACEMENT = '?'IGNORE_CERR = 'X'RECEIVINGCONV = CONVERTER.CALL METHOD CONVERTER->READIMPORTINGDATA = A_ILLEGAL_HEX_PAIR.CALL METHOD CONVERTER->RESETEXPORTINGINPUT = HEX_CHARENCODING = '4102'IGNORE_CERR = 'X'.CALL METHOD CONVERTER->READIMPORTINGDATA = A_ILLEGAL_HEX_CHAR.ENDMETHOD.* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_BW_UTILITIES->CONSTRUCTOR
* +-------------------------------------------------------------------------------------------------+
* +--------------------------------------------------------------------------------------</SIGNATURE>method CONSTRUCTOR.endmethod.* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Static Public Method ZCL_BW_UTILITIES=>REMOVE_PACKAGE_ILLEGAL_CHARS
* +-------------------------------------------------------------------------------------------------+
* | [--->] I_CHAR_LENGTH TYPE I(optional)
* | [<-->] C_SOURCETAB TYPE TABLE
* +--------------------------------------------------------------------------------------</SIGNATURE>METHOD REMOVE_PACKAGE_ILLEGAL_CHARS."TYPES: BEGIN OF T_POS,POS TYPE I,LEN TYPE I,END OF T_POS.DATA: DETAILS TYPE REF TO CL_ABAP_STRUCTDESCR,IT_POS TYPE STANDARD TABLE OF T_POS,WA_POS TYPE T_POS,IDX TYPE SYTABIX,FVALUE TYPE STRING.FIELD-SYMBOLS: <LINE> TYPE ANY,<COMP_WA> TYPE ABAP_COMPDESCR,<FS_POS> TYPE T_POS,<FS> TYPE ANY.IF LINES( C_SOURCETAB ) = 0.RETURN.ENDIF.READ TABLE C_SOURCETAB ASSIGNING <LINE> INDEX 1.DETAILS ?= CL_ABAP_TYPEDESCR=>DESCRIBE_BY_DATA( <LINE> ).LOOP AT DETAILS->COMPONENTS ASSIGNING <COMP_WA>.IDX = SY-TABIX.IF <COMP_WA>-TYPE_KIND = 'C' AND<COMP_WA>-LENGTH > I_CHAR_LENGTH.WA_POS-POS = IDX.WA_POS-LEN = <COMP_WA>-LENGTH.APPEND WA_POS TO IT_POS.ENDIF.ENDLOOP.IF IT_POS[] IS INITIAL.RETURN.ENDIF.LOOP AT C_SOURCETAB ASSIGNING <LINE>.LOOP AT IT_POS ASSIGNING <FS_POS>.ASSIGN COMPONENT <FS_POS>-POS OF STRUCTURE <LINE> TO <FS>.CALL METHOD CHECK_SINGLE_FIELDCHANGINGC_FIELD = <FS>.ENDLOOP.ENDLOOP.
*ENDMETHOD.
ENDCLASS.