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.
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.
相关文章推荐
- BW转换例程中去掉非法字符
- [SAP]ABAP动态生成经典应用之Dynamic SQL Excute 程序
- [SAP]ABAP动态生成经典应用之Table数据Upload 程序
- [SAP]ABAP动态生成经典应用之Dynamic SQL Excute 程序(转)
- ABAP--编写应用服务器执行外部命令的程序示例
- ABAP--编写应用服务器执行外部命令的程序示例
- SAP笔记-abap SD 定价公式(例程,即Formula)
- ABAP 程序完成EXCEL文件的导入导出,OLE技术的应用
- 【ABAP】重新生成替代程序和激活所有例程
- SAP ABAP程序性能优化
- sap abap程序之间的调用
- SAP ABAP程序优化方法
- 将数字转换为英文输出的SAP程序(for abap)
- SAP ABAP程序性能优化
- ABAP--编写应用服务器执行外部命令的程序示例
- ABAP动态生成经典应用之Table数据Upload 程序
- ABAP动态生成经典应用之Dynamic SQL Excute 程序
- ABAP动态生成经典应用之Dynamic SQL Excute 程序
- SAP ABAP程序优化方法(搜集自论坛)
- 近日看到网上许多BBS寻找SAP及ABAP程序的学习资料,本人深知学习的艰辛与不易,特贡献自己多年的学习资料,完全免费