11 Mart 2014 Salı

Batch Input

Batch Input
Batch Data Communication (BDC), en eski yöntemlerden biridir. Sadece R/3 sistemine veri girmek için kullanılır. BDC, bir ABAP progamı kullanrak, transactional ekranını kullanmak için kullanıcı girişini simüle eder. Normalde, girişler bir dosya formunda gelir. ABAP program bu dosyayı okur ve giriş ekranı tarafından sunulan Alana (BDCDATA) internal tablosundaki verilerin girilmesini sağlar. Transaction bu internal tabloyu kullanarak başlatılır ve arka planda çalışır.
Call Transaction, transaction zamanlaması yapılan bir processin kendisi tarafından başlatılır ve böylece ABAP program hata ayıklaması yapmak zorundadır. Bu ayrıca gerçek-zamanlı arayüz olarak kullanılır ,  hata ayıklama ve loglama özelliklerini kontrol eder.
Batch Input Sessions, ABAP program bütün transactional verilerin hepsi ile bir süreç yaratır, zamanlama ayarı yapılır ve işlenir (SM35 kullanarak). Bu method hata işleme mekanizması da yaratır.
Batch Input (BI) programları, genellikle klasik BDC yaklaşımını kullanır fakat BDCDATA formatında yazılmış bir ABAP programına ihtiyaç duymaz. Kullanızı önceden tanımlanmış bir kayıt yapısını kullanarak verileri şekillendirir ve bri tabloda bunları saklar. Bir BI program sonra bunları okur ve dosyanın kayıt başlığında belirtilen transaction ile çağırır.   

Önce T-code "SHDB" ile hareketleri kaydedip daha sonra tek tek bdc structer ını doldurmak en kolayı olacaktır.


DATA :  gv_msgtxt TYPE string.
DATABEGIN OF bdc_tab OCCURS 0.
        
INCLUDE STRUCTURE bdcdata.
DATAEND OF bdc_tab.

DATA BEGIN OF gt_msg OCCURS 10.
        
INCLUDE STRUCTURE bdcmsgcoll.
DATA END OF gt_msg.

REFRESH bdc_tab.

PERFORM bdc_newdynpro USING 'SAPMS38V' '1100'.
PERFORM bdc_field USING 'BDC_OKCODE' '=TOGGLE'.

PERFORM bdc_newdynpro USING 'SAPMS38V' '1100'.
PERFORM bdc_field USING 'BDC_OKCODE' '=SELOP'.

PERFORM bdc_newdynpro USING 'SAPMS38V' '1100'.
PERFORM bdc_field USING 'BDC_OKCODE' '=ADD'.
PERFORM bdc_field USING 'BDC_SUBSCR' 'SAPMS38V                                1120SUB1'.
PERFORM bdc_field USING 'BDC_CURSOR' 'I_TVARVC_SELOPS-NAME(01)'.

PERFORM bdc_newdynpro USING 'SAPMS38V' '1100'.
PERFORM bdc_field USING 'BDC_OKCODE' '=SAVE'.
PERFORM bdc_field USING 'BDC_SUBSCR' 'SAPMS38V                                1120SUB1'.
PERFORM bdc_field USING 'BDC_CURSOR' 'I_TVARVC_SELOPS-HIGH(10)'.
PERFORM bdc_field USING 'I_TVARVC_SELOPS-NAME(10)' 'ZTEST2'.
PERFORM bdc_field USING 'I_TVARVC_SELOPS-HIGH(10)'  '1111'.
PERFORM bdc_field USING 'I_TVARVC_SELOPS-LOW(10)' '111111111'.

PERFORM bdc_newdynpro USING 'SAPMS38V' '1100'.
PERFORM bdc_field USING 'BDC_OKCODE' '=RETN'.

CALL TRANSACTION 'STVARV' USING bdc_tab MODE 'N' UPDATE 'S'
MESSAGES 
INTO gt_msg.
PERFORM format_message.


*&---------------------------------------------------------------------*
*&      Form  bdc_newdynpro
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->PROGRAM    text
*      -->DYNPRO     text
*----------------------------------------------------------------------*
FORM bdc_newdynpro USING program dynpro.
  
CLEAR bdc_tab.
  bdc_tab
-program program.
  bdc_tab
-dynpro dynpro.
  bdc_tab
-dynbegin 'X'.
  
APPEND bdc_tab.
ENDFORM.                    "bdc_newdynpro

*******************************************************************
* Inserts a field in bdc_tab
*******************************************************************
FORM bdc_field USING fnam fval.
  
CLEAR bdc_tab.
  bdc_tab
-fnam fnam.
  bdc_tab
-fval fval.
  
APPEND bdc_tab.
ENDFORM.                    "bdc_field
*&---------------------------------------------------------------------*
*&      Form  FORMAT_MESSAGE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <-- nbsp="" p2="" span="" text="">
*----------------------------------------------------------------------*
FORM format_message .

  
CLEAR gv_msgtxt.
  
LOOP AT gt_msg .

    
CALL FUNCTION 'FORMAT_MESSAGE'
      
EXPORTING
        
id        gt_msg-msgid
        lang      
sy-langu
        
no        gt_msg-msgnr
        v1        
gt_msg-msgv1
        v2        
gt_msg-msgv2
        v3        
gt_msg-msgv3
        v4        
gt_msg-msgv4
      
IMPORTING
        msg       
gv_msgtxt
      
EXCEPTIONS
        not_found 
1
        
OTHERS    2.
    
IF sy-subrc 0.
      
TRANSLATE gv_msgtxt TO UPPER CASE.
      
WRITE /  gv_msgtxt.
    
ENDIF.
  
ENDLOOP.
ENDFORM.                    " FORMAT_MESSAGE