Upload
miguelbv
View
325
Download
32
Embed Size (px)
Citation preview
Documento BI
Page 1
ABAP / BW
Especificador Funcional Victor Dias da Silva
Difusão do Documento
Nome do Documento ABAP - BW
Tema Network System Security
Histórico do Documento:
Versão Data da Revisão Redator
001 25.01.2012 Victor Dias da Silva
Documento BI
Page 2
Índice
1 INTRODUÇÃO 3
1.1 Contexto 3
1.2 Informações 3
1.3 Requisitos mínimos 3
2 CONHECENDO O ABAP 4
2.1 ABAP 4
2.2 Exemplo de Código ABAP 4
2.3 Principais comandos 6
3 ACESSANDO O ABAP NO BW 7
3.1 Transformações 7 3.1.1 Rotina Inicial. 7 3.1.2 Rotina no Campo. 8 3.1.3 Rotina Final. 9
4 DEBUG 11
4.1 Debug 11
4.2 Entendendo um Debug 11
4.3 Ativando o Debug 15
4.4 Informações adicionais do Debug 17
4.5 Debug no BW 17
5 INFORMAÇÕES ADICIONAIS 19
5.1 Programa para DEBUG - ECC 19
5.2 Diferenças SAP/4.6C para o SAP/ECC 20
5.3 Links Uteis 22
Documento BI
Page 3
1 INTRODUÇÃO
1.1 CONTEXTO
O ABAP é utilizado em grande parte do BW para obter e manipular informações, para que estas sejam consistentes e possam atender algumas especificidades na geração de dados.
1.2 INFORMAÇÕES
No BW os principais focos de desenvolvimento são as rotinas dentro das
Transformações (Transformations), reconhecidas pelo símbolo , estas são:
"Rotina Inicial (Start Routine)"
"Rotina no Campo (Routine Field)"
"Rotina Final (End Routine)". Outro ponto de modificação são as “Exits” e os “Enhancements”, e em alguns casos Programas específicos gerados na transação SE38. Estes não feitos dentro de uma transformation, mas seus códigos podem ser acessados através de extratores, variáveis e/ou Cadeias de Processos (Process Chains).
1.3 REQUISITOS MÍNIMOS
Para o entendimento da construção e utilização do ABAP é preciso ter um conhecimento prévio sobre linguagem de programação estruturada ou de alguns termos que serão usados no decorrer deste documento:
Variável: É um objeto capaz de reter e representar um valor ou expressão. Enquanto as variáveis só "existem" em tempo de execução, elas são associadas a “nomes”, chamadas identificadores, durante o tempo de desenvolvimento.
Tabela Interna: São estruturas montadas a partir de campos chaves que serão usados durante a execução do programa, para armazenas os dados de uma seleção ou de um tratamento de dados.
Instruções ABAP: Quase sempre precisamos do uso do HELP (botão F1), assim podemos entender como e porque são usados alguns comandos.
* e “: Representam o uso de comentários no código.
Documento BI
Page 4
2 CONHECENDO O ABAP
2.1 ABAP
ABAP (Advanced Business Application Programming) é uma linguagem de programação de alto nível desenvolvida pela empresa de software SAP. É a principal linguagem utilizada no produto mais conhecido desta empresa, o SAP R/3, um software ERP. O ABAP tem uma sintaxe semelhante ao COBOL. Conforme exemplificado abaixo:
2.2 EXEMPLO DE CÓDIGO ABAP
Documento BI
Page 5
Documento BI
Page 6
2.3 PRINCIPAIS COMANDOS
O código acima descreve um acesso à tabela T005T e recolhe as informações de nome e código dos países. Este é um programa simples criado para os relatórios desenvolvidos no SAP/ECC6 e apenas demonstra alguns dos comandos mais utilizados. Servirá para o bom entendimento dos comandos que usaremos no BW, para eventualmente carregar nossos dados. Comandos mais utilizados em ABAP no BW:
DATA
Este comando irá servir para declarar suas variáveis e os campos que serão parametrizados para a recepção de informações durante a execução do programa. Na declaração usamos o TYPE para definir que tipo terá a variável, isto é, que tipo de informação essa variável estará apta a comportar.
DATA: v_material TYPE mara-matnr. DATA: t_material TYPE ty_material.
TYPES
Quando necessário acessar algumas informações relacionadas, usamos o TYPES para criar uma tabela interna que irá receber nossas informações e armazená-las durante a execução do programa.
TYPES: BEGIN OF ty_material, material TYPE mara-matnr, mat_tex TYPE mara-maktx, END OF ty_material.
SELECT
Usamos o SELECT para obter as informações das tabelas do SAP, informando os campos que serão usados, usamos em sua composição o FROM para informar a tabela da qual extrairemos os dados o INTO para direcionar o resultado e o WHERE para definir as cláusulas de nossa seleção.
SELECT matnr maktx FROM mara INTO TABLE t_mara WHERE matnr > '10000'.
LOOP AT / ENDLOOP
Quando preenchemos a tabela com valores e precisamos adaptar essas informações ou trabalhar esses dados, como por exemplo, escreve-los em um formulário, usamos o LOOP para ler registros linha a linha de nossa tabela.
LOOP AT t_mara. WRITE /: t_mara-matnr '-' t_mara-maktx. ENDLOOP.
IF / ELSE / ENDIF CASE / ENDCASE DO / ENDDO
Estas são formas condicionais usadas em muitas linguagens de programação e funcionam para tratativa de nossas informações ou para o processamento de dados específicos que dependem da necessidade ou do tipo de informação desejada no resultado final.
IF t_mara-matnr > '40000'. WRITE /: 'Inválido'. ELSE. WRITE /: 'Válido'. ENDIF.
É importante conhecer alguns dos camandos ABAP e será normal se deparar com situações com códigos extensos e difíceis de compreender. Uma dica, sempre que não conhecer a instrução ABAP, coloque o cursor sobre esta e aperte F1. Como tudo no SAP, irá trazer uma tela explicativa.
Documento BI
Page 7
3 ACESSANDO O ABAP NO BW
3.1 TRANSFORMAÇÕES
Para as transformações sempre usaremos os mesmos tipos de estruturas / tabelas internas, pois os dados preenchidos nesta etapa sempre estão em uma estrutura genérica standard. Para entender a melhor forma de manipular a informação é preciso conhecer o conceito de quais são as etapas das informações quando transferidas de um ponto para outro. Por exemplo, vemos o fluxo: PSA TRANFORMATION DSO. Então as informações estarão como: PSA Rotina Inicial Rotina nos campos Rotina Final DSO.
3.1.1 Rotina Inicial.
Na Rotina Inicial, usaremos a SOURCE_PACKAGE, são os dados direto do extrator. E podemos ver no código ABAP quais são os campos que fazem parte desta estrutura.
Estes campos são os mesmos que temos na nossa Transformação:
Documento BI
Page 8
Então o próprio BW gera a tabela SOURCE_PACKAGE genérica, que irá conter os dados. Para manipular os dados é sempre recomendável não fazê-lo diretamente na estrutura genérica, use uma estrutura no programa, movendo os dados e no final das modificações preencha a estrutura genérica com as novas informações. Para isso, use o trecho abaixo: DATA: wa_routine TYPE _ty_s_tg_1,
t_routine LIKE STANDARD TABLE OF wa_routine WITH DEFAULT KEY.
t_routine[] = SOURCE_PACKAGE[].
(…)
Crie seu código usando a tabela t_routine.
(…)
SOURCE_PACKAGE[] = t_routine[].
3.1.2 Rotina no Campo.
Na Rotina de campos, não precisamos usar nenhuma estrutura, pois tratamos os registros um por um preenchidos em variáveis standards. Usamos os valores contidos no SOURCE_FIELDS.
Documento BI
Page 9
E terminamos por após preencher o valor da nossa variável, alimentamos o campo RESULT com o valor. (...)
RESULT = t_cperson.
(...)
3.1.3 Rotina Final.
Na Rotina Final, usaremos a RESULT_PACKAGE, São os dados depois de processados na transformação e prestes a serem enviados para a DSO ou CUBO. E também podemos ver no código ABAP quais são os campos que fazem parte desta estrutura.
Documento BI
Page 10
Estes campos são os mesmos que temos na nossa Transformação:
Então o próprio BW gera a tabela RESULT_PACKAGE genérica, que irá conter os dados. Para manipular os dados é sempre recomendável não fazê-lo diretamente na estrutura genérica, use uma estrutura no programa, movendo os dados e no final das modificações preencha a estrutura genérica com as novas informações. Para isso, use o trecho abaixo:
DATA: wa_routine TYPE _ty_s_tg_1,
t_routine LIKE STANDARD TABLE OF wa_routine WITH DEFAULT KEY.
t_routine[] = RESULT_PACKAGE[].
(…)
Crie seu código usando a tabela t_routine.
(…)
RESULT_PACKAGE[] = t_routine[].
Documento BI
Page 11
4 DEBUG
4.1 DEBUG
O DEBUG ou Modo de Depuração é a forma de executar um processo no SAP e examiná-lo durante a execução, podendo verificar como irão se comportar o preenchimento de uma tabela ou variável.
4.2 ENTENDENDO UM DEBUG
Em um programa, normalmente iremos preencher a tela de seleção com as informações com as quais pretendemos executa-lo. Após o preenchimento da tela de seleção, ativamos o DEBUG e executamos o programa. Veja a seguir:
Com a tela preenchida, ativamos o debug:
ENTER.
Clique em executar . A tela abaixo é onde iremos identicar o processo:
Documento BI
Page 12
Para navegar pelo programa usaremos as seguintes teclas ou os botões de navegação:
(F5) ou Navegar as intruções etapa por etapa individualmente.
(F6) ou Navegar um grupo de informações que esteja encadeadas.
(F7) ou Navegar para fora de um grupo de informações encadeadas.
(F8) ou Executar o programa diretamente. Então se continuarmos nosso DEBUG, aperte F5.
Documento BI
Page 13
De um duplo clique sobre o noma da tabela que deseja observar (veja que tabela apareceu na area de valores).
Porém, ainda está vazia. Aperte novamente o F5 para que a seleção preencha a tabela: Se adicionarmos [] no final do nome da tabela, apresenta a quantidade de
registros.
Outro ponto importante é a validação que segue alguns preenchimentos, SY-
SUBRC ele indica se houve sucesso ou não na sua ação. O valor “0” representa sucesso, e geralmente os valores “4” e “8” que houve erro.
Documento BI
Page 14
Continue apertando F5 até preenchermos a segunda tabela e chegarmos no ponto abaixo, de um duplo clique em todos os campos da tabela t_fim:
Agora novamente continue a apertar o F5 e acompanhe enquanto ele preenche os campos da tabela:
Documento BI
Page 15
Execute o ultimo comando de escrita e aperte o F8:
4.3 ATIVANDO O DEBUG
Existe mais de uma forma de ativar o Modo de Depuração:
1- Insira o comando /H em seguida o ENTER para ativa-lo. No local onde colocamos transações inserimos o comando /H:
Pressionamos ENTER e a seguinte mensagem irá aparecer no Rodapé:
2- No código do programa, marque a linha onde deseja que o programa seja
depurado, e clique no ícone . Isso irá marcar a linha conforme abaixo:
Documento BI
Page 16
Então ao executar o programa, ele irá direto para o ponto escolhido.
3- Usando o comando BREAK-POINT.
O cursor irá parar exatamente neste comando, permitindo a depuração do código a partir do ponto indicado.
Documento BI
Page 17
4.4 INFORMAÇÕES ADICIONAIS DO DEBUG
Para o DEBUG acima, foi usado um programa no SAP/ECC e segue no final deste documento o código para copiá-lo e criar seu programa no ECC.
No BW, a forma que mais vamos usar é a 3ª, isto é a instrução BREAK-POINT.
4.5 DEBUG NO BW
Com as informações acima, podemos agora, iniciar o Debug no BW. Este processo irá acontecer em sua maioria nas transformações, onde colocamos nossas rotinas e utilizaremos o comando BREAK-POINT. Porém as outras formas de ativar o depurador podem ser usadas, quando precisamos alterar uma User-Exit ou um Enhancement, para estes usamos as mesmas formas de depuração usadas no ECC. Um ponto interessante no BW, é que podemos escrever nossos códigos dentro das transformações e adicionar o comando BREAK-POINT no decorrer dos nossos códigos, pois, ele não irá travar a execução das cargas. Assim, só acessamos o Modo de Depuração quando optamos por ele. No exemplo abaixo, adicionamos o BREAK-POINT na rotina inicial de uma transformação:
Documento BI
Page 18
Para que o BW abra o depurador e possamos analisar este código, precisamos ir no DTP que irá iniciar a carga e alterar o Modo de Execução:
Após a troca, clicar em “Simular”. A tela do Depurador será aberta no ponto desejado.
Documento BI
Page 19
5 INFORMAÇÕES ADICIONAIS
5.1 PROGRAMA PARA DEBUG - ECC
*&---------------------------------------------------------------------*
*& Report ZTESTE_DEBUG
*&---------------------------------------------------------------------*
REPORT zteste_debug.
*----------------------------------------------------------------------*
* Tabelas
*----------------------------------------------------------------------*
TABLES: mara.
*----------------------------------------------------------------------*
* Tipos
*----------------------------------------------------------------------*
TYPES: BEGIN OF ty_mara,
matnr TYPE mara-matnr, " Nº Material
matkl TYPE mara-matkl, " Grupo de Mercadoria
ersda TYPE mara-ersda, " Data de Criação
meins TYPE mara-meins, " Unidade de Medida
END OF ty_mara,
BEGIN OF ty_makt,
matnr TYPE makt-matnr, " Nº Material
maktx TYPE makt-maktx, " Descrição do Material
END OF ty_makt,
BEGIN OF ty_fim,
matnr TYPE mara-matnr, " Nº Material
matkl TYPE mara-matkl, " Grupo de Mercadoria
ersda TYPE mara-ersda, " Data de Criação
meins TYPE mara-meins, " Unidade de Medida
maktx TYPE makt-maktx, " Descrição do Material
END OF ty_fim.
*----------------------------------------------------------------------*
* Tabelas Internas e Estruturas
*----------------------------------------------------------------------*
DATA: t_mara TYPE TABLE OF ty_mara WITH HEADER LINE, "Tab para material
t_makt TYPE TABLE OF ty_makt WITH HEADER LINE, "Tab para texto mat
t_fim TYPE TABLE OF ty_fim WITH HEADER LINE. "Tab de Apresentação
*----------------------------------------------------------------------*
* Variaveis e Constantes
*----------------------------------------------------------------------*
CONSTANTS: c_pt(2) TYPE c VALUE 'PT'. " Valor para idioma PT
DATA: v_idioma TYPE makt-spras. " Verificação do Idioma escolhido
*----------------------------------------------------------------------*
* Tela de Seleção
*----------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECT-OPTIONS: so_mat FOR mara-matnr OBLIGATORY.
PARAMETERS: p_spa TYPE makt-spras.
SELECTION-SCREEN END OF BLOCK b1.
Documento BI
Page 20
*----------------------------------------------------------------------*
* Seleção dos dados
*----------------------------------------------------------------------*
START-OF-SELECTION.
SELECT matnr matkl ersda meins
FROM mara
INTO TABLE t_mara
WHERE matnr IN so_mat.
IF sy-subrc = 0.
SORT t_mara BY matnr.
IF p_spa IS INITIAL.
v_idioma = c_pt.
ELSE.
v_idioma = p_spa.
ENDIF.
SELECT matnr maktx
FROM makt
INTO TABLE t_makt
FOR ALL ENTRIES IN t_mara
WHERE matnr = t_mara-matnr
AND spras = v_idioma.
IF sy-subrc = 0.
SORT t_makt BY matnr.
ENDIF.
ENDIF.
*----------------------------------------------------------------------*
* Preencher a tabela
*----------------------------------------------------------------------*
END-OF-SELECTION.
LOOP AT t_mara.
READ TABLE t_makt WITH KEY t_mara-matnr.
IF sy-subrc = 0.
t_fim-matnr = t_mara-matnr.
t_fim-matkl = t_mara-matkl.
t_fim-ersda = t_mara-ersda.
t_fim-meins = t_mara-meins.
t_fim-maktx = t_makt-maktx.
APPEND t_fim.
ENDIF.
WRITE /: t_fim.
ENDLOOP.
5.2 DIFERENÇAS SAP/4.6C PARA O SAP/ECC
Uma grande diferença que poderão encontrar é que alguns clientes ainda não há o ECC então as telas, os códigos e o Modo de Depuração ficam com aparências diferentes. No código fonte, podemos ver a diferença nos detalhes.
Documento BI
Page 21
No SAP/4.6C, o código era todo escrito em preto e os comentários ficam destacados em azul (os comentários são as informações que estão precedidas do * (asterisco) ou “ (aspas duplas)).
Já no editor novo, no SAP/ECC ele apresenta melhores características, onde os comandos ficam destacados em azul, os comentários em cinza, os números em azul claro e os textos (Hard-Codes) em verdes.
No Modo de Depuração, o modo de trabalhar com as informações fcaram mais detalhados, porém ainda seguem o mesmo princípio básico e os mesmos comandos.
Documento BI
Page 22
Tela de Debug clássico 4.6C Tela de Debug ECC
5.3 LINKS UTEIS
http://wiki.sdn.sap.com/wiki/display/BI/ABAP+in+BW
http://scn.sap.com/welcome
https://websmp209.sap-ag.de/~SAPIDP/002006825000000234912001E
http://www.netviewer.com/sap-ags/en/