Code20070427 - ooxxvv/MySAPnotes GitHub Wiki

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