Documente Academic
Documente Profesional
Documente Cultură
PROGRAMAO DE INTERFACES
NDICE
________________________________________________________________________________ Meta Servios em Informtica 1
Call transaction
Neste mtodo, utilizamos o comando CALL TRANSACTION USING para executar uma transao SAP. Neste caso os dados de batch input no precisam ser armazenados numa sesso para posterior processamento. Em vez disso, todo o processo de batch input executado online durante a execuo do programa. Ambos os mtodos de batch input usam uma estrutura de dados comum para armazenar os dados e as instrues. Essa estrutura a BDCDATA.
Os identificadores das funes que voc precisar chamar para executar a transao.
Se durante a execuo aparecer uma janela pop-up, voc poder obter o nome do programa e nmero da tela pressionando F1 em qualquer campo ou boto da janela. Em cada campo, check box, e radio button de cada tela, pressione F1 (ajuda) e depois clique em Technical info (ou pressione F9). Anote a seguinte informao:
- O nome do campo para batch input - O comprimento e tipo de dado do campo. Voc pode exibir esta informao dando um duplo clique no campo Data element. Encontre o cdigo de a identificao para cada funo (boto ou menu) que voc ter que executar para processar o batch input. Ponha o cursor no boto ou menu enquanto clica o boto esquerdo do mouse. Depois pressione F1. Na janela pop-up window que aparecer clique em Technical info e anote o cdigo mostrado no campo Function. Aps a execuo dos passos acima, voc dever ter anotado as seguintes informaes: Programa SAPMF02 Tela 0100 Campo RF02K-LIFNR RF02K-EKORG RK02K-D0110 Descrio N fornecedor Organizao de compras Check box para mudana de endereo Nome (campo 1) Nome (campo 2) Nome (campo 3) Nome (campo 4) Tamanho 10 4 1 Funo
SAPMF02
0200
35 35 35 35
35 35 35 10 3 16 16 /11
Vamos utilizar 3 performs que devero ser includos entre os eventos START-OFSELECTION e END-OF-SELECTION: Perform initializa Perform monta_bdc Perform submite_bdc Crie o form INITIALIZATION
e insira o comando de abertura do arquivo. Se ocorrer erro na abertura, exiba uma mensagem, seno execute o form PROCESSA_ARQUIVO. Crie o form PROCESSA_ARQUIVO.
Neste form faa a leitura do arquivo dentro de um loop. Para cada registro lido com sucesso, execute os forms monta_bdc e submete_bdc. Crie o form MONTA_BDC.
Este form dever preencher a tabela interna INT_BDC com os dados do arquivo de entrada. Dentro deste form chamaremos mais dois forms: * Comea Tela BDC_TELA, com passagem dos parmetros NOME DO PROGRAMA E N DA TELA. * Insere Campos BDC_CAMPOS, com passagem dos parmetros NOME DO CAMPO e CONTEDO DO CAMPO. Crie os dois forms acima recebendo os parmetros e movendo os dados para a tabela interna INT_BDC.
*----------------------------------------------------------------------* * Program : ZMBDCXX Date : 08/21/96 * * Descrio : Altera endereo de fornecedor Version : 1.0 * *----------------------------------------------------------------------* REPORT ZMBDCXX LINE-SIZE 80 LINE-COUNT 65 MESSAGE-ID ZZ. *----------------------------------------------------------------------* * Internal Tables * *----------------------------------------------------------------------* **** BDC Processing INT_BDC, com a estrutura do batch input BDCDATA. DATA BEGIN OF INT_BDC OCCURS 100. INCLUDE STRUCTURE BDCDATA.
DATA END OF INT_BDC. **** Vendor In File REG_FOR, com os campos que sero alterados. DATA: BEGIN OF REG_FOR, LIFNR LIKE RF02K-LIFNR, EKORG LIKE RF02K-EKORG, NAME1 LIKE LFA1-NAME1, NAME2 LIKE LFA1-NAME2, NAME3 LIKE LFA1-NAME3, NAME4 LIKE LFA1-NAME4, STRAS LIKE LFA1-STRAS, ORT01 LIKE LFA1-ORT01, REGIO LIKE LFA1-REGIO, PSTLZ LIKE LFA1-PSTLZ, LAND1 LIKE LFA1-LAND1, TELF1 LIKE LFA1-TELF1, TELF2 LIKE LFA1-TELF2, END OF REG_FOR.
INT_ERR, para armazenar as mensagens de erro. Dever conter 2 campos: MSG like SY-MSGV1 LIFNR like LFA1-LIFNR
DATA: BEGIN OF INT_ERR OCCURS 50, MSG LIKE SY-MSGV1, LIFNR LIKE LFA1-LIFNR, END OF INT_ERR. *----------------------------------------------------------------------* * Parameters * *----------------------------------------------------------------------* PARAMETERS: P_ARQUIVO(80) TYPE C. "Nome path do arquivo de entrada *----------------------------------------------------------------------* * Main Processing * *----------------------------------------------------------------------* START-OF-SELECTION. PERFORM INITIALIZA. PERFORM MONTA_BDC. PERFORM SUBMIT_BDC. END-OF-SELECTION. PERFORM LISTA_ERROS. *---------------------------------------------------------------------* * Form INITIALIZA * *---------------------------------------------------------------------* * Abre o arquivo de entrada * *---------------------------------------------------------------------* FORM INITIALIZA. * Abre arquivo OPEN DATASET P_INFILE FOR INPUT IN TEXT MODE. * Se o arquivo no abrir, mostra mensagem de erro IF SY-SUBRC <> 0. MESSAGE E999 WITH 'Erro na abertura do arquivo ' P_INFILE. ENDIF. ENDFORM. " INITIALIZA *---------------------------------------------------------------------* * Form PROCESSA_ARQUIVO *
*---------------------------------------------------------------------* * L o arquivo e monta a tabela BDC para cada registro. * * Submete cada transao e salva erros. * *---------------------------------------------------------------------* FORM PROCESSA_ARQUIVO. DO. READ DATASET P_INFILE INTO REC_VEND. IF SY-SUBRC <> 0. EXIT. ENDIF. PERFORM MONTA_BDC. PERFORM SUBMIT_BDC. ENDDO. ENDFORM. " PROCESSA_ARQUIVOS
*---------------------------------------------------------------------* * Form MONTA_BDC * *---------------------------------------------------------------------* * Preenche a BDC table para cada transao. * *---------------------------------------------------------------------* FORM MONTA_BDC. *** Build Screen 100 PERFORM BDC_TELA TABLES INT_BDC USING 'SAPMFO2K' '0100'. PERFORM BDC_CAMPOS TABLES INT_BDC: USING 'RF02K-LIFNR' REG_FOR-LIFNR, USING 'RF02K-EKORG' REG_FOR-EKORG, USING 'RF02K-D0110' 'X'. *** Build Screen 200 PERFORM BDC_TELA TABLES INT_BDC USING 'SAPMFO2K' '0200'. "Fornecedor "Organizao de compras "Marcao do campo endereo
PERFORM BDC_CAMPOS TABLES INT_BDC: USING 'LFA1-NAME1' REG_FOR-NAME1, "Nome 1 USING 'LFA1-NAME2' REG_FOR-NAME2, "Nome 2 USING 'LFA1-NAME3' REG_FOR-NAME3, "Nome 3 USING 'LFA1-NAME4' REG_FOR REC_FOR-NAME4, "Nome 4 USING 'LFA1-STRAS' REG_FOR-STRAS, "Rua USING 'LFA1-ORT01' REG_FOR-ORT01, "Cidade USING 'LFA1-REGIO' REG_FOR-REGIO, "Estado USING 'LFA1-PSTLZ' REG_FOR-PSTLZ, "CEP USING 'LFA1-LAND1' REG_FOR-LAND1, "Pas USING 'LFA1-TELF1' REG_FOR-TELF1, "Telefone 1 USING 'LFA1-TELF2' REG_FOR-TELF2., "Telefone 2 USING 'BDC_OKCODE' '/11' . "Salva ENDFORM. "MONTA_BDC *---------------------------------------------------------------------* * Form SUBMITE_BDC * *---------------------------------------------------------------------* * This form will submit the BDC table using CALL TRANSACTION. * * *---------------------------------------------------------------------* FORM SUBMITE_BDC. CALL TRANSACTION 'MK02' USING INT_BDC MODE 'N'. ou A IF SY-SUBRC <> 0. "If error record vendor and error msg
MOVE SY-MSGV1 TO INT_ERR-MSG. MOVE REC_VEND-LIFNR TO INT_ERR-LIFNR. APPEND INT_ERR. ENDIF. ENDFORM. "SUBMITE_BDC
*---------------------------------------------------------------------* * Form LISTA_ERROS * *---------------------------------------------------------------------* * This form will write out any errors to the screen. * * *---------------------------------------------------------------------* FORM LSTA_ERROS. WRITE 'Vendor Records with Errors!'. WRITE: /, 'VENDOR', 11 'ERROR MESSAGE'. LOOP AT INT_ERROR. WRITE: /, INT_ERROR-LIFNR, 11 INT_ERROR-MSG. ENDLOOP. ENDFORM. "LISTA_ERROS
*---------------------------------------------------------------------* * Form BDC_TELA *---------------------------------------------------------------------* * Pega parmetros e entra cada tela na tabela interna BDC * *---------------------------------------------------------------------* FORM BDC_SCREEN USING P_PROGRAM P_SCREEN. CLEAR INT_BDC. INT_BDC-PROGRAM INT_BDC-DYNPRO INT_BDC-DYNBEGIN APPEND INT_BDC. ENDFORM. *---------------------------------------------------------------------* * Form BDC_CAMPOS *---------------------------------------------------------------------* * Pega parmetros e entra os campos da tela na tabela interna BDC * * table specified for a new field. * *---------------------------------------------------------------------* FORM BDC_FIELD USING P_NAME P_VALUE. CASE P_VALUE. WHEN ' '. "Se valor estiver em branco, no move WHEN OTHERS. "Move valor MOVE P_NAME TO INT_BDC-FNAM. MOVE P_VALUE TO INT_BDC-FVAL. APPEND INT_BDC. ENDCASE. ENDFORM. = P_PROGRAM. = P_SCREEN. = 'X'. "Limpa tabela interna
Quando voc cria uma sesso de batch input, a mesma permanece na fila at que seja executada explicitamente. O processamento da sesso pode ser iniciado de duas maneiras: Um usurio pode executar a sesso on-line, atravs das opes do menu de batch input: System Services Batch Input Voc pode executar a sesso em background submetendo um job que executar o programa RSBDCSUB. possvel coordenar a gerao e a execuo da sesso em background. Este recurso muito utilizado para interfaces peridicas automticas. Voc pode definir jobs para executar em background o seu programa de batch input e o programa RSBDCSUB. Se voc definir o job do programa de batch input como predecessor do RSBDCSUB, o RSBDCSUB ser executado automaticamente quando o job do batch input terminar com sucesso.
O COMMIT WORK indica o fim com successo da transao e da gravao. O LEAVE TO TRANSACTION no pode ser processado no batch input e, consequentemente finaliza a gravao.