*&---------------------------------------------------------------------*
*& 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
*& 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