功能:批量下載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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章