Download SAP programs and Tables!

在我们的项目上,自己写了很多程序,但是一个一个的保存起来不是很方便,一个可以一下子下载很多程序的程序就可以一下子将自己需要的程序下载了。以下是一个示范程序[如果需要Function module的源程序,加入table: TFDIR, 稍作修改即可]

本来网上是有直接下载的程序的,不过我根据自己的需要稍做部分修改。大局不变,感谢原来提供程序的网友!

REPORT YTEST_TMP 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.
DATA: SEL.
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,
SEL,
TABNAME LIKE DD02L-TABNAME,
DDTEXT LIKE DD02T-DDTEXT,
END OF T1.

DATA:BEGIN OF ITAB OCCURS 0,
FIELD(15), "Field
KEY(6), "Key words
ELMENT(15), "Field Type
TYPE(10), "Data Type
LENG(8) , "Length
DECIMALS(8) , "Decimals
CHK(10), "Check table
CAN(10), "Refrence table
CFI(10), "Refrence Field
TEXT(40), "Field Description
END OF ITAB.

DATA: YYNAME TYPE STRING.
DATA: UCOMM LIKE SY-UCOMM.
DATA: TT TYPE STRING OCCURS 0 WITH HEADER LINE.
DATA: RN(72),
SEL.

DATA:FIELDS(40),
LIN TYPE I,
VAL,
REP(40).

SELECTION-SCREEN BEGIN OF BLOCK BLK1 WITH FRAME.
PARAMETERS:DOWNPATH(50) DEFAULT 'D:PROGRAM'.
PARAMETERS:STYPE(6) DEFAULT 'TXT'.

PARAMETERS:PROGRAM RADIOBUTTON GROUP R DEFAULT 'X',
TABLES 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:OBJNAME FOR TADIR-OBJ_NAME.
SELECT-OPTIONS:TABNAME FOR DD02L-TABNAME.

SELECTION-SCREEN END OF BLOCK BLK2.

START-OF-SELECTION .
CLEAR SEL.
SET PF-STATUS '001'.
IF PROGRAM = 'X'.
PERFORM GET_DATA.
ENDIF.

IF TABLES = 'X'.
IF TABNAME IS INITIAL.
MESSAGE I009 WITH 'Please enter table name!'.
ELSE.
PERFORM GET_TABLE_DATA.
ENDIF.
ENDIF.


AT USER-COMMAND.
CLEAR UCOMM.
UCOMM = SY-UCOMM.
CASE UCOMM.
WHEN 'DOWN'.
PERFORM FM_CHANGE_OUTPUT.
PERFORM FM_DOWNLOAD.
WHEN 'EXIT' OR 'CANCEL'.
LEAVE PROGRAM.
WHEN 'SELALL'.
PERFORM FM_MODIFY_LIST.
WHEN 'DESELALL'.
PERFORM FM_MODIFY_LIST.
WHEN OTHERS.
STOP.
ENDCASE.

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 OBJNAME
AND DEVCLASS IN DEVCLASS
AND AUTHOR IN AUTHOR
AND SPRSL EQ 'E'.

SELECT TRDIR~NAME AS OBJ_NAME
CNAM AS AUTHOR
TEXT
SPRSL
APPENDING CORRESPONDING FIELDS OF TABLE YTADIR
FROM TRDIR
LEFT JOIN TRDIRT
ON TRDIR~NAME = TRDIRT~NAME
WHERE TRDIR~NAME IN OBJNAME.

DELETE YTADIR WHERE SPRSL EQ '1'.

SORT YTADIR BY OBJ_NAME.
DELETE ADJACENT DUPLICATES FROM YTADIR COMPARING OBJ_NAME.

WRITE:/ 'Select','Dev Class','Dev ID','Prog. Name','Prog. Title'.

LOOP AT YTADIR.
WRITE:/ SEL AS CHECKBOX,
YTADIR-DEVCLASS,YTADIR-AUTHOR,YTADIR-OBJ_NAME,YTADIR-TEXT.
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 'E'.

SELECT * INTO CORRESPONDING FIELDS OF TABLE TAB FROM DD03L AS A
WHERE A~TABNAME IN TABNAME.

SORT TAB BY TABNAME POSITION.

WRITE: / 'Select', 'Table name', 'Description'.

LOOP AT T1.
WRITE: / SEL AS CHECKBOX,
T1-TABNAME UNDER 'Table name',
T1-DDTEXT UNDER 'Description'.
ENDLOOP.

ENDFORM. "GET_TABLE_DATA

*&---------------------------------------------------------------------*
*& Form FM_DOWNLOAD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM FM_DOWNLOAD .

IF PROGRAM = 'X'.

LOOP AT YTADIR WHERE SEL = 'X'.
REFRESH TT.
RN = YTADIR-OBJ_NAME.
READ REPORT RN INTO TT.

IF YTADIR-TEXT CS '' OR YTADIR-TEXT CS '/'.
REPLACE '' IN YTADIR WITH '+'.
REPLACE '/' IN YTADIR WITH '+'.
ENDIF.

CONCATENATE DOWNPATH YTADIR-OBJ_NAME '_' YTADIR-TEXT '.' STYPE
INTO YYNAME.

CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
FILENAME = YYNAME
FILETYPE = 'DAT'
TABLES
DATA_TAB = TT
EXCEPTIONS
FILE_WRITE_ERROR = 1
NO_BATCH = 2
GUI_REFUSE_FILETRANSFER = 3
INVALID_TYPE = 4
NO_AUTHORITY = 5
UNKNOWN_ERROR = 6
HEADER_NOT_ALLOWED = 7
SEPARATOR_NOT_ALLOWED = 8
FILESIZE_NOT_ALLOWED = 9
HEADER_TOO_LONG = 10
DP_ERROR_CREATE = 11
DP_ERROR_SEND = 12
DP_ERROR_WRITE = 13
UNKNOWN_DP_ERROR = 14
ACCESS_DENIED = 15
DP_OUT_OF_MEMORY = 16
DISK_FULL = 17
DP_TIMEOUT = 18
FILE_NOT_FOUND = 19
DATAPROVIDER_EXCEPTION = 20
CONTROL_FLUSH_ERROR = 21
OTHERS = 22.
IF SY-SUBRC <> 0.
WRITE: / 'DOWNLOAD', YTADIR-OBJ_NAME , 'FAILED'.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ELSE.
WRITE:/ 'DOWNLOAD', YTADIR-OBJ_NAME , 'SUCCESS'.
ENDIF.
ENDLOOP.

ELSEIF TABLES = 'X'.

LOOP AT T1 WHERE SEL = 'X'.
REFRESH ITAB.
CLEAR YYNAME.

ITAB-FIELD = 'Field Name'.
ITAB-KEY = 'Key words'.
ITAB-ELMENT = 'Data Element'.
ITAB-TYPE = 'Data Type'.
ITAB-LENG = ' Length'.
ITAB-DECIMALS = 'Decimals'.
ITAB-TEXT = 'Field Description'.
ITAB-CHK = 'Table Check '.
ITAB-CAN = 'Refrece Table'.
ITAB-CFI = 'Refrece Field'.
ITAB-TEXT = 'Field Description'.
APPEND ITAB.
CLEAR ITAB.

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 = 'E'.
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.
CLEAR ITAB.
ENDLOOP.

CONCATENATE DOWNPATH T1-TABNAME '_' T1-DDTEXT '.'
STYPE INTO YYNAME.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
FILENAME = YYNAME
FILETYPE = 'DAT'
TABLES
DATA_TAB = ITAB
EXCEPTIONS
FILE_WRITE_ERROR = 1
NO_BATCH = 2
GUI_REFUSE_FILETRANSFER = 3
INVALID_TYPE = 4
NO_AUTHORITY = 5
UNKNOWN_ERROR = 6
HEADER_NOT_ALLOWED = 7
SEPARATOR_NOT_ALLOWED = 8
FILESIZE_NOT_ALLOWED = 9
HEADER_TOO_LONG = 10
DP_ERROR_CREATE = 11
DP_ERROR_SEND = 12
DP_ERROR_WRITE = 13
UNKNOWN_DP_ERROR = 14
ACCESS_DENIED = 15
DP_OUT_OF_MEMORY = 16
DISK_FULL = 17
DP_TIMEOUT = 18
FILE_NOT_FOUND = 19
DATAPROVIDER_EXCEPTION = 20
CONTROL_FLUSH_ERROR = 21
OTHERS = 22.
IF SY-SUBRC <> 0.
WRITE: / 'DOWNLOAD', T1-TABNAME , 'FAILED'.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ELSE.
WRITE:/ 'DOWNLOAD', T1-TABNAME , 'SUCCESS'.
ENDIF.
ENDLOOP.
ENDIF.
ENDFORM. " FM_DOWNLOAD
*&---------------------------------------------------------------------*
*& Form FM_CHANGE_OUTPUT
*&---------------------------------------------------------------------*
FORM FM_CHANGE_OUTPUT .

DATA: INX TYPE I.
CLEAR: VAL, LIN, INX.

LIN = 1.

DO.
LIN = LIN + 1.

IF PROGRAM EQ 'X'.

* Read the value of markfield
READ LINE LIN FIELD VALUE SEL INTO VAL.
IF SY-SUBRC EQ 0.
IF VAL EQ 'X'.
YTADIR-SEL = VAL.
INX = LIN - 1.
MODIFY YTADIR INDEX INX TRANSPORTING SEL.
ENDIF.
ELSE.
EXIT.
ENDIF.

ELSEIF TABLES EQ 'X'.

READ LINE LIN FIELD VALUE SEL INTO VAL.
IF SY-SUBRC EQ 0.
IF VAL EQ 'X'.
T1-SEL = VAL.
INX = LIN - 1.
MODIFY T1 INDEX INX TRANSPORTING SEL.
ENDIF.
ELSE.
EXIT.
ENDIF.

ENDIF.

ENDDO.
ENDFORM. " FM_CHANGE_OUTPUT
*&---------------------------------------------------------------------*
*& Form FM_MODIFY_LIST
*&---------------------------------------------------------------------*
FORM FM_MODIFY_LIST .
DATA: INX TYPE I.
CLEAR: VAL, LIN, INX.

LIN = 1.

DO.
LIN = LIN + 1.
READ LINE LIN FIELD VALUE SEL INTO VAL.
IF SY-SUBRC EQ 0.
IF UCOMM EQ 'SELALL'.
VAL = 'X'.
ELSEIF UCOMM EQ 'DESELALL'.
VAL = SPACE.
ENDIF.
MODIFY CURRENT LINE FIELD VALUE SEL FROM VAL.
ELSE.
EXIT.
ENDIF.
ENDDO.

ENDFORM. " FM_MODIFY_LIST

[@more@]

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/205798/viewspace-1006136/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/205798/viewspace-1006136/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值