Upload
gbrlmglhs
View
27
Download
10
Embed Size (px)
DESCRIPTION
ABAP Call Transaction e Batch Input
Citation preview
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 1
BATCH-INPUT CALL TRANSACTION
******************************************* Programa Call Transaction* Autor: Marcos Alexandre Martins* Data: 22/09/2004******************************************
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'
EXPORTINGMASK = 'A:\*.*'
CHANGINGFILE_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_PATHFILETYPE = 'ASC'
* HEADLEN = ' '* LINE_EXIT = ' '* TRUNCLEN = ' '* USER_FORM = ' '* USER_PROG = ' '* DAT_D_FORMAT = ' '* IMPORTING
LM-Informtica 2
CALL TRANSACTION
BATCH-INPUT CALL TRANSACTION
* FILELENGTH =TABLES
DATA_TAB = T_UPEXCEPTIONS
CONVERSION_ERROR = 1FILE_OPEN_ERROR = 2FILE_READ_ERROR = 3INVALID_TYPE = 4NO_BATCH = 5UNKNOWN_ERROR = 6INVALID_TABLE_WIDTH = 7GUI_REFUSE_FILETRANSFER = 8CUSTOMER_ERROR = 9OTHERS = 10
.IF SY-SUBRC 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNOWITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " abre_arq
*&---------------------------------------------------------------------**& Form TRATA_ARQ*&---------------------------------------------------------------------** text*----------------------------------------------------------------------** --> p1 text*
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_MODOMESSAGES INTO T_MSGUPDATE 'S'.
LOOP AT T_MSG.MSGNO = T_MSG-MSGNR.
CALL FUNCTION 'WRITE_MESSAGE'EXPORTING
MSGID = T_MSG-MSGID "Id. da mensagemMSGNO = MSGNO "Nmero da mensagemMSGTY = T_MSG-MSGTYP "Tipo de erroMSGV1 = T_MSG-MSGV1 "1 parmetroMSGV2 = T_MSG-MSGV2 "2 parmetroMSGV3 = T_MSG-MSGV3 "3 parmetroMSGV4 = T_MSG-MSGV4 "4 parmetroMSGV5 = ' ' "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 4
CALL TRANSACTION
BATCH-INPUT CALL TRANSACTION
******************************************* Programa Batch - Input* Autor: Marcos Alexandre Martins******************************************
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 arquivoAT 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 5
BATCH-INPUT
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-MSGNOWITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " 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 dadosPERFORM INSERT_LINE USING:'X' 'SAPLSPO1' '0300',' ' 'BDC_OKCODE' '=YES'.
PERFORM BDC_INSERT.
ENDLOOP.
PERFORM BDC_CLOSE_GROUP.
LM-Informtica 6
BATCH-INPUT
BATCH-INPUT CALL TRANSACTION
ENDFORM. " TRATA_ARQ
*&---------------------------------------------------------------------**& Form insert_line*&---------------------------------------------------------------------** 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.
ENDFORM. " insert_line
*&---------------------------------------------------------------------**& Form bdc_open_group*&---------------------------------------------------------------------** text*----------------------------------------------------------------------** --> p1 text*
BATCH-INPUT CALL TRANSACTION
*&---------------------------------------------------------------------**& Form BDC_INSERT*&---------------------------------------------------------------------** text*----------------------------------------------------------------------** --> p1 text*