您的位置:首页 > 其它

ABAP 例程程序在SAP BW TRANFORMATION中的应用,去除非法字符

2015-04-09 05:40 1061 查看
在标准DSO中,由于数据源的复杂性,经常会会激活失败,常见的原因是非法字符。非法字符通常有几种:

1,小写字母,如果INFOOBJECT 没有点选允许小写的选项,会造成激活失败

2,德语,法语中英语没有的字符。

解决的方法有多种,例如在RSKC添加,但是如果非法字符未知的话,还是难以解决。比较稳妥的方法是用例程解决。



CONSTANTS:

           c_allowed_char  TYPE c LENGTH 200 VALUE

           '!,<>?/\:;"''ABCDEFGHI JKLMNOPQRSTUVWXYZ!%^&*()__+=1234567890', " 定义BW中所有的字符为常量

 

           c_escape        TYPE c VALUE 'Ø'.     " because '!' is a valid character too “将非法字符统一转换为同一字符Ø

 

     DATA: l_allowed_char  TYPE c LENGTH 200,

           l_alocnum         TYPE c LENGTH 000050,

           l_len           TYPE i,

           l_time          TYPE i.

 

 

 

     " get list of allowed characters - from system config

     CALL FUNCTION 'RSKC_ALLOWED_CHAR_GET'  ”调用FM, 得到系统全部的合法字符

       IMPORTING

         e_allowed_char = l_allowed_char.

 

     IF sy-subrc <> 0.

       " if it fails, get use standard list, from constant 如果调用失败,则用常量

       l_allowed_char = c_allowed_char.

     ENDIF.

 

     MOVE source_fields-alocnum  TO l_alocnum.

 

     TRANSLATE l_alocnum TO UPPER CASE. “全部转换为大写,注意SAP BW 里,小写为非法

 

     l_len = STRLEN( l_alocnum ).  

 

     DO l_len TIMES.  "这里的调用循环,原理就不解释了

 

       IF l_alocnum+l_time(1) CN  l_allowed_char .

         l_alocnum+l_time(1) = c_escape.

       ENDIF.

 

       l_time = l_time + 1.

 

     ENDDO.

 

     REPLACE ALL OCCURRENCES OF c_escape IN l_alocnum WITH space.

 

     CONDENSE l_alocnum.

 

     result = l_alocnum.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  character SAP bw 数据源