8
BATCH-INPUT CALL TRANSACTION O Procedimento CALL TRANSACTION é usado para executar uma transação on-line com alimentação de dados simultânea. Normalmente é usada para viabilizar procedimentos contidos em programas onde neles encontram-se as validações de entrada. Por exemplo, imagine um processo que engloba: emissão de pedido de venda, geração de ordem de produção, separação de matéria-prima em estoque, apontamento de produção, liberação do produto acabado na expedição, emissão da nota fiscal de saída e emissão de boleto bancário. Muito bem, este processo tem suas transações específicas. Em cada transação já existem procedimentos que complementam esta lista simples. Por exemplo, separar matéria-prima em estoque implica em: verificar disponibilidade, emitir solicitação de compra caso não 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 função do CALL TRANSACTION é isto, oferecer o meio para que executemos uma transação que preenche os campos de uma tela e ainda clique no botão Salvar. Estas informações são armazenadas em um BDC Session. Local adequado para armazenar e descarregar no momento oportuno as informações que irão preencher esta transação que está sendo executada. O programa é desenvolvido pela SE38 e pode ser, inclusive, um report comum. A seguir um exemplo de alimentação da transação MM01. Normalmente o CALL TRANSACTION será usado para tarefas ON-LINE, para otimização de processos. Ou seja, ele é executado no momento em que o comando é disparado. Chamar uma transação é uma forma de alimentar (dar carga) em um banco de dados. Imagine que seja necessário preencher a tabela de materiais. Não é uma tabela que armazena materiais. São várias, mas as entradas praticamente são a partir de uma transação, a MM01, que por sua vez pode startar outras transações durante a sua operação. Se os dados forem gravados diretamente no banco de dados, muitas das validações e consistências feitas no programa simplesmente serão ignoradas. Desta forma, a maneira como freqüentemente os dados são alimentados também passa pela BDC Session. Pode-se usar o CALL TRANSACTION, mas o ideal é o processo de Batch-Input. A idéia neste caso, é ter os dados em algum arquivo e rodar a transação com instruções que façam com que os campos da transação sejam preenchidos e gravados, repetindo este processo para cada registro a ser adicionado nas tabelas de materiais. Desta forma, obedecendo os critérios de entrada necessários para o cadastro de materiais. A diferença de um CALL TRANSACTION para um procedimento de BATCH-INPUT é que este último não é executado no momento em que é chamado. Um procedimento de BATCH-INPUT cria uma pasta no servidor com o conteúdo do BDC Session e os executa em um outro momento. Quando o servidor não estiver sobrecarregado, por exemplo. Para entender, CALL TRANSACTION: executa uma transação, passa a ela os procedimentos a serem executados, aguarda a execução e trata o retorno no momento que o obteve. BATCH-INPUT: Preenche uma pasta no servidor com os procedimentos necessários para executar uma transação, no processamento da pasta a transação é chamada e os procedimentos guardados na pasta são repassados, o programa não aguarda que a execução seja encerrada, pois muitas vezes sequer tenha iniciado. O retorno é tratado quando todo o processo estiver concluído. LM-Informática 1

ABAP Call Transaction e Batch Input

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*