Dicas ABAP

Published on February 15th, 2011 | by Mauricio Cruz

5

Macros e os comandos que não existem (ou existem?).

Antes de tudo, um fato que ainda assusta alguns ABAPers: você sabia que o comando “break “, não é um COMANDO de verdade?

Mas Hein?!?

Eu explico: o comandinho mágico “break ” é, na verdade, uma MACRO! Dúvida? Então abre aí a tabela TRMAC na SE16, e coloque o nome “BREAK” no campo name:

Comandos da MACRO break

Muito bonito, muito interessante… mas que diabos são macros?
Bom, vale dizer aqui que eu conheci as macros de uma maneira meio triste… Quando eu estava começando no mundo do ABAP, eu fiquei um tempão olhando para aquele “validate_execution” dentro de uma EXIT da VA, tentando entender o que aquela coisa fazia.. até procurei no google :oops:. Daí um amigo mais experiente me falou “isso é uma MACRO cabeção!”, e me explicou o seguinte:

  • MACROs são sequências de comandos pré-definidos dentro dos comandos DEFINE…END-OF-DEFINITION.
  • A idéia é ter criar uma espécie de “novo comando”, que você pode re-utilizar no resto do seu código.
  • Os comandos ABAP definidos dentro de MACROs não podem ser debuggados, portanto, devem conter poucas linhas.
  • As macros podem ser definidas globalmente, utilizando a tabela TRMAC (via sm30). Eu não recomendo utilizar isso, e nem recomendo que qualquer alteração seja feita nas macros já existentes nesta tabela. Se você apagar algo e programas standard começarem a dar erro de síntaxe, a culpa é só sua :P!.

Pois bem, vejamos o exemplo abaixo da criação de uma macro local:

Beleza, funciona… Mas depois desse exemplo de zueira, você deve estar se perguntando: tá, pra que é que eu posso usar isso?

Lembra da minha história? Da macro “validade_execution”? Ela rodava uma validação para saber se a exit estava ativa ou não numa transação de configuração do cliente (não tem SMOD/CMOD para a SAVE_DOCMT_PREPARE da VA…), e adivinha: os ABAPs espertinhos não podiam debuggar, porque você não pode debuggar macros!
Logo, se a gente colocar um AUTHORITY-CHECK dentro de uma MACRO…

Já que não dá pra debugar, você acaba com a graça dos ABAPers que curtem pular autorizações. 😈

Agora falando sério mesmo: eu usava macros para fazer algumas conversões ou mesmo contas simplezinhas. Acho que ajuda e deixa o código mais limpo. Ao mesmo tempo, se for para fazer algum lógica mais complexa ou que tenha base na regra de negócio, crie um FORM ou um Método. É mais fácil de debugar, analisar problemas ou mesmo alterar.

E por hoje chega! break mauricio.cruz

Abraços!

 

 

Share on FacebookTweet about this on TwitterShare on LinkedInShare on Google+Email this to someonePrint this page

Tags: , , , ,


About the Author

é pasteleiro há alguns anos e criou o ABAPZombie junto com o Mauro em 2010. Gosta de filosofar sobre fundamentos básicos da programação e assuntos polêmicos. Músicas estranhas, artes marciais e games indies são legais. Zumbis não. Converse comigo no twitter e conheça o meu livro de ABAP!



5 Responses to Macros e os comandos que não existem (ou existem?).

  1. Rafael Tavares says:

    As macros têm outra característica bastante interessante que permite que se monte os nomes das variáveis dinamicamente.
    Se eu tiver no meu código variáveis com os nomes:
    DATA: wa_zombie1 TYPE type_zombie,
    wa_zombie2 TYPE type_zombie.

    Posso criar uma macro para limpar qualquer campo da tabela:
    DEFINE limpa_campo.
    CLEAR wa_&1-&2.
    END-OF_DEFINITION.

    As chamadas dessa macro deveriam passar sempre os valores para se completar o nome do campo. Por exemplo:
    limpa_campo: zombie1 cabeca,
    zombie2 tronco.

    A primeira chamada da macro vai limpar o campo 'wa_zombie1-cabeca' e a segunda chamada vai limpar o campo 'wa_zombie2-tronco'.

    Isso pode evitar que sejam necessários alguns FIELD_SYMBOLS em casos específicos.

  2. Gisele Oliveira says:

    Gente, desde que conheci este site minha vida de ABAPer nunca mais foi a mesma. 😉
    O conteúdo é sempre muito útil e didático.
    Fora que é uma diversão ler os textos.
    Sempre deixo escapar no mínimo um sorrisinho quando vejo fotos como a do macaco acima ou a do Nhonho na outra página. rs
    Posso dizer que já perdi a conta de quantas coisas aprendi aqui.
    Hoje descobri como usar essa tal de macro. 😀
    Muito bom mesmo!
    Valeu!

  3. Rafael Paes says:

    Olá.
    Sempre estou por aqui e hoje resolvi curti!
    Ótimo trabalho! Grande Abraço!

  4. Vinicius Silva says:

    Ressuscitando esse zumbi…

    Outra vantagem da macro mas que deve ser usada com uma BOA quantidade de cuidado é que ele não exige declaração do tipo das estruturas que forem usadas como parâmetros…

    Suponhamos duas estruturas que possuem o campo “DT_FIM”, você quer atualizar o campo das duas estruturas, até aí o perform resolve… mas e se cada uma possui uma estrutura diferente? Embora você consiga trabalhar com a estrutura, para acessar o campo o perform exigirá a declaração do tipo da estrutura, perdendo a dinâmica da coisa.

    Pronto, problema resolvido. Por motivos óbvios, todas as estruturas que forem passadas na macro devem ter os campos usados na mesma.

Leave a Reply

Your email address will not be published. Required fields are marked *

Back to Top ↑