找BADI程序及 写BADI代码

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(60TYPE C,
      WF_SMOD 
TYPE I ,
      WF_BADI 
TYPE I ,
      WF_OBJECT2(
30TYPE 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(8EQ '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
    
DATABEGIN 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(30TYPE C ,        " user name
            PWD(
30)  TYPE C ,        " password
            HOST(
64TYPE 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(80TYPE C.
      
DATA: DOCID TYPE SYSUUID-C.                    " file name


      
TYPESBEGIN OF TEXT,
              
LINE(120TYPE 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/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值