Code20070427
Code
*&---------------------------------------------------------------------*
*& Report ZZHENGXB_TEST_DOWNLOAD
*& 批量下載程序和表結構
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ZZHENGXB_TEST_UPLOAD 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:DOW AS CHECKBOX. "是否下載
PARAMETERS:P_DIR(50) DEFAULT 'D/'. "下載路徑
PARAMETERS:STYPE(6) DEFAULT 'TXT'.
PARAMETERS:R1 RADIOBUTTON GROUP R DEFAULT 'X',
R2 RADIOBUTTON GROUP R.
SELECTION-SCREEN END OF BLOCK BLK1.
SELECTION-SCREEN BEGIN OF BLOCK BLK2 WITH FRAME.
SELECT-OPTIONS:AUTHOR FOR TADIR-AUTHOR DEFAULT 'zhengxb'. "開發人
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 R1='X'.
PERFORM GET_DATA.
ENDIF.
IF R2='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 *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
FORM GET_DATA.
SELECT * INTO CORRESPONDING FIELDS OF TABLE YTADIR
FROM TADIR
INNER JOIN TRDIRT
ON TADIR~OBJ_NAME=TRDIRT~NAME
WHERE OBJECT='PROG'
AND OBJ_NAME IN OBJ
AND DEVCLASS IN DEVCLASS
AND AUTHOR IN AUTHOR.
SORT YTADIR BY OBJ_NAME.
WRITE:/ '開發類','開發人','程序名稱','程序標題'.
LOOP AT YTADIR.
IF DOW='X'.
REFRESH TT.
RN=YTADIR-OBJ_NAME.
READ REPORT RN INTO TT.
CONCATENATE P_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:/1(10) YTADIR-DEVCLASS,
(8) YTADIR-AUTHOR,
(15) YTADIR-OBJ_NAME,
(40) 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 *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
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 DOW='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 DOW='X'.
CONCATENATE P_DIR T1-TABNAME '_' T1-DDTEXT '.' STYPE
INTO YYNAME.
CALL FUNCTION 'WS_DOWNLOAD'
EXPORTING
FILENAME=YYNAME
FILETYPE='ASC'
TABLES
DATA_TAB=ITAB.
ELSE.
ULINE.
ENDIF.
ENDLOOP.
ENDFORM. "GET_TABLE_DATA