2010/08/05

ABAP TABLE REPORT FUNCTION MODULE(FM) BACTH DOWNLOAD

REPORT YZEROCHO01 NO STANDARD PAGE HEADING LINE-SIZE 500.
***************************************************************
*** ABAP TABLE REPORT FUNCTION MODULE(FM) BACTH DOWNLOAD ***
*** Download one or more Fucntion Groups to PC-File
*** ABAP テーブル レポート 汎用モジュール バッチダウンロード ***
*** FMのインクルードファイル
*** 参照
*** http://hi.baidu.com/festsoft/blog/item/5c69f595a98b164ed0135e4c.html
***************************************************************

TABLES:TADIR,TRDIRT,TSTC,DD03L,DD02L,DD04L,DD02T,DD03T,DD04T.
TABLES:TFDIR.
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: BEGIN OF IT_TFDIR OCCURS 0,
NAME LIKE PROGDIR-NAME ,
FGNAME LIKE EFRM-FUNC_POOL ,
FUNCNAME LIKE TFDIR-FUNCNAME ,
INCNAME LIKE PROGDIR-NAME ,
INCLUDE LIKE TFDIR-INCLUDE,
OBSOLETE LIKE RODIR-OBSOLETE,
FUNAM LIKE PROGDIR-UNAM ,
FUDAT LIKE PROGDIR-UDAT,
STEXT LIKE TFTIT-STEXT ,
END OF IT_TFDIR.

DATA: YYNAME(128) TYPE C.
DATA: TT(500) OCCURS 0 WITH HEADER LINE.
DATA: RN(72).

DATA: T_ENLFDIR LIKE ENLFDIR OCCURS 0 WITH HEADER LINE.

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:\ABAPCODE\'. "パス
PARAMETERS:STYPE(6) DEFAULT 'TXT'.

PARAMETERS:R1 RADIOBUTTON GROUP R DEFAULT 'X',
R2 RADIOBUTTON GROUP R,
R3 RADIOBUTTON GROUP R.
SELECTION-SCREEN COMMENT /1(30) COMM1.
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.

SELECTION-SCREEN BEGIN OF BLOCK BLK3 WITH FRAME.
PARAMETERS: FUNCAREA LIKE TLIBG-AREA.
SELECT-OPTIONS: FUNCNAME FOR TFDIR-FUNCNAME."汎用モジュール
PARAMETERS: INCLD AS CHECKBOX DEFAULT 'X'. "INCLUDE
SELECTION-SCREEN END OF BLOCK BLK3.

AT SELECTION-SCREEN OUTPUT.
comm1 ='R1:REPORT R2:TABLE R3:FUNCTION MODULE'.

INITIALIZATION .

AT SELECTION-SCREEN.
IF FUNCAREA IS NOT INITIAL.
SELECT * FROM ENLFDIR INTO TABLE T_ENLFDIR WHERE AREA EQ FUNCAREA.
LOOP AT T_ENLFDIR WHERE AREA EQ FUNCAREA.
CLEAR: FUNCNAME.
MOVE: T_ENLFDIR-FUNCNAME TO FUNCNAME-LOW.
MOVE: 'EQ' TO FUNCNAME-OPTION.
MOVE: 'I' TO FUNCNAME-SIGN.
* CHECK FUNCNAME-LOW IN RESTRICT.
APPEND FUNCNAME.
ENDLOOP.
SORT FUNCNAME.
DELETE ADJACENT DUPLICATES FROM FUNCNAME.
CLEAR: FUNCAREA.
ENDIF.

START-OF-SELECTION .
IF R1 = 'X'.
PERFORM GET_DATA.
ENDIF.

IF R2 = 'X'.
IF TABNAME IS INITIAL.
MESSAGE 'テーブル名' TYPE 'I'.
ELSE.
PERFORM GET_TABLE_DATA.
ENDIF.
ENDIF.

IF R3 = 'X'.
IF FUNCNAME IS INITIAL.
MESSAGE '汎用モジュール名' TYPE 'I'.
ELSE.
PERFORM GET_FM_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
AND SPRSL = SY-LANGU.
SORT YTADIR BY OBJ_NAME.

WRITE:/ '開発者','開発クラス','プログラム','プログラム名'.
LOOP AT YTADIR.
IF DOW = 'X'.
REFRESH TT.
RN = YTADIR-OBJ_NAME.
READ REPORT RN INTO TT.

* 禁止文字
REPLACE '/' with '_' into YTADIR-TEXT."/スラッシュ
REPLACE '\' with '_' into YTADIR-TEXT."\バックスラッシュ(円マーク)
REPLACE ':' with '_' into YTADIR-TEXT.":コロン
REPLACE '*' with '_' into YTADIR-TEXT."*アスタリスク
REPLACE '"' with '_' into YTADIR-TEXT."
REPLACE '<' with '_' into YTADIR-TEXT.
REPLACE '>' with '_' into YTADIR-TEXT.
REPLACE '|' with '_' into YTADIR-TEXT."|パイプ
REPLACE '?' with '_' into YTADIR-TEXT."?クエッションマーク

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.

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.

*---------------------------------------------------------------------*
* 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 SY-LANGU.

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

WRITE:/'項目名','PK','データエレメント','タイプ','長さ','小数',
'テーブルチェック','参考テーブル','参照項目','項目テキスト'.
ULINE.
LOOP AT T1.
REFRESH ITAB.
CLEAR YYNAME.

IF DOW = 'X'.
ITAB-FIELD = '項目名'.
ITAB-KEY = 'PK'.
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 = SY-LANGU.
IF SY-SUBRC = 0.
ITAB-TEXT = DD04T-DDTEXT.
ELSE.
CLEAR ITAB-TEXT.
ENDIF.
ELSE.
SELECT SINGLE * FROM DD03T WHERE TABNAME = TAB-TABNAME
AND DDLANGUAGE = SY-LANGU
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'.

* 禁止文字
REPLACE '/' with '_' into T1-DDTEXT."/スラッシュ
REPLACE '\' with '_' into T1-DDTEXT."\バックスラッシュ(円マーク)
REPLACE ':' with '_' into T1-DDTEXT.":コロン
REPLACE '*' with '_' into T1-DDTEXT."*アスタリスク
REPLACE '"' with '_' into T1-DDTEXT."
REPLACE '<' with '_' into T1-DDTEXT.
REPLACE '>' with '_' into T1-DDTEXT.
REPLACE '|' with '_' into T1-DDTEXT."|パイプ
REPLACE '?' with '_' into T1-DDTEXT."?クエッションマーク

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.
*&---------------------------------------------------------------------*
*& FORM GET_FM_DATA 汎用モジュール
*&---------------------------------------------------------------------*
FORM GET_FM_DATA .
DATA: f1(40),f2(40),f3(40) .
SELECT TFDIR~FUNCNAME
TFDIR~PNAME
TFDIR~INCLUDE
TFTIT~STEXT
PROGDIR~NAME
RODIR~OBSOLETE
INTO CORRESPONDING FIELDS OF TABLE IT_TFDIR
FROM TFDIR
INNER JOIN PROGDIR ON TFDIR~PNAME = PROGDIR~NAME AND
PROGDIR~STATE = 'A'
LEFT JOIN TFTIT ON TFDIR~FUNCNAME = TFTIT~FUNCNAME AND
TFTIT~SPRAS = SY-LANGU
LEFT JOIN RODIR ON TFDIR~FUNCNAME = RODIR~OBJECT AND
RODIR~OBJECTTYPE = 'FUNC'
WHERE TFDIR~FUNCNAME IN FUNCNAME.

LOOP AT it_tfdir.
IF it_tfdir-name(1) = '/'.
SPLIT it_tfdir-name AT '/' INTO f1 f2 f3 .
CONCATENATE '/' f2 '/' 'L' f3+4(36) 'U' it_tfdir-include
INTO it_tfdir-incname.
CONCATENATE '/' f2 '/' f3+4(36) INTO it_tfdir-fgname.
ELSE.
CONCATENATE 'L' it_tfdir-name+4(36) 'U' it_tfdir-include
INTO it_tfdir-incname.
it_tfdir-fgname = it_tfdir-name+4(36).
ENDIF.
SELECT SINGLE unam udat INTO (it_tfdir-funam,it_tfdir-fudat)
FROM progdir
WHERE name = it_tfdir-incname .
MODIFY it_tfdir .
ENDLOOP.

WRITE:/ 'プログラム名','汎用グループ','汎用モジュール名','プログラム名','文字','変更者','変更日','テキスト'.
LOOP AT IT_TFDIR.
IF DOW = 'X'.
REFRESH TT.
RN = IT_TFDIR-INCNAME.
READ REPORT RN INTO TT.

* 禁止文字
REPLACE '/' with '_' into IT_TFDIR-STEXT."/スラッシュ
REPLACE '\' with '_' into IT_TFDIR-STEXT."\バックスラッシュ(円マーク)
REPLACE ':' with '_' into IT_TFDIR-STEXT.":コロン
REPLACE '*' with '_' into IT_TFDIR-STEXT."*アスタリスク
REPLACE '"' with '_' into IT_TFDIR-STEXT."
REPLACE '<' with '_' into IT_TFDIR-STEXT.
REPLACE '>' with '_' into IT_TFDIR-STEXT.
REPLACE '|' with '_' into IT_TFDIR-STEXT."|パイプ
REPLACE '?' with '_' into IT_TFDIR-STEXT."?クエッションマーク

CONCATENATE P_DIR IT_TFDIR-FUNCNAME '_' IT_TFDIR-INCNAME
'_' IT_TFDIR-STEXT '.' STYPE
INTO YYNAME.

CALL FUNCTION 'WS_DOWNLOAD'
EXPORTING
FILENAME = YYNAME
FILETYPE = 'ASC'
TABLES
DATA_TAB = TT.

IF SY-SUBRC = 0.
* WRITE:/ IT_TFDIR-NAME,IT_TFDIR-FGNAME,IT_TFDIR-FUNCNAME,IT_TFDIR-INCNAME,IT_TFDIR-INCLUDE,
* IT_TFDIR-OBSOLETE,IT_TFDIR-FUNAM,IT_TFDIR-FUDAT,IT_TFDIR-STEXT.
WRITE:/1(20) IT_TFDIR-FUNCNAME,(30)IT_TFDIR-INCNAME,(40)IT_TFDIR-STEXT.
FORMAT COLOR 5.
WRITE: 'ダウンロードしました'.
FORMAT COLOR OFF.
ELSE.
WRITE:/1(20) IT_TFDIR-FUNCNAME,(30)IT_TFDIR-INCNAME,(40)IT_TFDIR-STEXT.
FORMAT COLOR 4.
WRITE: 'ダウンロード出来ない'.
FORMAT COLOR OFF.

ENDIF.

ELSE.
WRITE:/ IT_TFDIR-NAME,IT_TFDIR-FGNAME,IT_TFDIR-FUNCNAME,IT_TFDIR-INCNAME,IT_TFDIR-INCLUDE,
IT_TFDIR-OBSOLETE,IT_TFDIR-FUNAM,IT_TFDIR-FUDAT,IT_TFDIR-STEXT.
ENDIF.

ENDLOOP.

* INLUCDE ダウンロード----------------------
DATA: FUNCPOOL LIKE SY-REPID.
DATA: INCL LIKE SY-REPID OCCURS 0 WITH HEADER LINE.
DATA: T_COMPO LIKE SCOMPO OCCURS 0 WITH HEADER LINE.
DATA: T_CROSS_REF LIKE CROSS OCCURS 0 WITH HEADER LINE.
DATA: T_INC LIKE D010INC OCCURS 0 WITH HEADER LINE.

FUNCPOOL = IT_TFDIR-NAME.
CALL FUNCTION 'RS_PROGRAM_INDEX'
EXPORTING
PG_NAME = FUNCPOOL
* WITHOUT_TREE = ' '
* IMPORTING
* MESSAGE_CLASS =
TABLES
COMPO = T_COMPO
CROSS_REF = T_CROSS_REF
INC = T_INC
EXCEPTIONS
SYNTAX_ERROR = 1
OTHERS = 2.

LOOP AT T_COMPO.
INCL = T_COMPO-INCL .
ENDLOOP.


SORT T_COMPO BY INCL.
DELETE ADJACENT DUPLICATES FROM T_COMPO COMPARING INCL.

WRITE /'FMのインクルード プログラム'.
LOOP AT T_COMPO.
WRITE:/1(20) T_COMPO-INCL.
IF DOW = 'X' AND INCLD = 'X'.
REFRESH TT.
RN = T_COMPO-INCL.
READ REPORT RN INTO TT.

CONCATENATE P_DIR T_COMPO-INCL '_インクルードプログラム' '.' STYPE
INTO YYNAME.

CALL FUNCTION 'WS_DOWNLOAD'
EXPORTING
FILENAME = YYNAME
FILETYPE = 'ASC'
TABLES
DATA_TAB = TT.

IF SY-SUBRC = 0.
FORMAT COLOR 5.
WRITE: 'ダウンロードしました'.
FORMAT COLOR OFF.
ELSE.
FORMAT COLOR 4.
WRITE: 'ダウンロード出来ない'.
FORMAT COLOR OFF.
ENDIF.
ENDIF.
ENDLOOP.

ENDFORM. " GET_FM_DATA

13 comments:

  1. Hi every one, here every one is sharing such know-how, so it's fastidious to read this website, and I used to visit this blog daily.

    Here is my website :: best buy beats solo

    ReplyDelete
  2. Howdy fantastic blog! Does running a blog such as this require a great
    deal of work? I have no expertise in computer programming
    but I had been hoping to start my own blog in the near future.
    Anyway, if you have any suggestions or techniques for new blog
    owners please share. I know this is off topic nevertheless I simply needed to ask.

    Thanks a lot!

    Check out my page :: http://webvoyancegratuite.blogspot.fr/

    ReplyDelete
  3. Wonderful post however I was wanting to know if you could write a litte more on this topic?
    I'd be very thankful if you could elaborate a little
    bit more. Appreciate it!

    Have a look at my homepage ... nya online casino på nätet; http://nyacasinon2014.webs.com/,

    ReplyDelete