找BADI程序:
*&---------------------------------------------------------------------*
*& Report Z_EXIT_FIND
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT Z_EXIT_FIND NO STANDARD PAGE HEADING.
TABLES: TSTC,
TADIR,
MODSAPT,
MODACT,
TRDIR,
TFDIR,
ENLFDIR,
SXS_ATTRT,
TSTCT.
DATA ITAB LIKE TADIR OCCURS 0 WITH HEADER LINE.
DATA FIELD(30).
DATA V_DEVCLASS LIKE TADIR-DEVCLASS.
DATA WA_TADIR TYPE TADIR.
*
PARAMETERS: P_TCODE LIKE TSTC-TCODE,
P_PGMNA LIKE TSTC-PGMNA .
*
START-OF-SELECTION.
IF NOT P_TCODE IS INITIAL.
SELECT SINGLE * FROM TSTC WHERE TCODE EQ P_TCODE.
ELSEIF NOT P_PGMNA IS INITIAL.
TSTC-PGMNA = P_PGMNA.
ENDIF.
IF SY-SUBRC EQ 0.
SELECT SINGLE * FROM TADIR
WHERE PGMID = 'R3TR'
AND OBJECT = 'PROG'
AND OBJ_NAME = TSTC-PGMNA.
MOVE : TADIR-DEVCLASS TO V_DEVCLASS.
IF SY-SUBRC NE 0.
SELECT SINGLE * FROM TRDIR
WHERE NAME = TSTC-PGMNA.
IF TRDIR-SUBC EQ 'F'.
SELECT SINGLE * FROM TFDIR
WHERE PNAME = TSTC-PGMNA.
SELECT SINGLE * FROM ENLFDIR
WHERE FUNCNAME = TFDIR-FUNCNAME.
SELECT SINGLE * FROM TADIR
WHERE PGMID = 'R3TR'
AND OBJECT = 'FUGR'
AND OBJ_NAME EQ ENLFDIR-AREA.
MOVE : TADIR-DEVCLASS TO V_DEVCLASS.
ENDIF.
ENDIF.
SELECT * FROM TADIR INTO TABLE ITAB WHERE PGMID = 'R3TR' AND
OBJECT IN ('SMOD', 'SXSD') AND
DEVCLASS = V_DEVCLASS.
SELECT SINGLE * FROM TSTCT WHERE SPRSL EQ SY-LANGU AND
TCODE EQ P_TCODE.
FORMAT COLOR COL_POSITIVE INTENSIFIED OFF.
WRITE:/(19) 'Transaction Code - ',
20(20) P_TCODE,
45(50) TSTCT-TTEXT.
SKIP.
IF NOT ITAB[] IS INITIAL.
WRITE:/(105) SY-ULINE.
FORMAT COLOR COL_HEADING INTENSIFIED ON.
SORT ITAB BY OBJECT.
DATA : WF_TXT(60) TYPE C,
WF_SMOD TYPE I ,
WF_BADI TYPE I ,
WF_OBJECT2(30) TYPE C.
CLEAR : WF_SMOD, WF_BADI , WF_OBJECT2.
LOOP AT ITAB INTO WA_TADIR.
AT FIRST.
FORMAT COLOR COL_HEADING INTENSIFIED ON.
WRITE:/1 SY-VLINE,
2 'Enhancement/ Business Add-in',
41 SY-VLINE ,
42 'Description',
105 SY-VLINE.
WRITE:/(105) SY-ULINE.
ENDAT.
CLEAR WF_TXT.
AT NEW OBJECT.
IF WA_TADIR-OBJECT = 'SMOD'.
WF_OBJECT2 = 'Enhancement' .
ELSEIF WA_TADIR-OBJECT = 'SXSD'.
WF_OBJECT2 = ' Business Add-in'.
ENDIF.
FORMAT COLOR COL_GROUP INTENSIFIED ON.
WRITE:/1 SY-VLINE,
2 WF_OBJECT2,
105 SY-VLINE.
ENDAT.
CASE WA_TADIR-OBJECT.
WHEN 'SMOD'.
WF_SMOD = WF_SMOD + 1.
SELECT SINGLE MODTEXT INTO WF_TXT
FROM MODSAPT
WHERE SPRSL = SY-LANGU
AND NAME = WA_TADIR-OBJ_NAME.
FORMAT COLOR COL_NORMAL INTENSIFIED OFF.
WHEN 'SXSD'.
* For BADis
WF_BADI = WF_BADI + 1 .
SELECT SINGLE TEXT INTO WF_TXT
FROM SXS_ATTRT
WHERE SPRSL = SY-LANGU
AND EXIT_NAME = WA_TADIR-OBJ_NAME.
FORMAT COLOR COL_NORMAL INTENSIFIED ON.
ENDCASE.
WRITE:/1 SY-VLINE,
2 WA_TADIR-OBJ_NAME HOTSPOT ON,
41 SY-VLINE ,
42 WF_TXT,
105 SY-VLINE.
AT END OF OBJECT.
WRITE : /(105) SY-ULINE.
ENDAT.
ENDLOOP.
WRITE:/(105) SY-ULINE.
SKIP.
FORMAT COLOR COL_TOTAL INTENSIFIED ON.
WRITE:/ 'No.of Exits:' , WF_SMOD.
WRITE:/ 'No.of BADis:' , WF_BADI.
ELSE.
FORMAT COLOR COL_NEGATIVE INTENSIFIED ON.
WRITE:/(105) 'No userexits or BADis exist'.
ENDIF.
ELSE.
FORMAT COLOR COL_NEGATIVE INTENSIFIED ON.
WRITE:/(105) 'Transaction does not exist'.
ENDIF.
*
AT LINE-SELECTION.
DATA WF_OBJECT TYPE TADIR-OBJECT.
CLEAR WF_OBJECT.
GET CURSOR FIELD FIELD.
CHECK FIELD(8) EQ 'WA_TADIR'.
READ TABLE ITAB WITH KEY OBJ_NAME = SY-LISEL+1(20).
MOVE ITAB-OBJECT TO WF_OBJECT.
CASE WF_OBJECT.
WHEN 'SMOD'.
SET PARAMETER ID 'MON' FIELD SY-LISEL+1(10).
CALL TRANSACTION 'SMOD' AND SKIP FIRST SCREEN.
WHEN 'SXSD'.
SET PARAMETER ID 'EXN' FIELD SY-LISEL+1(20).
CALL TRANSACTION 'SE18' AND SKIP FIRST SCREEN.
ENDCASE.
BAID 程序:
IF_EX_ME_PURCHDOC_POSTED~POSTED :
METHOD IF_EX_ME_PURCHDOC_POSTED~POSTED.
**>>> 20091015
* for ePR & ePO system
* function: generate txt file when creating purchase order.
* BREAK-POINT.
IF SY-TCODE = 'ME21N' OR SY-TCODE = 'ME59' OR SY-TCODE = 'ME59N'.
* structure & internal table for exporting data
DATA: BEGIN OF WA,
EBELN(12), " TYPE eket-eblen, PO number
EBELP(7), " TYPE eket-eblep, PO item
BANFN(12), " TYPE eket-banfn, PR number
BNFPO(7), " TYPE eket-bnfpo, PR item
END OF WA.
DATA ITAB LIKE TABLE OF WA.
DATA WA_EKPO TYPE UEKPO.
DATA WA_EKET TYPE UEKET.
* append PO data
CLEAR: WA, WA_EKPO.
LOOP AT IM_EKPO INTO WA_EKPO.
IF WA_EKPO-WERKS = '6000'.
CONTINUE.
ENDIF.
CLEAR WA.
WA-EBELN = IM_EKKO-EBELN.
WA-EBELP = WA_EKPO-EBELP.
* append PR data
CLEAR WA_EKET.
READ TABLE IM_EKET INTO WA_EKET WITH KEY EBELP = WA_EKPO-EBELP BINARY SEARCH.
IF SY-SUBRC = 0.
* just PO which convert by PR will be processed.
IF WA_EKET-BANFN = ''.
CONTINUE.
ENDIF.
*
WA-BANFN = WA_EKET-BANFN.
WA-BNFPO = WA_EKET-BNFPO.
*
APPEND WA TO ITAB.
ENDIF.
*
CLEAR: WA, WA_EKPO.
ENDLOOP.
* Check interanl table has records or not
IF ITAB[] IS NOT INITIAL.
* in order to keep leading zero, need convert internal table into CSV format
TYPE-POOLS TRUXS.
DATA: IT_ITEM TYPE TRUXS_T_TEXT_DATA,
WA_ITEM LIKE LINE OF IT_ITEM.
* append header
CLEAR WA_ITEM.
CONCATENATE 'PO number' 'Item' 'PR Number' 'Item'
INTO WA_ITEM SEPARATED BY '!'.
APPEND WA_ITEM TO IT_ITEM.
* process item
CLEAR WA.
LOOP AT ITAB INTO WA.
* condense variants
CONDENSE: WA-EBELN, WA-EBELP, WA-BANFN, WA-BNFPO.
* join all variants separated by '!'
CLEAR WA_ITEM.
CONCATENATE WA-EBELN WA-EBELP WA-BANFN WA-BNFPO INTO WA_ITEM SEPARATED BY '!'.
* append data
APPEND WA_ITEM TO IT_ITEM.
*
CLEAR WA.
ENDLOOP.
******************* Way 1, send txt file to remort server *******************
* Just front-end can use function GUI_DOWNLOAD, so we use FTP instead
* DATA: fullpath TYPE string, " path
* filetype TYPE char10, " file type, like ASC / DAT ...
* filename TYPE string. " filename
*
* CLEAR: fullpath, filetype, filename.
* CONCATENATE sy-datum sy-uzeit INTO filename. " file name
* CONCATENATE '\\Prctest2\Programs\SAP\PO\' filename '.TXT' INTO fullpath . " Path
* filetype = 'ASC'.
** download internal table to remort server via function module "GUI_DOWNLOAD"
* CALL FUNCTION 'GUI_DOWNLOAD'
* EXPORTING
* filename = fullpath
* filetype = filetype
* write_field_separator = 'X'
** codepage = '8300'
* write_lf = 'X'
* write_bom = 'X'
* trunc_trailing_blanks_eol = 'X'
* TABLES
* data_tab = it_item " file item
* 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.
* MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
* WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
* ENDIF.
******************* Way 2, send txt file to FTP *******************
DATA: USER(30) TYPE C , " user name
PWD(30) TYPE C , " password
HOST(64) TYPE C . " host
DATA: HDL TYPE I,
KEY TYPE I VALUE 26101957,
BLOB_LENGTH TYPE I,
SLEN TYPE I,
ERROR,
DEST TYPE RFCDES-RFCDEST VALUE 'SAPFTP'.
* both PRD & DEV
* dynamic path
IF SY-MANDT = '800'.
USER = 'eprftp'.
PWD = 'eprftp'.
HOST = '172.17.1.18'. " PRD (\\prcfooktin5)
ELSE.
USER = 'ftppub'.
PWD = '12345'.
HOST = '172.17.1.20'. " DEV (\\Prctest2)
ENDIF.
* backgroud execute
IF SY-BATCH = 'X'.
DEST = 'SAPFTPA'. " 服务器的用 SAPFTPA 这一个值
ENDIF.
*
DATA: CMD(80) TYPE C.
DATA: DOCID TYPE SYSUUID-C. " file name
TYPES: BEGIN OF TEXT,
LINE(120) TYPE C,
END OF TEXT.
DATA: RESULT TYPE TABLE OF TEXT.
*
SET EXTENDED CHECK OFF.
ERROR = 0.
* convert password
SLEN = STRLEN( PWD ).
CALL FUNCTION 'HTTP_SCRAMBLE'
EXPORTING
SOURCE = PWD
SOURCELEN = SLEN
KEY = KEY
IMPORTING
DESTINATION = PWD.
* Connect to server
CALL FUNCTION 'FTP_CONNECT'
EXPORTING
USER = USER
PASSWORD = PWD
HOST = HOST
RFC_DESTINATION = DEST
IMPORTING
HANDLE = HDL.
* entry related path
CLEAR CMD.
*
CMD = 'cd po'.
*
REFRESH RESULT.
CALL FUNCTION 'FTP_COMMAND'
EXPORTING
HANDLE = HDL
COMMAND = CMD
TABLES
DATA = RESULT
EXCEPTIONS
COMMAND_ERROR = 1
TCPIP_ERROR = 2.
* file type setting
REFRESH RESULT.
CALL FUNCTION 'FTP_COMMAND'
EXPORTING
HANDLE = HDL
COMMAND = 'ascii'
TABLES
DATA = RESULT
EXCEPTIONS
TCPIP_ERROR = 1
COMMAND_ERROR = 2
DATA_ERROR = 3.
* 20091204 Sam
* file name overlap
WAIT UP TO 1 SECONDS. "20091204 Sam
* transfer file to FTP
CLEAR DOCID.
CONCATENATE SY-DATUM SY-UZEIT '.txt' INTO DOCID.
*
CALL FUNCTION 'FTP_R3_TO_SERVER'
EXPORTING
HANDLE = HDL
FNAME = DOCID
CHARACTER_MODE = 'X'
TABLES
TEXT = IT_ITEM.
* Disconnect
CALL FUNCTION 'FTP_DISCONNECT'
EXPORTING
HANDLE = HDL.
ENDIF.
ENDIF.
ENDMETHOD.
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10339719/viewspace-627189/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/10339719/viewspace-627189/