Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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
BATCH-INPUT
CALL TRANSACTION
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
" 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