Importanto e Exportanto Uma Tabela Interna – Módulo de Função

Estava procurando algum assunto para escrever, e uma luz do céu e-mail chegou com uma dúvida e que em todas as turmas da Academia ABAP tem, como importar ou exportar uma tabela interna para um módulo de função ou método.

A solução pode ser respondida com uma simples frase: “Use um Table Type (Categoria de Tipos)”. Só com isso já seria suficiente para você sair do outro lado, mas fazendo jus ao “101” do nome do site, vou explicar passo a passo como fazer em um módulo de função. No próximo post, eu explicarei como fazer em um método.

Problema

Precisamos criar um módulo de função para retornar dados dos vôos (tabela SPFLI), dado uma empresa aérea.

Solução

A primeira coisa a fazer é criar um tipo tabela (table type) no dicionário, que define uma tabela interna do tipo standard. Vá na transação SE11 e escolha Data Type:

Clique em “Create” e escolha Table Type:

Entre com uma breve descrição e o Line Type, que define a as colunas na tabela interna. Nesse caso queremos todas as colunas da tabela SPFLI.

Certifique-se o tipo de tabela seja Standard Table.

Com o tipo global criado e ativo, vamos a criação ao módulo de função. Primeiro, é necessário criar uma Grupo de Função na transação SE80. Escolha “Function Group” e defina um nome. Pressione ENTER e confirme a criação do novo objeto.

Depois de criar o grupo, crie o módulo de função. Pressione o botão direito do mouse sobre o grupo de função, escolha Create -> Function Module.

Defina o nome a descrição para o módulo de função. O nome precisa necessariamente “Z_”.

Agora vamos definir o parâmetro de Import, IM_CARRID, com o mesmo tipo do campos CARRID da tabela SPFLI.

Para o parâmetro de EXPORT use o Table Type definido anteriormente.

Não vamos nos esquecer de definir as exceções, no nosso caso, defina apenas uma única exceção.

E para finalizar, entre o código abaixo:

Z_FM_GET_CONNECTIONS

Execução e Teste

Depois de ativar o módulo de função, você pode executar um teste unitário pressionando o F8. Entre a empresa aérea “AA”. Pressione F8 novamente para executar o módulo de função, retornando duas entradas da tabela SPFLI.   Agora usando efetivamente o módulo de função, crie um programa que chama a função e imprima o resultado na tela. ZABAP101_REPORT_CONNECTIONS

Discussão

O principal ponto a destacar aqui é o tipo criado na SE11, ZTT_SPFLI. Antigamente usava a pasta Tables do módulo de função, onde era somente preciso especificar a estrutura que o próprio sistema entendia que deveria ser criado uma tabela interna em tempo de execução. Não usamos essa técnica pois já está obsoleto e por regra não devemos criar novos programas com instruções ou técnicas definidas pela SAP como obsoletas.

É interessante o uso do módulo de função para seleção de dados, pois assim podemos reutilizar em outros programas. Esse módulo de função serve como Model (do nosso conhecido MVC). Podemos incluir ali outras regras de negócio que poderão ser facilmente reutilizadas em outros programas. Além disso, se essa regra mudar por qualquer motivo, não é necessário alterar vários programas, mas apenas dentro do módulo de função.

 

Você pode gostar...

12 Resultados

  1. Fawcs disse:

    Droga, então não existe uma alternativa mesmo? eu preciso criar Table types pra isso?

    O senhor não acha que isso deixa o desenvolvimento mais devagar?

    • Flávio Furlan disse:

      Primeiro, o Senhor está no céu :-p

      Não deixa mais lento não. O workbench é otimizado para isso. Pode fazer tranqüilamente.

      Em resumo, não use a aba Tables, mas crie um table type.

  2. Fawcs disse:

    Mas o que eu quero dizer, quando você está desenvolvendo uma classe local e precisa exportar/importar uma tabela, em vez de você fazer algo como:

    methods: get_table returning re_table type table of ty_etc.

    tem que ir laaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa na se11, criar estrutura, criar tabela pra depois continuar a programação=P

    • Flávio Furlan disse:

      No caso de uma classe local, você pode criar o tipo local mesmo:

      TYPES ty_table TYPE TABLE OF spfli.

  3. Fawcs disse:

    Eu tinha tentando isso, recebi um erro “The type of a returning parameter must be fully specified”. pesquisando um pouco vi que a declaração precisa ser um pouco mais complexa:

    Types: ty_bkpf type STANDARD TABLE OF bkpf with key bukrs belnr.

    vlw professor =) ótimo post

  4. Custodio disse:

    Nao precisa ser tabela tipo STANDARD, qualquer tipo eh aceito na declaracao, mas o mesmo tipo deve ser usado ao chamar o metodo/funcao.

  5. Fawcs disse:

    sim, foi um exemplo(que resolvia o meu problema =P). Mas é necessário a declaração das chaves, correto?

  6. Custodio disse:

    Para standard table, nao. Para sorted ou hashed, sim.

  7. Leandro Tentoni disse:

    Olá Galera!
    Eu ouvi dizer que está obsoleto a aba ‘tables’ mas que a ‘Changing’ funcionaria igual.
    Bom até ai não sei se é verdade, mas tudo bem.

    Valeu pela Dica Furlan!!

    Abraço!

  8. Felipe Araujo de Carvalho disse:

    Excelente post, ajudou muito

  9. Carlos disse:

    Mas se eu precisar criar uma tabela temporária com alguns campos específicos. Eu vou ter que criar uma tabela no sap para criar uma TABLE TYPE? Não vejo muito sentido nisso.