Cerca nel blog

domenica 4 ottobre 2015

ABAP – Creazione Batch Input

Creazione Batch Input


Il Batch Input è uno strumento di immissione o modifica massiva di dati su SAP. Esso consiste nella registrazione dei comandi di una transazione in modo tale da simulare l’attività di inserimento dati manuale dell’utente. Questa registrazione sarà poi automaticamente tradotta in codice abap ed utilizzata per effettuare inserimento o modifica di nostri dati in maniera massiva (ad esempio leggendo i dati da un file di input).

Supponiamo di voler creare un batch input relativo alla transazione ABMA (Ammortamento Manuale – Modulo FI-AA Cespiti), per fare ciò si usa  usare la transazione SHDB.

Premere il pulsante “Nuova registrazione”


Inserire il nome della registrazione ad esempio ZAMBA, il codice transazione da registrare, in  questo caso ABMA e premere il pulsante “Avvia Registrazione


Vengono registrate tutte le schermate della transazione AMBA, anche quelle in cui viene richiesta un’operazione da parte dell’utente. Al termine della registrazione, viene visualizzata la seguente schermata:
 

Nelle colonne indicate dal Nr. 1 sono riportati il nome del programma e la dynpro(schermata) richiamata.
Nella colonna indicata dal Nr. 2 sono riportati i nomi  tecnici dei campi presenti nella dynpro richiamata.
Nella colonna indicata dal Nr. 3 sono riportati i valori presenti nei campi al momento della registrazione oppure il codice identificativo del comando eseguito.


A questo punto salvare la registrazione premendo il pulsante “SALVARE”, e verrà visualizzato il messaggio “Registrazione salvata”. Poi cliccare il pulsante “Indietro” per terminare.

Nella schermata successiva, comparirà la nostra registrazione:



Per convertire la registrazione effettuata in un programma , selezionare la riga e premere il pulsante “Programma” , inserire il nome del programma da creare, e clicchiamo su pulsante verde (ok).



Salvare ed attivare il programma.

Trasportare la registrazione in un altro ambiente SAP


ESPORTARE
Nell’ambiente in cui si è creata la registrazione del Batch Input richiamare la transazione:
SE38: RSBDCDAT.
Selezionare l’opzione “Esportare”
Inserire il nome della registrazione effettuare
Ed inserire il percorso ed il nome del file dove copiare la registrazione:
e premere F8.



IMPORTARE
Nell’ambiente in cui si deve copiare la registrazione del Batch Input richiamare la transazione:
SE38: RSBDCDAT.
Selezionare l’opzione “Importare”
Inserire il nome della registrazione effettuare
Ed inserire il percorso ed il nome del file dove copiare la registrazione:
e premere F8.
Andando nella transazione SHDB ritroviamo il batch input importato.

Generazione di una sessione di Batch Input 


Per generare una sessione di Batch Input, con il flag “Mantieni sessione di batch” impostato, bisogna aggiungere il seguente codice prima del richiamo di tutte le dynpro che simulano il batch input:

  PERFORM: open_group. “Questa perform apre la sessione di batch input.
    PERFORM: fill_bdcdata. “Questa perform contiene tutte le dynpro da chiamare
  perform  bdc_insert using 'FB01'.
  PERFORM: close_group. “Questa perform chiude la sessione di batch input.
*&---------------------------------------------------------------------*
*&      Form  OPEN_GROUP
*&---------------------------------------------------------------------*
FORM open_group .

  DATA: lv_usr  TYPE apqi-userid,
        ss_name TYPE apqi-groupid,
  lv_usr = sy-uname.
  ss_name = ‘Z_FB01’

  CALL FUNCTION 'BDC_OPEN_GROUP'
    EXPORTING
      group               = ss_name
      keep                = 'X'
      user                = lv_usr
    EXCEPTIONS
      client_invalid      = 1
      destination_invalid = 2
      group_invalid       = 3
      group_is_locked     = 4
      holddate_invalid    = 5
      internal_error      = 6
      queue_error         = 7
      running             = 8
      system_lock_error   = 9
      user_invalid        = 10
      OTHERS              = 11.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
  CLEAR gv_group.
  gv_group = ss_name.

ENDFORM.                    " OPEN_GROUP


*&---------------------------------------------------------------------*
*&      Form  FILL_BCDDATA
*&---------------------------------------------------------------------*
FORM fill_bdcdata.
************************************************************************
*& E’ un esempio, non si riferisce proprio alla transazione FB01
************************************************************************
  REFRESH bdcdata.

 
PERFORM bdc_dynpro      USING 'SAPMF05R'     '0100'.
  PERFORM bdc_field       USING 'BDC_CURSOR'   'RF05R-AUGBL'.
  PERFORM bdc_field       USING 'BDC_OKCODE'   '=RAGL'.
  PERFORM bdc_field       USING 'RF05R-AUGBL'  wa_datatab-ndoc.
  PERFORM bdc_field       USING 'RF05R-BUKRS'  'XXX'.
  PERFORM bdc_field       USING 'RF05R-GJAHR'   wa_datatab-eser.

ENDFORM.   



*&---------------------------------------------------------------------*
*&      Form  DBC_INSERT
*&---------------------------------------------------------------------*
FORM DBC_INSERT USING TCODE.

CALL FUNCTION 'BDC_INSERT'
         EXPORTING TCODE     = TCODE
         TABLES    DYNPROTAB = BDCDATA.
   If sy-subrc = 0.
      WRITE: / 'BDC_INSERT'(I03),  TCODE,
               'returncode:'(I05),  SY-SUBRC,
               'RECORD:',  SY-INDEX.


   Endif.
  REFRESH BDCDATA.
ENDFORM.

 *&---------------------------------------------------------------------*
*&      Form  CLOSE_GROUP
*&---------------------------------------------------------------------*
FORM close_group .

  CALL FUNCTION 'BDC_CLOSE_GROUP'
    EXCEPTIONS
      not_open    = 1
      queue_error = 2
      OTHERS      = 3.
  IF sy-subrc <> 0.
    MESSAGE 'UNABLE TO CLOSE BDC SESSION !' TYPE 'S' DISPLAY LIKE 'E'.
 
ENDIF.

ENDFORM.  

Eseguire la sessione di Batch Input

Per poter eseguire la sessione di batch input creata in precedenza richiamare la transazione SM35, e selezionare la nostra sessione da eseguire che in questo caso è Z_FB01.


1 commento: