Sei sulla pagina 1di 8

BATCH-INPUT

CALL TRANSACTION

O Procedimento CALL TRANSACTION usado para executar uma transao on-line com alimentao de dados simultnea.
Normalmente usada para viabilizar procedimentos contidos em programas onde neles encontram-se as validaes de
entrada.
Por exemplo, imagine um processo que engloba:
emisso de pedido de venda,
gerao de ordem de produo,
separao de matria-prima em estoque,
apontamento de produo,
liberao do produto acabado na expedio,
emisso da nota fiscal de sada
e emisso de boleto bancrio.
Muito bem, este processo tem suas transaes especficas. Em cada transao j existem procedimentos que complementam
esta lista simples. Por exemplo, separar matria-prima em estoque implica em: verificar disponibilidade, emitir solicitao de
compra caso no tenha estoque, atualizar saldo de estoque entre outros processos executados a partir dele.
Agora voc precisa fazer isto acontecer em uma nica tela. Pois desta forma que a empresa necessita que seja feito. Pode
parecer loucura, mas isto algo comum, trata-se de um procedimento que a empresa adotou para agilizar seus processos.
A funo do CALL TRANSACTION isto, oferecer o meio para que executemos uma transao que preenche os campos de
uma tela e ainda clique no boto Salvar.
Estas informaes so armazenadas em um BDC Session. Local adequado para armazenar e descarregar no momento
oportuno as informaes que iro preencher esta transao que est sendo executada.
O programa desenvolvido pela SE38 e pode ser, inclusive, um report comum. A seguir um exemplo de alimentao da
transao MM01.
Normalmente o CALL TRANSACTION ser usado para tarefas ON-LINE, para otimizao de processos. Ou seja,
ele executado no momento em que o comando disparado.
Chamar uma transao uma forma de alimentar (dar carga) em um banco de dados. Imagine que seja
necessrio preencher a tabela de materiais. No uma tabela que armazena materiais. So vrias, mas as
entradas praticamente so a partir de uma transao, a MM01, que por sua vez pode startar outras
transaes durante a sua operao.
Se os dados forem gravados diretamente no banco de dados, muitas das validaes e consistncias feitas no
programa simplesmente sero ignoradas. Desta forma, a maneira como freqentemente os dados so
alimentados tambm passa pela BDC Session. Pode-se usar o CALL TRANSACTION, mas o ideal o processo
de Batch-Input.
A idia neste caso, ter os dados em algum arquivo e rodar a transao com instrues que faam com que
os campos da transao sejam preenchidos e gravados, repetindo este processo para cada registro a ser
adicionado nas tabelas de materiais. Desta forma, obedecendo os critrios de entrada necessrios para o
cadastro de materiais.
A diferena de um CALL TRANSACTION para um procedimento de BATCH-INPUT que este ltimo no
executado no momento em que chamado. Um procedimento de BATCH-INPUT cria uma pasta no servidor
com o contedo do BDC Session e os executa em um outro momento. Quando o servidor no estiver
sobrecarregado, por exemplo.
Para entender,
CALL TRANSACTION: executa uma transao, passa a ela os procedimentos a serem executados, aguarda a
execuo e trata o retorno no momento que o obteve.
BATCH-INPUT: Preenche uma pasta no servidor com os procedimentos necessrios para executar uma
transao, no processamento da pasta a transao chamada e os procedimentos guardados na pasta so
repassados, o programa no aguarda que a execuo seja encerrada, pois muitas vezes sequer tenha
iniciado. O retorno tratado quando todo o processo estiver concludo.

LM-Informtica

BATCH-INPUT

******************************************
* Programa Call Transaction
* Autor: Marcos Alexandre Martins
* Data: 22/09/2004
******************************************

CALL TRANSACTION

CALL
TRANSACTION

REPORT ZMM00134CT .
* Definio PARA CALL TRANSACTION
DATA: T_BDC LIKE BDCDATA OCCURS 0 WITH HEADER LINE,
T_MSG LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.
DATA: MENSG LIKE MESSAGE VALUE IS INITIAL,
MSGNO LIKE SY-MSGNO.
* Definio da tabela interna de UPLOAD
DATA: BEGIN OF T_UP OCCURS 0,
WERKS(4)
TYPE C,
VKORG(4)
TYPE C,
VTWEG(2)
TYPE C,
MAKTX(40)
TYPE C,
MEINS(2)
TYPE C,
MTPOS_MARA(4) TYPE C,
GEWEI(3)
TYPE C,
NORMT(18)
TYPE C,
SKTOF(1)
TYPE C,
MTPOS(4)
TYPE C,
END OF T_UP.
*---------------------------------------------------------* Tela de selecao
*---------------------------------------------------------PARAMETERS: P_PATH LIKE RLGRAP-FILENAME, P_MODO TYPE C DEFAULT 'A'.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_PATH.
CALL FUNCTION 'KD_GET_FILENAME_ON_F4'
EXPORTING
MASK
= 'A:\*.*'
CHANGING
FILE_NAME = P_PATH.
*---------------------------------------------------------* corpo principal
*---------------------------------------------------------START-OF-SELECTION.
PERFORM ABRE_ARQ.
PERFORM TRATA_ARQ.
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*&
Form abre_arq
*&---------------------------------------------------------------------*
FORM ABRE_ARQ.
CALL FUNCTION 'WS_UPLOAD'
EXPORTING
*
CODEPAGE
=''
FILENAME
= P_PATH
FILETYPE
= 'ASC'
*
HEADLEN
=''
*
LINE_EXIT
=''
*
TRUNCLEN
=''
*
USER_FORM
=''
*
USER_PROG
=''
*
DAT_D_FORMAT
=''
*
IMPORTING

LM-Informtica

BATCH-INPUT

CALL TRANSACTION

FILELENGTH
=
TABLES
DATA_TAB
= T_UP
EXCEPTIONS
CONVERSION_ERROR
=1
FILE_OPEN_ERROR
=2
FILE_READ_ERROR
=3
INVALID_TYPE
=4
NO_BATCH
=5
UNKNOWN_ERROR
=6
INVALID_TABLE_WIDTH
=7
GUI_REFUSE_FILETRANSFER
=8
CUSTOMER_ERROR
=9
OTHERS
= 10

CALL
TRANSACTION

.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM.

" abre_arq

*&---------------------------------------------------------------------*
*&
Form TRATA_ARQ
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM TRATA_ARQ.
LOOP AT T_UP.
REFRESH T_BDC.
PERFORM INSERT_LINE USING:
'X' 'SAPLMGMM' '0060',
' ' 'BDC_OKCODE'
'/00',
' ' 'RMMG1-MBRSH'
'C',
' ' 'RMMG1-MTART'
'FERT'.
PERFORM INSERT_LINE USING:
'X' 'SAPLMGMM' '0070',
' ' 'BDC_OKCODE'
'=ENTR',
' ' 'MSICHTAUSW-KZSEL(01)'
'X',
' ' 'MSICHTAUSW-KZSEL(02)'
'X'.
PERFORM INSERT_LINE USING:
'X' 'SAPLMGMM' '4004',
' ' 'BDC_OKCODE'
'/00',
' ' 'MAKT-MAKTX' T_UP-MAKTX,
' ' 'MARA-MEINS' T_UP-MEINS,
' ' 'MARA-MTPOS_MARA' T_UP-MTPOS_MARA,
' ' 'MARA-GEWEI' T_UP-GEWEI.
PERFORM INSERT_LINE USING:
'X' 'SAPLMGMM'
'4004',
' ' 'BDC_OKCODE'
'/00',
' ' 'MAKT-MAKTX' T_UP-MAKTX.
* salva dados

LM-Informtica

PERFORM INSERT_LINE USING:


'X' 'SAPLSPO1'
'0300',
' ' 'BDC_OKCODE'
'=YES'.

BATCH-INPUT

CALL TRANSACTION

* CHAMA TRANSAO MM01 USANDO A TABELA T_BDC CRIADA COM OS DADOS


* ANTERIORES
REFRESH T_MSG.
CALL TRANSACTION 'MM01'
USING T_BDC MODE P_MODO
MESSAGES INTO T_MSG
UPDATE 'S'.

CALL
TRANSACTION

LOOP AT T_MSG.
MSGNO = T_MSG-MSGNR.
CALL FUNCTION 'WRITE_MESSAGE'
EXPORTING
MSGID = T_MSG-MSGID
"Id. da mensagem
MSGNO = MSGNO
"Nmero da mensagem
MSGTY = T_MSG-MSGTYP "Tipo de erro
MSGV1 = T_MSG-MSGV1
"1 parmetro
MSGV2 = T_MSG-MSGV2
"2 parmetro
MSGV3 = T_MSG-MSGV3
"3 parmetro
MSGV4 = T_MSG-MSGV4
"4 parmetro
MSGV5 = ' '
"tabmess-fldname
IMPORTING
*
ERROR
=
MESSG
= MENSG.
*
MSGLN
=
WRITE / MENSG-MSGTX.
ENDLOOP.
ENDLOOP.
ENDFORM.
" TRATA_ARQ
*&---------------------------------------------------------------------*
*&
Form insert_line
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
*
-->P_0133 text
*
-->P_0134 text
*
-->P_0135 text
*----------------------------------------------------------------------*
FORM INSERT_LINE USING U_START TYPE C U_NAME TYPE C U_VALUE.
CLEAR T_BDC.
MOVE U_START TO T_BDC-DYNBEGIN.
IF U_START = 'X'.
MOVE:
U_NAME TO T_BDC-PROGRAM,
U_VALUE TO T_BDC-DYNPRO.
ELSE.
MOVE:
U_NAME TO T_BDC-FNAM,
U_VALUE TO T_BDC-FVAL.
ENDIF.
APPEND T_BDC.

LM-Informtica

BATCH-INPUT

******************************************
* Programa Batch - Input
* Autor: Marcos Alexandre Martins
******************************************

CALL TRANSACTION

BATCH-INPUT

REPORT ZMM00134BI .
* Definio PARA BATCH-INPUT
DATA: T_BDC LIKE BDCDATA OCCURS 0 WITH HEADER LINE,
T_MSG LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.
DATA: MENSG LIKE MESSAGE VALUE IS INITIAL,
MSGNO LIKE SY-MSGNO.
* Definio da tabela interna de UPLOAD
DATA: BEGIN OF T_UP OCCURS 0,
WERKS(4) TYPE C,
VKORG(4) TYPE C,
VTWEG(2) TYPE C,
MAKTX(40) TYPE C,
MEINS(2) TYPE C,
MTPOS_MARA(4) TYPE C,
GEWEI(3) TYPE C,
NORMT(18) TYPE C,
SKTOF(1) TYPE C,
MTPOS(4) TYPE C,
END OF T_UP.
*---------------------------------------------------------* Tela de selecao
*---------------------------------------------------------PARAMETERS: P_PATH LIKE RLGRAP-FILENAME,
P_PASTA LIKE APQI-GROUPID OBLIGATORY.
* Abre path para procura do arquivo
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_PATH.
CALL FUNCTION 'KD_GET_FILENAME_ON_F4'
EXPORTING
MASK
= 'A:\*.*'
CHANGING
FILE_NAME = P_PATH.
*---------------------------------------------------------* corpo principal
*---------------------------------------------------------START-OF-SELECTION.
PERFORM ABRE_ARQ.
PERFORM TRATA_ARQ.
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*&
Form abre_arq
*&---------------------------------------------------------------------*
FORM ABRE_ARQ.
CALL FUNCTION 'WS_UPLOAD'
EXPORTING
*
CODEPAGE
=''
FILENAME
= P_PATH
FILETYPE
= 'ASC'
*
HEADLEN
=''
*
LINE_EXIT
=''
*
TRUNCLEN
=''
*
USER_FORM
=''
*
USER_PROG
=''
*
DAT_D_FORMAT
=''

LM-Informtica

BATCH-INPUT

*
*

CALL TRANSACTION

IMPORTING
FILELENGTH
=
TABLES
DATA_TAB
= T_UP
EXCEPTIONS
CONVERSION_ERROR
=1
FILE_OPEN_ERROR
=2
FILE_READ_ERROR
=3
INVALID_TYPE
=4
NO_BATCH
=5
UNKNOWN_ERROR
=6
INVALID_TABLE_WIDTH
=7
GUI_REFUSE_FILETRANSFER
=8
CUSTOMER_ERROR
=9
OTHERS
= 10
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

ENDFORM.

BATCH-INPUT

" abre_arq

*&---------------------------------------------------------------------*
*&
Form TRATA_ARQ
*&---------------------------------------------------------------------*
FORM TRATA_ARQ.
PERFORM BDC_OPEN_GROUP.
LOOP AT T_UP.
REFRESH T_BDC.
PERFORM INSERT_LINE USING:
'X' 'SAPLMGMM' '0060',
' ' 'BDC_OKCODE'
'/00',
' ' 'RMMG1-MBRSH'
'C',
' ' 'RMMG1-MTART'
'FERT'.
PERFORM INSERT_LINE USING:
'X' 'SAPLMGMM' '0070',
' ' 'BDC_OKCODE'
'=ENTR',
' ' 'MSICHTAUSW-KZSEL(01)'
'X',
' ' 'MSICHTAUSW-KZSEL(02)'
'X'.
PERFORM INSERT_LINE USING:
'X' 'SAPLMGMM' '4004',
' ' 'BDC_OKCODE'
'/00',
' ' 'MAKT-MAKTX' T_UP-MAKTX,
' ' 'MARA-MEINS' T_UP-MEINS,
' ' 'MARA-MTPOS_MARA' T_UP-MTPOS_MARA,
' ' 'MARA-GEWEI' T_UP-GEWEI.
PERFORM INSERT_LINE USING:
'X' 'SAPLMGMM'
'4004',
' ' 'BDC_OKCODE'
'/00',
' ' 'MAKT-MAKTX' T_UP-MAKTX.
*salva dados
PERFORM INSERT_LINE USING:
'X' 'SAPLSPO1'
'0300',
' ' 'BDC_OKCODE'
'=YES'.
PERFORM BDC_INSERT.
ENDLOOP.
PERFORM BDC_CLOSE_GROUP.

LM-Informtica

BATCH-INPUT

ENDFORM.

CALL TRANSACTION

" TRATA_ARQ

*&---------------------------------------------------------------------*
*&
Form insert_line
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
FORM INSERT_LINE USING U_START TYPE C U_NAME TYPE C U_VALUE.

BATCH-INPUT

CLEAR T_BDC.
MOVE U_START TO T_BDC-DYNBEGIN.
IF U_START = 'X'.
MOVE:
U_NAME TO T_BDC-PROGRAM,
U_VALUE TO T_BDC-DYNPRO.
ELSE.
MOVE:
U_NAME TO T_BDC-FNAM,
U_VALUE TO T_BDC-FVAL.
ENDIF.
APPEND T_BDC.
ENDFORM.

" insert_line

*&---------------------------------------------------------------------*
*&
Form bdc_open_group
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM BDC_OPEN_GROUP.
CALL FUNCTION 'BDC_OPEN_GROUP'
EXPORTING
CLIENT
= SY-MANDT
*
DEST
= FILLER8
GROUP
= P_PASTA
*
HOLDDATE
= FILLER8
KEEP
= 'X'
USER
= SY-UNAME
*
RECORD
= FILLER1
* IMPORTING
*
QID
=
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.
ENDFORM.

LM-Informtica

" bdc_open_group

BATCH-INPUT

CALL TRANSACTION

*&---------------------------------------------------------------------*
*&
Form BDC_INSERT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM BDC_INSERT.

BATCH-INPUT

DATA: V_CODE LIKE TSTC-TCODE.


V_CODE = 'MM01'.
CALL FUNCTION 'BDC_INSERT'
EXPORTING
TCODE
= V_CODE
*
POST_LOCAL
= NOVBLOCAL
*
PRINTING
= NOPRINT
TABLES
DYNPROTAB
= T_BDC
EXCEPTIONS
INTERNAL_ERROR
=1
NOT_OPEN
=2
QUEUE_ERROR
=3
TCODE_INVALID
=4
PRINTING_INVALID
=5
POSTING_INVALID
=6
OTHERS
=7
.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM.

" BDC_INSERT

*&---------------------------------------------------------------------*
*&
Form bdc_close_group
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM BDC_CLOSE_GROUP.
CALL FUNCTION 'BDC_CLOSE_GROUP'
EXCEPTIONS
NOT_OPEN
=1
QUEUE_ERROR
=2
OTHERS
=3
.
IF SY-SUBRC = 0.
MESSAGE I368(00) WITH
'PASTA CRIADA COM SUCESSO. PASTA:' P_PASTA.
ENDIF.

LM-Informtica

Potrebbero piacerti anche