字符 ZBW"/>
修正非法字符 ZBW
REPORT ZBW_CHANGE_RSKC.
TYPE-POOLS: vrm . "存放combobox内容的type pool
DATA: name TYPE vrm_id, " list box的名称
list TYPE vrm_values, " list box的值
value LIKE LINE OF list . " list box的结构
DATA:
GT_OBJ TYPE TABLE OF RSDODSOIOBJ,
GS_OBJ TYPE RSDODSOIOBJ,
GT_OBJ_DETAIL TYPE TABLE OF RSDIOBJ,
GS_OBJ_DETAIL TYPE RSDIOBJ,
GT_OBJT TYPE TABLE OF RSDIOBJT,
GS_OBJT TYPE RSDIOBJT.
DATA:
GV_ODSOBJECT Type RSDODSOBJECT,
GV_TABT Type RSDODSTABT,
GV_TABLNM Type TABNAME.
FIELD-SYMBOLS:
<DYN_TABLE> TYPE STANDARD TABLE,
<DYN_TABLE_MOD> TYPE STANDARD TABLE,
<dyn_wa> TYPE ANY,
<dyn_field> TYPE ANY.
DATA: dy_table TYPE REF TO data,
dy_table_MOD TYPE REF TO data.
DATA:
GT_FACT TYPE LVC_T_FCAT. "ALV
PARAMETERS:
p_dso TYPE rsdodsoiobj-odsobject OBLIGATORY. "ODS
PARAMETERS:
P_OBJ TYPE RSDODSOIOBJ-IOBJNM AS LISTBOX VISIBLE LENGTH 20.
"信息对象
DEFINE fill_list.
value-key = &1. "变量P_LIST的值
value-text = &2. "这个是text
append value to list.
END-OF-DEFINITION.
at SELECTION-SCREEN OUTPUT.
*-设置信息对象选择
PERFORM fill_OBJ_DATA.
INITIALIZATION.
START-OF-SELECTION.
* 获取ODS NEW表
PERFORM GET_ODS_TAB.
* 获取动态内表
PERFORM GET_DYN_TABLE.
* 获取NEW表数据
PERFORM GET_NEW_DATA.
* 获取信息对象和字段名对照
PERFORM GET_OBJ_FNM.
* 删除非法字符
PERFORM DELETE_FFZF.
*&---------------------------------------------------------------------*
*& Form FILL_OBJ_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FILL_OBJ_DATA .
* 获取ODS中的信息对象
PERFORM GET_ODS_OBJ.
* 获取信息对象名称
PERFORM GET_OBJT.
* 填充信息对象
PERFORM FILL_OBJ.
"---〉调用函数显示listbox里面的值
CALL FUNCTION 'VRM_SET_VALUES'
EXPORTING
id = 'P_OBJ' " PARAMETERS's Name
values = list.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form GET_ODS_OBJ
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_ODS_OBJ .
REFRESH GT_OBJ.
SELECT * INTO TABLE GT_OBJ
FROM RSDODSOIOBJ
WHERE ODSOBJECT = P_DSO
AND OBJVERS = 'A'.
SORT GT_OBJ BY POSIT.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form GET_OBJ_DETAL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_OBJT .
CHECK GT_OBJ IS NOT INITIAL.
REFRESH GT_OBJT.
SELECT * INTO TABLE GT_OBJT
FROM RSDIOBJT
FOR ALL ENTRIES IN GT_OBJ
WHERE LANGU = SY-LANGU
AND IOBJNM = GT_OBJ-IOBJNM
AND OBJVERS = 'A'.
SORT GT_OBJT BY IOBJNM.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FILL_OBJ
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FILL_OBJ .
REFRESH list .
LOOP AT GT_OBJ INTO GS_OBJ.
CLEAR GS_OBJT.
READ TABLE GT_OBJT INTO GS_OBJT
WITH KEY IOBJNM = GS_OBJ-IOBJNM BINARY SEARCH.
fill_list GS_OBJ-IOBJNM GS_OBJT-TXTSH.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form GET_OBJ_FNM
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_OBJ_FNM .
CLEAR GS_OBJ_DETAIL.
SELECT SINGLE * INTO GS_OBJ_DETAIL
FROM RSDIOBJ
WHERE IOBJNM = P_OBJ
AND OBJVERS = 'A'.
IF SY-SUBRC NE 0.
MESSAGE S001(00) WITH '' DISPLAY LIKE 'E'.
STOP.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form GET_ODS_TAB
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_ODS_TAB .
GV_ODSOBJECT = P_DSO.
GV_TABT = '4'. "NEW表
CLEAR GV_TABLNM.
CALL METHOD CL_RSD_ODSO=>GET_TABLNM
EXPORTING
I_ODSOBJECT = GV_ODSOBJECT
I_TABT = GV_TABT
* I_VIEW_SUFFIX = RSD_C_ID_VIEW_TIOBJNM2
IMPORTING
E_TABLNM = GV_TABLNM
* E_TTYPENAME = E_TTYPENAME
* E_VIEWNM = E_VIEWNM
* E_CHNGLOGNM = E_CHNGLOGNM
* E_INFOSOURCE = E_INFOSOURCE
* E_DATASOURCE = E_DATASOURCE
* E_TABLNM_CNV = E_TABLNM_CNV
EXCEPTIONS
NAME_ERROR = 1
INPUT_INVALID = 2
OTHERS = 3
.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form GET_DYN_TABLE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_DYN_TABLE .
DATA:
LV_STRUCTURE_NAME TYPE DD02L-TABNAME.
LV_STRUCTURE_NAME = GV_TABLNM.
REFRESH GT_FACT.
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
* I_BUFFER_ACTIVE =
I_STRUCTURE_NAME = LV_STRUCTURE_NAME
* I_CLIENT_NEVER_DISPLAY = 'X'
* I_BYPASSING_BUFFER =
* I_INTERNAL_TABNAME =
CHANGING
CT_FIELDCAT = GT_FACT
EXCEPTIONS
INCONSISTENT_INTERFACE = 1
PROGRAM_ERROR = 2
OTHERS = 3
.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
CALL METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE
EXPORTING
* I_STYLE_TABLE =
IT_FIELDCATALOG = GT_FACT
* I_LENGTH_IN_BYTE =
IMPORTING
EP_TABLE = dy_table
* E_STYLE_FNAME =
EXCEPTIONS
GENERATE_SUBPOOL_DIR_FULL = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
CALL METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE
EXPORTING
* I_STYLE_TABLE =
IT_FIELDCATALOG = GT_FACT
* I_LENGTH_IN_BYTE =
IMPORTING
EP_TABLE = dy_table_MOD
* E_STYLE_FNAME =
EXCEPTIONS
GENERATE_SUBPOOL_DIR_FULL = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
ASSIGN DY_TABLE->* TO <DYN_TABLE>.
ASSIGN DY_TABLE_MOD->* TO <DYN_TABLE_MOD>.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form GET_NEW_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_NEW_DATA .
SELECT * INTO TABLE <DYN_TABLE>
FROM (GV_TABLNM).
ENDFORM.
*&---------------------------------------------------------------------*
*& Form DELETE_FFZF
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM DELETE_FFZF .
DATA:
LV_STR TYPE STRING.
LOOP AT <DYN_TABLE> ASSIGNING <dyn_wa>.
ASSIGN COMPONENT GS_OBJ_DETAIL-FIELDNM OF STRUCTURE <dyn_wa> TO <dyn_field>.
IF <dyn_field> IS ASSIGNED.
CLEAR LV_STR.
LV_STR = <dyn_field>.
CALL FUNCTION 'ZBW_CLEAN_STR2'
EXPORTING
STR_IN = <dyn_field>
* RPL_CH = ''
I_IOBJNM = P_OBJ
IMPORTING
STR_OUT = <dyn_field> .
IF LV_STR NE <dyn_field>.
APPEND <dyn_wa> TO <DYN_TABLE_MOD>. "记录更改数据
ENDIF.
ENDIF.
ENDLOOP.
IF <DYN_TABLE_MOD> IS NOT INITIAL.
MODIFY (GV_TABLNM) FROM TABLE <DYN_TABLE_MOD>.
MESSAGE S001(00) WITH '数据更新成功!' .
ELSE.
MESSAGE S001(00) WITH '数据无非法字符!' .
ENDIF.
ENDFORM.
更多推荐
修正非法字符 ZBW
发布评论