功能:批量下载ABAP程序,表结构,RFC函数
**&---------------------------------------------------------------------*
* *& Report ZABAP_DOWN
* *& 批量下载ABAP程序,表结构,RFC函数
* *&---------------------------------------------------------------------*
* *&已无法查找原作者来源,感谢原作者的付出,增加RFC下载
* *&
* *&---------------------------------------------------------------------*
REPORT ZABAP_DOWN NO STANDARD PAGE HEADING LINE-SIZE 200 MESSAGE-ID WA.
TABLES:TADIR,TRDIRT,TSTC,DD03L,DD02L,DD04L,DD02T,DD03T,DD04T.
DATA: BEGIN OF YTADIR OCCURS 0 .
INCLUDE STRUCTURE TADIR.
INCLUDE STRUCTURE TRDIRT.
DATA: END OF YTADIR.
DATA:PROG(72) TYPE C OCCURS 0 WITH HEADER LINE.
* 表结构
DATA:BEGIN OF TAB OCCURS 0 .
INCLUDE STRUCTURE DD03L.
DATA:TEXT(40).
DATA:END OF TAB.
DATA:BEGIN OF T1 OCCURS 0 ,
TABNAME LIKE DD02L-TABNAME,
DDTEXT LIKE DD02T-DDTEXT,
END OF T1.
DATA:BEGIN OF ITAB OCCURS 0 ,
FIELD(15), " 字段
KEY(6), " 关键字
ELMENT(15), " 字段类型
TYPE(10), " 数据类型
LENG(8) , " 长度
DECIMALS(8) , " 小数
CHK(10), " 表检查
CAN(10), " 参考表
CFI(10), " 参考字段
TEXT(40), " 字段描述
END OF ITAB.
DATA: YYNAME(128) TYPE C.
DATA: TT TYPE STRING OCCURS 0 WITH HEADER LINE.
DATA: RN(72).
DATA:FIELDS(40),
LIN TYPE I,
VAL(30),
REP(40).
SELECTION-SCREEN BEGIN OF BLOCK BLK1 WITH FRAME.
PARAMETERS:DOWNLOAD AS CHECKBOX. " 是否下载
PARAMETERS:DIR(50) DEFAULT 'F:\ABAP\'. "下载路径
PARAMETERS:STYPE(6) DEFAULT 'TXT' .
PARAMETERS:REPORT RADIOBUTTON GROUP R DEFAULT 'X',
RFC RADIOBUTTON GROUP R,
TABLE RADIOBUTTON GROUP R.
SELECTION-SCREEN END OF BLOCK BLK1.
SELECTION-SCREEN BEGIN OF BLOCK BLK2 WITH FRAME.
SELECT-OPTIONS:AUTHOR FOR TADIR-AUTHOR . " 开发人
SELECT-OPTIONS:DEVCLASS FOR TADIR-DEVCLASS. " 开发类
SELECT-OPTIONS:OBJ FOR TADIR-OBJ_NAME. " 下载程序名称
SELECT-OPTIONS:TABNAME FOR DD02L-TABNAME. " 下载表名称
SELECTION-SCREEN END OF BLOCK BLK2.
INITIALIZATION .
START-OF-SELECTION .
IF REPORT = 'X' .
PERFORM GET_DATA.
ENDIF.
IF RFC = 'X' .
PERFORM GET_DATA_FUN.
ENDIF.
IF TABLE = 'X' .
IF TABNAME IS INITIAL.
MESSAGE I009 WITH ' 请输入要下载的表名! ' .
ELSE.
PERFORM GET_TABLE_DATA.
ENDIF.
ENDIF.
AT LINE-SELECTION.
CLEAR: FIELDS, LIN.
GET CURSOR FIELD FIELDS LINE LIN VALUE VAL.
LIN = LIN - 1 .
IF LIN >= 1 .
READ TABLE YTADIR INDEX LIN.
IF SY-SUBRC = 0 .
CLEAR REP.
CLEAR PROG.
REP = YTADIR-OBJ_NAME.
READ REPORT REP INTO PROG.
EDITOR-CALL FOR PROG.
* * SET PARAMETER ID ' RID ' FIELD REP.
* * CALL TRANSACTION ' SE38 ' AND SKIP FIRST SCREEN.
ENDIF.
ENDIF.
END-OF-SELECTION.
FORM GET_DATA_FUN.
SELECT TFDIR~FUNCNAME AS VERSID PNAME AS OBJ_NAME INCLUDE AS AUTHOR STEXT AS TEXT
INTO CORRESPONDING FIELDS OF TABLE YTADIR
FROM TFDIR
JOIN TFTIT ON TFDIR~FUNCNAME = TFTIT~FUNCNAME AND SPRAS = '1'
WHERE TFDIR~FUNCNAME IN OBJ.
SORT YTADIR BY OBJ_NAME.
WRITE: / ' 开发类 ' , ' 开发人 ' , ' 程序名称 ' , ' 程序标题 ' .
LOOP AT YTADIR.
IF DOWNLOAD = 'X' .
REFRESH TT.
DATA: L TYPE I.
L = STRLEN( YTADIR-OBJ_NAME ) - 3.
CONCATENATE YTADIR-OBJ_NAME+3(L) 'U' YTADIR-AUTHOR INTO RN.
READ REPORT RN INTO TT.
CONCATENATE DIR YTADIR-VERSID
'_' YTADIR-TEXT '.' STYPE
INTO YYNAME.
CALL FUNCTION 'WS_DOWNLOAD'
EXPORTING
FILENAME = YYNAME
FILETYPE = 'ASC'
TABLES
DATA_TAB = TT
EXCEPTIONS
FILE_OPEN_ERROR = 1
FILE_WRITE_ERROR = 2
INVALID_FILESIZE = 3
INVALID_TABLE_WIDTH = 4
INVALID_TYPE = 5
NO_BATCH = 6
UNKNOWN_ERROR = 7.
IF SY-SUBRC = 0 .
* WRITE /: YTADIR-DEVCLASS,
* YTADIR-AUTHOR,
* YTADIR-OBJ_NAME,
* YTADIR-TEXT.
*
* FORMAT COLOR 5 .
* WRITE: ' 已下载 ' .
* FORMAT COLOR OFF.
ELSE.
WRITE: / YTADIR-DEVCLASS,YTADIR-AUTHOR,YTADIR-OBJ_NAME,YTADIR-TEXT.
FORMAT COLOR 4 .
WRITE: ' 无法下载 ' .
FORMAT COLOR OFF.
ENDIF.
ELSE.
WRITE: / YTADIR-DEVCLASS,YTADIR-AUTHOR,YTADIR-OBJ_NAME,YTADIR-TEXT.
ENDIF.
ENDLOOP.
ENDFORM. " GET_DATA
FORM GET_DATA.
SELECT * INTO CORRESPONDING FIELDS OF TABLE YTADIR
FROM TADIR
JOIN TRDIRT
ON TADIR~OBJ_NAME = TRDIRT~NAME
WHERE OBJECT IN ('PROG','FUGR')
AND OBJ_NAME IN OBJ
AND DEVCLASS IN DEVCLASS
AND AUTHOR IN AUTHOR.
SORT YTADIR BY OBJ_NAME.
WRITE: / ' 开发类 ' , ' 开发人 ' , ' 程序名称 ' , ' 程序标题 ' .
LOOP AT YTADIR.
IF DOWNLOAD = 'X' .
REFRESH TT.
RN = YTADIR-OBJ_NAME.
READ REPORT RN INTO TT.
CONCATENATE DIR YTADIR-AUTHOR '_' YTADIR-OBJ_NAME
'_' YTADIR-TEXT '.' STYPE
INTO YYNAME.
CALL FUNCTION 'WS_DOWNLOAD'
EXPORTING
FILENAME = YYNAME
FILETYPE = 'ASC'
TABLES
DATA_TAB = TT
EXCEPTIONS
FILE_OPEN_ERROR = 1
FILE_WRITE_ERROR = 2
INVALID_FILESIZE = 3
INVALID_TABLE_WIDTH = 4
INVALID_TYPE = 5
NO_BATCH = 6
UNKNOWN_ERROR = 7.
IF SY-SUBRC = 0 .
* WRITE /: YTADIR-DEVCLASS,
* YTADIR-AUTHOR,
* YTADIR-OBJ_NAME,
* YTADIR-TEXT.
*
* FORMAT COLOR 5 .
* WRITE: ' 已下载 ' .
* FORMAT COLOR OFF.
ELSE.
WRITE: / YTADIR-DEVCLASS,YTADIR-AUTHOR,YTADIR-OBJ_NAME,YTADIR-TEXT.
FORMAT COLOR 4 .
WRITE: ' 无法下载 ' .
FORMAT COLOR OFF.
ENDIF.
ELSE.
WRITE: / YTADIR-DEVCLASS,YTADIR-AUTHOR,YTADIR-OBJ_NAME,YTADIR-TEXT.
ENDIF.
ENDLOOP.
ENDFORM. " GET_DATA
FORM GET_TABLE_DATA.
SELECT DISTINCT * INTO CORRESPONDING FIELDS OF TABLE T1
FROM DD02T WHERE TABNAME IN TABNAME
AND DDLANGUAGE EQ '1' .
SELECT * INTO CORRESPONDING FIELDS OF TABLE TAB FROM DD03L AS A
WHERE A~TABNAME IN TABNAME.
SORT TAB BY TABNAME POSITION.
WRITE: / ' 字段名 ' , ' 关键字 ' , ' 数据元素 ' , ' 数据类型 ' , ' 长度 ' , ' 小数 ' ,
' 表检查 ' , ' 参考表 ' , ' 参考字段 ' , ' 字段描述 ' .
ULINE.
LOOP AT T1.
REFRESH ITAB.
CLEAR YYNAME.
IF DOWNLOAD = 'X' .
ITAB-FIELD = '字段名' .
ITAB-KEY = '关键字' .
ITAB-ELMENT = '数据元素' .
ITAB-TYPE = '数据类型' .
ITAB-LENG = '长度' .
ITAB-DECIMALS = '小数' .
ITAB-TEXT = '字段描述' .
ITAB-CHK = '表检查' .
ITAB-CAN = '参考表' .
ITAB-CFI = '参考字段' .
APPEND ITAB.
CLEAR ITAB.
ENDIF.
CONCATENATE T1-TABNAME '_' T1-DDTEXT '的表结构如下: '
INTO YYNAME.
FORMAT COLOR 3 .
WRITE: / YYNAME.
FORMAT COLOR OFF.
LOOP AT TAB WHERE TABNAME = T1-TABNAME.
ITAB-FIELD = TAB-FIELDNAME.
ITAB-KEY = TAB-KEYFLAG.
ITAB-ELMENT = TAB-ROLLNAME.
ITAB-TYPE = TAB-DATATYPE.
ITAB-LENG = TAB-LENG.
ITAB-CHK = TAB-CHECKTABLE.
ITAB-CAN = TAB-REFTABLE.
ITAB-CFI = TAB-REFFIELD.
ITAB-DECIMALS = TAB-DECIMALS.
IF TAB-ROLLNAME NE SPACE.
SELECT SINGLE * FROM DD04T WHERE ROLLNAME = TAB-ROLLNAME
AND DDLANGUAGE = '1' .
IF SY-SUBRC = 0 .
ITAB-TEXT = DD04T-DDTEXT.
ELSE.
CLEAR ITAB-TEXT.
ENDIF.
ELSE.
SELECT SINGLE * FROM DD03T WHERE TABNAME = TAB-TABNAME
AND DDLANGUAGE = '1'
AND FIELDNAME = TAB-FIELDNAME.
IF SY-SUBRC = 0 .
ITAB-TEXT = DD03T-DDTEXT.
ELSE.
CLEAR ITAB-TEXT.
ENDIF.
ENDIF.
APPEND ITAB.
WRITE: / ITAB-FIELD,ITAB-KEY,ITAB-ELMENT,ITAB-TYPE,ITAB-LENG,
ITAB-DECIMALS,ITAB-CHK,ITAB-CAN,ITAB-CFI,ITAB-TEXT.
CLEAR ITAB.
ENDLOOP.
IF DOWNLOAD = 'X' .
CONCATENATE '***____ ' T1-DDTEXT INTO ITAB .
INSERT ITAB INDEX 1.
CONCATENATE DIR T1-TABNAME '.' STYPE
INTO YYNAME.
CALL FUNCTION 'WS_DOWNLOAD'
EXPORTING
FILENAME = YYNAME
FILETYPE = 'ASC'
TABLES
DATA_TAB = ITAB.
ELSE.
ULINE.
ENDIF.
ENDLOOP.
ENDFORM. " GET_TABLE_DATA
* *& Report ZABAP_DOWN
* *& 批量下载ABAP程序,表结构,RFC函数
* *&---------------------------------------------------------------------*
* *&已无法查找原作者来源,感谢原作者的付出,增加RFC下载
* *&
* *&---------------------------------------------------------------------*
REPORT ZABAP_DOWN NO STANDARD PAGE HEADING LINE-SIZE 200 MESSAGE-ID WA.
TABLES:TADIR,TRDIRT,TSTC,DD03L,DD02L,DD04L,DD02T,DD03T,DD04T.
DATA: BEGIN OF YTADIR OCCURS 0 .
INCLUDE STRUCTURE TADIR.
INCLUDE STRUCTURE TRDIRT.
DATA: END OF YTADIR.
DATA:PROG(72) TYPE C OCCURS 0 WITH HEADER LINE.
* 表结构
DATA:BEGIN OF TAB OCCURS 0 .
INCLUDE STRUCTURE DD03L.
DATA:TEXT(40).
DATA:END OF TAB.
DATA:BEGIN OF T1 OCCURS 0 ,
TABNAME LIKE DD02L-TABNAME,
DDTEXT LIKE DD02T-DDTEXT,
END OF T1.
DATA:BEGIN OF ITAB OCCURS 0 ,
FIELD(15), " 字段
KEY(6), " 关键字
ELMENT(15), " 字段类型
TYPE(10), " 数据类型
LENG(8) , " 长度
DECIMALS(8) , " 小数
CHK(10), " 表检查
CAN(10), " 参考表
CFI(10), " 参考字段
TEXT(40), " 字段描述
END OF ITAB.
DATA: YYNAME(128) TYPE C.
DATA: TT TYPE STRING OCCURS 0 WITH HEADER LINE.
DATA: RN(72).
DATA:FIELDS(40),
LIN TYPE I,
VAL(30),
REP(40).
SELECTION-SCREEN BEGIN OF BLOCK BLK1 WITH FRAME.
PARAMETERS:DOWNLOAD AS CHECKBOX. " 是否下载
PARAMETERS:DIR(50) DEFAULT 'F:\ABAP\'. "下载路径
PARAMETERS:STYPE(6) DEFAULT 'TXT' .
PARAMETERS:REPORT RADIOBUTTON GROUP R DEFAULT 'X',
RFC RADIOBUTTON GROUP R,
TABLE RADIOBUTTON GROUP R.
SELECTION-SCREEN END OF BLOCK BLK1.
SELECTION-SCREEN BEGIN OF BLOCK BLK2 WITH FRAME.
SELECT-OPTIONS:AUTHOR FOR TADIR-AUTHOR . " 开发人
SELECT-OPTIONS:DEVCLASS FOR TADIR-DEVCLASS. " 开发类
SELECT-OPTIONS:OBJ FOR TADIR-OBJ_NAME. " 下载程序名称
SELECT-OPTIONS:TABNAME FOR DD02L-TABNAME. " 下载表名称
SELECTION-SCREEN END OF BLOCK BLK2.
INITIALIZATION .
START-OF-SELECTION .
IF REPORT = 'X' .
PERFORM GET_DATA.
ENDIF.
IF RFC = 'X' .
PERFORM GET_DATA_FUN.
ENDIF.
IF TABLE = 'X' .
IF TABNAME IS INITIAL.
MESSAGE I009 WITH ' 请输入要下载的表名! ' .
ELSE.
PERFORM GET_TABLE_DATA.
ENDIF.
ENDIF.
AT LINE-SELECTION.
CLEAR: FIELDS, LIN.
GET CURSOR FIELD FIELDS LINE LIN VALUE VAL.
LIN = LIN - 1 .
IF LIN >= 1 .
READ TABLE YTADIR INDEX LIN.
IF SY-SUBRC = 0 .
CLEAR REP.
CLEAR PROG.
REP = YTADIR-OBJ_NAME.
READ REPORT REP INTO PROG.
EDITOR-CALL FOR PROG.
* * SET PARAMETER ID ' RID ' FIELD REP.
* * CALL TRANSACTION ' SE38 ' AND SKIP FIRST SCREEN.
ENDIF.
ENDIF.
END-OF-SELECTION.
FORM GET_DATA_FUN.
SELECT TFDIR~FUNCNAME AS VERSID PNAME AS OBJ_NAME INCLUDE AS AUTHOR STEXT AS TEXT
INTO CORRESPONDING FIELDS OF TABLE YTADIR
FROM TFDIR
JOIN TFTIT ON TFDIR~FUNCNAME = TFTIT~FUNCNAME AND SPRAS = '1'
WHERE TFDIR~FUNCNAME IN OBJ.
SORT YTADIR BY OBJ_NAME.
WRITE: / ' 开发类 ' , ' 开发人 ' , ' 程序名称 ' , ' 程序标题 ' .
LOOP AT YTADIR.
IF DOWNLOAD = 'X' .
REFRESH TT.
DATA: L TYPE I.
L = STRLEN( YTADIR-OBJ_NAME ) - 3.
CONCATENATE YTADIR-OBJ_NAME+3(L) 'U' YTADIR-AUTHOR INTO RN.
READ REPORT RN INTO TT.
CONCATENATE DIR YTADIR-VERSID
'_' YTADIR-TEXT '.' STYPE
INTO YYNAME.
CALL FUNCTION 'WS_DOWNLOAD'
EXPORTING
FILENAME = YYNAME
FILETYPE = 'ASC'
TABLES
DATA_TAB = TT
EXCEPTIONS
FILE_OPEN_ERROR = 1
FILE_WRITE_ERROR = 2
INVALID_FILESIZE = 3
INVALID_TABLE_WIDTH = 4
INVALID_TYPE = 5
NO_BATCH = 6
UNKNOWN_ERROR = 7.
IF SY-SUBRC = 0 .
* WRITE /: YTADIR-DEVCLASS,
* YTADIR-AUTHOR,
* YTADIR-OBJ_NAME,
* YTADIR-TEXT.
*
* FORMAT COLOR 5 .
* WRITE: ' 已下载 ' .
* FORMAT COLOR OFF.
ELSE.
WRITE: / YTADIR-DEVCLASS,YTADIR-AUTHOR,YTADIR-OBJ_NAME,YTADIR-TEXT.
FORMAT COLOR 4 .
WRITE: ' 无法下载 ' .
FORMAT COLOR OFF.
ENDIF.
ELSE.
WRITE: / YTADIR-DEVCLASS,YTADIR-AUTHOR,YTADIR-OBJ_NAME,YTADIR-TEXT.
ENDIF.
ENDLOOP.
ENDFORM. " GET_DATA
FORM GET_DATA.
SELECT * INTO CORRESPONDING FIELDS OF TABLE YTADIR
FROM TADIR
JOIN TRDIRT
ON TADIR~OBJ_NAME = TRDIRT~NAME
WHERE OBJECT IN ('PROG','FUGR')
AND OBJ_NAME IN OBJ
AND DEVCLASS IN DEVCLASS
AND AUTHOR IN AUTHOR.
SORT YTADIR BY OBJ_NAME.
WRITE: / ' 开发类 ' , ' 开发人 ' , ' 程序名称 ' , ' 程序标题 ' .
LOOP AT YTADIR.
IF DOWNLOAD = 'X' .
REFRESH TT.
RN = YTADIR-OBJ_NAME.
READ REPORT RN INTO TT.
CONCATENATE DIR YTADIR-AUTHOR '_' YTADIR-OBJ_NAME
'_' YTADIR-TEXT '.' STYPE
INTO YYNAME.
CALL FUNCTION 'WS_DOWNLOAD'
EXPORTING
FILENAME = YYNAME
FILETYPE = 'ASC'
TABLES
DATA_TAB = TT
EXCEPTIONS
FILE_OPEN_ERROR = 1
FILE_WRITE_ERROR = 2
INVALID_FILESIZE = 3
INVALID_TABLE_WIDTH = 4
INVALID_TYPE = 5
NO_BATCH = 6
UNKNOWN_ERROR = 7.
IF SY-SUBRC = 0 .
* WRITE /: YTADIR-DEVCLASS,
* YTADIR-AUTHOR,
* YTADIR-OBJ_NAME,
* YTADIR-TEXT.
*
* FORMAT COLOR 5 .
* WRITE: ' 已下载 ' .
* FORMAT COLOR OFF.
ELSE.
WRITE: / YTADIR-DEVCLASS,YTADIR-AUTHOR,YTADIR-OBJ_NAME,YTADIR-TEXT.
FORMAT COLOR 4 .
WRITE: ' 无法下载 ' .
FORMAT COLOR OFF.
ENDIF.
ELSE.
WRITE: / YTADIR-DEVCLASS,YTADIR-AUTHOR,YTADIR-OBJ_NAME,YTADIR-TEXT.
ENDIF.
ENDLOOP.
ENDFORM. " GET_DATA
FORM GET_TABLE_DATA.
SELECT DISTINCT * INTO CORRESPONDING FIELDS OF TABLE T1
FROM DD02T WHERE TABNAME IN TABNAME
AND DDLANGUAGE EQ '1' .
SELECT * INTO CORRESPONDING FIELDS OF TABLE TAB FROM DD03L AS A
WHERE A~TABNAME IN TABNAME.
SORT TAB BY TABNAME POSITION.
WRITE: / ' 字段名 ' , ' 关键字 ' , ' 数据元素 ' , ' 数据类型 ' , ' 长度 ' , ' 小数 ' ,
' 表检查 ' , ' 参考表 ' , ' 参考字段 ' , ' 字段描述 ' .
ULINE.
LOOP AT T1.
REFRESH ITAB.
CLEAR YYNAME.
IF DOWNLOAD = 'X' .
ITAB-FIELD = '字段名' .
ITAB-KEY = '关键字' .
ITAB-ELMENT = '数据元素' .
ITAB-TYPE = '数据类型' .
ITAB-LENG = '长度' .
ITAB-DECIMALS = '小数' .
ITAB-TEXT = '字段描述' .
ITAB-CHK = '表检查' .
ITAB-CAN = '参考表' .
ITAB-CFI = '参考字段' .
APPEND ITAB.
CLEAR ITAB.
ENDIF.
CONCATENATE T1-TABNAME '_' T1-DDTEXT '的表结构如下: '
INTO YYNAME.
FORMAT COLOR 3 .
WRITE: / YYNAME.
FORMAT COLOR OFF.
LOOP AT TAB WHERE TABNAME = T1-TABNAME.
ITAB-FIELD = TAB-FIELDNAME.
ITAB-KEY = TAB-KEYFLAG.
ITAB-ELMENT = TAB-ROLLNAME.
ITAB-TYPE = TAB-DATATYPE.
ITAB-LENG = TAB-LENG.
ITAB-CHK = TAB-CHECKTABLE.
ITAB-CAN = TAB-REFTABLE.
ITAB-CFI = TAB-REFFIELD.
ITAB-DECIMALS = TAB-DECIMALS.
IF TAB-ROLLNAME NE SPACE.
SELECT SINGLE * FROM DD04T WHERE ROLLNAME = TAB-ROLLNAME
AND DDLANGUAGE = '1' .
IF SY-SUBRC = 0 .
ITAB-TEXT = DD04T-DDTEXT.
ELSE.
CLEAR ITAB-TEXT.
ENDIF.
ELSE.
SELECT SINGLE * FROM DD03T WHERE TABNAME = TAB-TABNAME
AND DDLANGUAGE = '1'
AND FIELDNAME = TAB-FIELDNAME.
IF SY-SUBRC = 0 .
ITAB-TEXT = DD03T-DDTEXT.
ELSE.
CLEAR ITAB-TEXT.
ENDIF.
ENDIF.
APPEND ITAB.
WRITE: / ITAB-FIELD,ITAB-KEY,ITAB-ELMENT,ITAB-TYPE,ITAB-LENG,
ITAB-DECIMALS,ITAB-CHK,ITAB-CAN,ITAB-CFI,ITAB-TEXT.
CLEAR ITAB.
ENDLOOP.
IF DOWNLOAD = 'X' .
CONCATENATE '***____ ' T1-DDTEXT INTO ITAB .
INSERT ITAB INDEX 1.
CONCATENATE DIR T1-TABNAME '.' STYPE
INTO YYNAME.
CALL FUNCTION 'WS_DOWNLOAD'
EXPORTING
FILENAME = YYNAME
FILETYPE = 'ASC'
TABLES
DATA_TAB = ITAB.
ELSE.
ULINE.
ENDIF.
ENDLOOP.
ENDFORM. " GET_TABLE_DATA
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.