Pular para o conteúdo
Início » O que é ABAP

O que é ABAP

SAP-ABAP

O que é SAP ABAP

ABAP ( Advanced Business Application Programming ) é uma linguagem de programação desenvolvida pela SAP para o desenvolvimento de aplicativos de negócios no ambiente SAP. É a principal linguagem utilizada no produto SAP R/3, um software ERP. O ABAP tem uma sintaxe semelhante ao COBOL.
ABAP destina-se a manipular tarefas comerciais específicas (tais como processamento de dados em massa, exibição de moeda específica e capacidade para múltiplos idiomas).
ABAP foi projetada tendo por base um desenvolvimento de diálogo de usuário dentro de um sistema R/3 distribuído. Os desenvolvedores não precisam se preocupar com quaisquer problemas de comunicação ou de distribuição entre os diferentes níveis. Trabalhando com a base SAP, os programas são quase totalmente portáteis.
A linguagem ABAP contém uma definição especial de comando denominada Open SQL para acesso ao banco de dados. As aplicações ABAP podem ser desenvolvidas de modo eficiente em ambiente de equipe.
O ABAP Workbench contém várias ferramentas que permitem a edição de objetos específicos do Repository que representam um ciclo total de software. Os mais importantes são:
 ABAP Editor                  para escrita e edição de códigos de programa
 ABAP Dictionary          para edição de tabelas e outros objetos do ABAP Dictionary (veja ABAP Dictionary)
 Menu Painter                para desenho de interface de usuário (barra de menu, barra de ferramentas standard, barra de ferramentas da aplicação) (veja Diálogos-Interfaces)
 Screen Painter              para desenho de telas para diálogos de usuário (veja Diálogos-Telas)
 Function Builder          para programação de módulos de função (sub-rotinas, com interface fixa, que estão disponíveis em todo o sistema) (veja Modularização-Módulos de Função)
A SAP criou o Repository Browser para que o processo de desenvolvimento seja mais eficiente e fique mais integrado ao ambiente do ABAP Workbench, com todas as suas inúmeras ferramentas.
Os objetos do Repository estão organizados hierarquicamente:
Um componente de aplicação compõe-se de múltiplas classes de desenvolvimento
Uma classe de desenvolvimento pode conter várias categorias diferentes de objetos do Repository: programas, grupos de função, objetos do ABAP Dictionary …
Diferentes categorias de objeto podem compor os objetos do Repository:
programas podem ser compostos de: dados, categorias, campos, eventos globais, etc. …
grupos de função podem ser compostos de: dados, módulos de função globais, etc. …

Conceitos

MANDANTE – Em uma mesma máquina pode-se Ter mais de um mandante ( client ) com o R/3, Trata-se uma divisão lógica de informações, num mesmo espaço físico, com o tempo irá se perceber que muitas coisas são dependentes de mandantes e outras não. Por exemplo o primeiro campo de 95 % das tabelas é o campo mandante, logo, quando nos logamos em um mandante ‘n’, não iremos acessar as informações desta tabela armazenadas para o mandante ‘n+1’. Por outro lado os programas desenvolvidos em uma máquina irão estar disponíveis para todos os mandantes.
TRANSAÇÃO – São códigos com no máximo 4 caracteres, os quais estão relacionados com programas on-line ( Relatórios, Batch input, geração de arquivo texto etc… ), módulos de diálogo ou sub-menus. Além de agilizar a chegada ao programa pretendido, são a base para a montagem dos perfis de usuários finais. (Uma vez dominadas, muitas pessoas acabam digitando a transação ao invés de percorrer o Menu ).
ABAP/4 WORKBENCH – ( Transação S001 ) Ambiente de desenvolvimento, onde se cria/altera dicionários de dados, programas, funções, Menus, etc … ABAP -> Advanced Business Application Programming.
IMG ou CUSTOMIZING – Parametrização básica de todo o ambiente funcional do SAP, como Empresas, Estruturas de Empreendimentos, Plantas das Fábricas, Bancos, Moedas, etc …
CLASSE DE DESENVOLVIMENTO – Ou development Class, trata-se da forma a qual o programa, o dicionário de dados, a transação etc.. serão gravadas para o R/3, ou seja normalmente sugere-se gerá-los em Objeto Local ( $TMP ), para futuramente ( depois de testes ) deslocá-los para uma classe de desenvolvimento possibilitando-se o transporte deste objeto para outras máquinas.
REQUEST – Sempre que um objeto estiver em uma classe de desenvolvimento diferente de $TMP, todas as alterações deste precisarão de um request, o qual será transportados para outras máquinas mantendo-se assim a integridade.
PROGRAMAS ON-LINE – Trata-se dos programas de manipulação de dados, na maioria das vezes somente para extração em arquivo texto, ou relatório. Também são programas on-line, os Batch Inputs (os quais alteram a base por executar transações ), mas principalmente divergem dos módulos de diálogo ( Módulo Pool ).
MODULE POOL – São a grande maioria de programas que manipulam telas e fazem manutenção de dados ( Standard ) tipo Inclusão, Alteração e Exclusão. Possui alguns conceitos novos tipo PBO e PAI, os quais serão explanados mais adiante.
BATCH INPUT – São programas que executam de forma automática ( todos os registros de um arquivo texto por exemplo ), qualquer transação do R3.
VARIANTES – São valores fixo pré-definidos, para qualquer tela de seleção de parâmetros de programas, ou seja, quando um usuário sempre informa os mesmos dados, ou para execução de um job. Difere do perfil de usuário > Manutenção de dados, o qual fixa dados para qualquer tela, para um usuário.
STATUS – Indica qual a transação, nome do programa, tela e outras informações, a qual o processo em questão se refere.
CLASSE DE MENSAGENS – Divisão física das Mensagens de erros e/ou sucessos para os diversos módulos e sub-divisões.
ANÁLISE DE DUMPS – Normalmente são gerados dumps, quando se ocorre um erro não previsto, tipo “Zero Divide”. Caminho para análise de dumps gerados: Ferramentas > Administração > Monitoramento > Análise Dump

Dicionário de Dados

O ABAP Dictionary é um componente ativo e faz parte integrante do ABAP Workbench. Quaisquer modificações feitas no Dictionary tornam-se imediatamente efetivas nos respectivos programas ABAP e suas telas.
A base para tal é a natureza interpretativa dos sistemas R/3. O interpretador não atua diretamente no código original de um programa ou tela ABAP, mas em vez disso interpreta uma representação internamente gerada. Sempre que são feitas modificações no ABAP Dictionary, a geração posterior e automática dessa representação interna garante que os interpretadores estejam sempre trabalhando com os dados mais atualizados.
Tabelas, domínios e elementos de dados constituem os objetos básicos de definição de dados do ABAP Dictionary. Os domínios descrevem os atributos técnicos dos campos de tabela (por exemplo, categoria ou comprimento de campo) e os elementos de dados contêm a definição semântica (por exempo, uma descrição breve).
Os campos não são objetos independentes e podem ser atualizados apenas dentro das tabelas, pois pressupõem a existência de um elemento de dados. Um elemento de dados pressupõe a existência de um domínio. Os domínios podem ser definidos sem referência adicional a outros objetos do Dictionary.
No ABAP Dictionary, duas categorias de objetos são usadas com a finalidade de definir dados, ou seja, domínios técnicos (conhecidos como domínios do sistema R/3) e domínios semânticos (conhecidos como elementos de dados do sistema R/3).
O domínio é o objeto central usado para descrever os atributos de um business object. Descreve um intervalo de valor de um campo o qual é definido pela especificação de atributos formais, tais como, formato e comprimento externos e pela especificação de valores fixos ou de uma tabela de valores.
O elemento de dados é o objeto semântico. Descreve exatamente a finalidade de um domínio em uma opção comercial específica para os campos que dela dependem. Por exemplo, os campos das tabelas FORCURAM (tabela SBOOK) e PRICE (tabela SFLIGHT) pertencem ao mesmo domínio S_PRICE. Para saber quais as suas reais aplicações comerciais, o campo FORCURAM usa o elemento de dados S_F_CUR_PR e o campo PRICE, o S_PRICE. Entretanto, os dois campos pertencem ao mesmo domínio porque são campos de moeda e, assim, têm atributos técnicos similares.
Quando ativada no ABAP Dictionary, uma tabela transparente é automaticamente criada no banco de dados. Este processo traduz a descrição independente do banco de dados da tabela do ABAP Dictionary para a linguagem do sistema de banco de dados que estiver sendo utilizado.
A tabela do banco de dados tem o mesmo nome da tabela do ABAP Dictionary. Os campos também têm os mesmos nomes nos dois bancos de dados do ABAP Dictionary. As categorias de dados do ABAP Dictionary são convertidas para as categorias de dados correspondentes do sistema do banco de dados.
A partir do Release 3.0, a seqüência de campos do ABAP Dictionary pode variar da seqüência de campos do banco de dados. Isto permite ao usuário inserir novos campos sem precisar converter a tabela através de uma reorganização física. Ao adicionar novos campos, o ajuste é feito mediante a modificação do catálogo do banco de dados (ALTER TABLE). Um novo campo é acrescentado à tabela do banco de dados, independentemente de sua posição no ABAP Dictionary.
Ao ativar uma tabela do tipo TRANSP no ABAP Dictionary, o usuário automaticamente cria a tabela através do utilitário do banco de dados. Apenas operações complexas de banco de dados, por exemplo, conversões de tabelas, podem ser executadas diretamente através do utilitário do banco de dados. Operações simples como a criação de objetos podem ser executadas automaticamente ativando-se os objetos no ABAP Dictionary. No utilitário do banco de dados, o usuário controla os objetos do banco de dados com uma ferramenta de análise.
Além de definir as tabelas armazenadas no banco de dados, o usuário também pode definir a estrutura dos dados que ocorrem na execução de cálculos nos programas, ou durante a passagem de dados entre programas, de modo global, no ABAP Dictionary. Este tipo de definição é conhecido como estrutura.
As estruturas não correspondem a objetos no banco de dados. As estruturas são definidas e ativadas no ABAP Dictionary. Em seguida, podem ser endereçadas por programas do ABAP como tabelas declaradas na instrução TABLES.
Enquanto os dados podem ser permanentemente armazenados nas tabelas transparentes no banco de dados, os dados dos objetos de dados estruturados existem apenas durante o tempo de execução de um programa.
Os campos de entrada e de saída nas telas podem estar diretamente relacionados a campos de estrutura. Os elementos de semântica de um elemento de dados também podem ser úteis aqui. A vantagem é que modificações nas características técnicas e semânticas devem ser feitas apenas em um objeto do Dictionary e quando da ativação, tais modificações ficam efetivadas em todos os campos de referência.
As estruturas do Dictionary podem também ser utilizadas como tipos globais (em todo o sistema) para verificações do tipo de módulo função.
Para definir uma estrutura, proceder da seguinte forma:

  • Workbench
  • Objeto simples Objetos do Dictionary (Editar)
  • Estrutura

ABAP Open SQL

O banco de dados de um programa ABAP pode ser acessado pelo Open SQL ou pelo
Native SQL.
As instruções do Open SQL são um subconjunto do Standard SQL totalmente integrado na linguagem ABAP. Permitem ao usuário acessar o banco de dados de maneira uniforme a partir dos programas, independentemente do sistema de banco de dados em uso. As instruções do Open SQL são convertidas em instruções do Standard SQL específicas do banco de dados pela interface do banco de dados. O Open SQL contém a Linguagem de Manipulação de Dados  (DML), parte do Standard SQL, que permite ler e modificar os dados. A Linguagem de Definição de Dados (DDL) e a Linguagem de Controle de Dados (DCL), partes do Standard SQL, são controladas pelo ABAP Dictionary e pelo conceito de autorização, respectivamente, os quais unificam e ampliam as funções oferecidas pelos vários sistemas de banco de dados.
O Open SQL contém instruções DML SELECT, UPDATE, INSERT, DELETE e MODIFY. O usuário não deve modificar as entradas do banco de dados sem antes entender o conceito de transação SAP (consultar o capítulo Conceito de Transação deste curso). As instruções do Open SQL definem um valor no campo código de retorno SY-SUBRC. Se SY-SUBRC = 0, a operação foi bem-sucedida. Se SY-SUBRC <> 0, a operação não teve sucesso.
Native SQL está conectado ao ABAP de forma bem genérica. Permite ao usuário aplicar todas as funções oferecidas pela interface de programação do sistema do banco de dados que esteja sendo usado. Diferentemente das instruções do Open SQL, as instruções do Native SQL não são verificadas e convertidas pela interface do banco de dados. Em vez disso, passam diretamente ao sistema do banco de dados, ou seja, os programas escritos usando o Native SQL são específicos do banco de dados. Convém não usar o Native SQL para escrever aplicações do sistema R/3.
A instrução SELECT do Open SQL deve ser usada para ler dados do banco de dados. Subjacente à instrução SELECT existe uma lógica complexa que permite acesso a muitos tipos diferentes de tabelas do banco de dados.
A instrução contém uma série de cláusulas, cada qual com uma tarefa diferente:
cláusula SELECT especifica se o resultado da seleção deve ser uma linha simples ou várias linhas;
os campos que devem ser incluídos no resultado; se o resultado poderá conter duas ou mais linhas idênticas.
cláusula INTO especifica o objeto de dados interno do programa  no qual o usuário deseja colocar os dados selecionados.
A cláusula FROM especifica a origem dos dados (tabela do banco de dados ou visão).
cláusula WHERE especifica as condições que devem ser atendidas por uma entrada de tabela para ser incluída no resultado.
A instrução SELECT SINGLE permite ao usuário ler uma linha simples de uma tabela do banco de dados. Para garantir a leitura de uma única entrada, é preciso especificar todos os campos-chave da cláusula WHERE.
Sendo usada a adição CORRESPONDING FIELDS OF na cláusula INTO, o usuário pode preencher a área-alvo de trabalho, componente por componente. O sistema apenas preenche aqueles componentes que têm nomes idênticos às colunas da tabela do banco de dados. Se essa adição não for utilizada, o sistema preenche a área de trabalho a partir do lado esquerdo, desconsiderando sua estrutura. Caso o sistema encontre uma entrada de tabela condizente com essas condições, SY-SUBRC tem valor 0.
Caso o operador não use a adição SINGLE na cláusula SELECT, o sistema lê todas as entradas da tabela que satisfaçam o critério da cláusula WHERE. O programa ABAP lê os dados, linha por linha, na área-alvo em um loop. Deve-se usar a instrução ENDSELECT para marcar o final do loop.
Todas as instruções entre SELECT e ENDSELECT são executadas para cada entrada do banco de dados que é lida. Quando o sistema seleciona pelo menos uma entrada, SY-SUBRC = 0. Depois que a instrução SELECT tiver sido executada em cada passo do loop, o campo de sistema SY-DBCNT contém o número de linhas lido. Depois da instrução ENDSELECT, esse campo conterá o número total de linhas lido.
O sistema permite ler, de uma só vez, os dados da tabela do banco de dados para uma tabela interna usando a instrução SELECT … INTO TABLE (busca de matriz).
O sistema não utiliza um loop para ler os dados para uma tabela interna. Assim, não é preciso usar uma instrução ENDSELECT. Quando o sistema consegue ler pelo menos uma entrada da tabela, SY-SUBRC = 0. Utilizar uma busca de matriz é, quase sempre, mais eficiente do que ler as entradas da tabela em um loop e anexá-las a uma tabela interna.
O usuário especifica quais os registros de dados que devem ser lidos do banco de dados usando a cláusula WHERE. O sistema permite digitar apenas os nomes dos campos da tabela do banco de dados a serem lidos na cláusula WHERE.
O nome da tabela do banco de dados a ser acessado encontra-se na cláusula FROM (exemplo de uma instrução correta: SELECT … FROM spfli WHERE carrid = …  ; exemplo de uma instrução incorreta: SELECT …FROM spfli WHERE spfli-carrid = … ) e pode ser qualquer objeto de dados: literal, uma constante ou um campo. Várias condições lógicas podem ser acrescentadas à cláusula WHERE usando-se AND ou OR.

Tabela Interna

Trata-se de um conceito muito utilizado em programas ABAP/4, são similares a arrays, ou temp-tables de outras linguagens. Apesar do inconveniente de serem armazenadas na memória RAM da máquina (o que pode acarretar problemas quando tentarmos montar uma tabela interna muito grande), possui comandos muito interessantes para sorts, quebras e totalizações.
Deve-se sempre lembrar que a tabela interna trabalha com o conceito de buffer, ou seja, após armazenarmos o buffer devemos appendar este novo registro a nossa tabela interna. Sempre que possível nos programas onde a tabela interna já não será mais utilizada na lógica, devemos liberar este espaço de memória.
Comandos associados:
DATA: BEGIN OF t_tabela OCCURS 0,
CAMPO 1
CAMPO 2
END OF t_tabela.
Definição da tabela interna, também é valido se criar uma tabela interna com include de uma estrutura, além disso existem outras variações de definição como definir um type ( tabela interna ) e utilizar este type WITH HEADER LINE, tem o mesmo efeito, porém é melhor utilizar a definição acima.
CLEAR t_tabela. Limpa o buffer da tabela interna.
APPEND t_tabela. Inclui efetivamente o registro do buffer na tabela interna
COLLECT t_tabela. Para registros com a mesma parte alfa-numérica, este commando soma todos os campos numéricos.
SORT t_tabela BY campo. Ordena a tabela interna pelos campos desejados. OBS. Para uma perfeita manipulação dos dados nos comando AT, deve-se definir os campos da tabela interna na mesma ordem que serão sortiados no comando SORT.
LOOP AT t_tabela. Varre todos os registros da tabela interna, ou somente os registros que se pretende percorrer (WHERE )
AT FIRST. Em conjunto com o comando LOOP, identifica o primeiro registro da tabela percorrida.
AT NEW campo. Em conjunto com o comando LOOP, identifica o primeiro registro de uma sequência ( quebra ).
AT END OF campo. Em conjunto com o comando LOOP, identifica o último registro de uma sequência  ( quebra ).
AT LAST. Em conjunto com o comando LOOP, identifica o último registro da tabela percorrida.
READ TABLE t_tabela WITH KEY campo = Leitura de um registro específico. Este comando retorna SY-SUBRC = 0 se o registro for encontrado e diferente de zero caso contrário.
DELETE t_tabela. Deleta um registro da tabela Interna
MODIFY t_tabela. Modifica o registro na tabela Interna
REFRESH t_tabela. Todos os Registro da Tabela Interna são deletados.
FREE t_tabela. Libera o espaço utilizado pela Tabela Interna na memória.
Veja também:

Faça a inscrição para a prova de certificação. Estude com os simulados Bynem
Veja também pelo Web Store: SAP ABAP

Veja também: