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.
DATA: BEGIN OF bdc_tab OCCURS 0.
        
INCLUDE STRUCTURE bdcdata.
DATA: END 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