Criando templates de código no SAP Logon e no Eclipse
Há sempre aquele padrão de código que vivemos escrevendo mas ele não é exatamente reutilizável. Um LOOP com alguns IFs internos de controle… um FORM com com alguns parâmetros, alguma mensagem de erro famosa ou aquela classe básica com um construtor. Por pura preguiça de digitar tudo novamente (que já está implicitamente decorado) saímos a procura de um programa que já possui um código que podemos usar como modelo. Ah.. o CTRL+C, CTRL+V é tão prazeroso não é verdade? Não, não é. Aqui vai uma excelente dica que lhe ajudará a ganhar tempo enquanto desenvolve, seja na SE80 usando o SAP Logon ou o ABAP no Eclipse. Quer saber? Leia o resto deste post.
Templates de código
Alguns comandos em ABAP, até em versões um pouco mais antigas do SAP Logon, exibem um tooltip com o sinal de § logo após o comando. Provavelmente você já sabe que caso você for rápido o suficiente e apertar TAB, um template pré-definido de código será inserido automaticamente para você. Mas você sabe como criar novos?
Caso você use o SAP Logon (consequentemente o tcode SE80, a segunda melhor IDE das linguagens que começam com “A” e terminam com “BAP”) basta seguir o passo-a-passo abaixo.
Criando templates de código no SAP Logon
No canto inferior direito do editor ABAP, há um pequeno ícone amarelo com uma pasta e folha desenhada. Este botão abre a configuração do editor ABAP.
Para evitar que você sempre tenha uma reação sobrenatural para apertar TAB, aconselho ir na item “Code Completion” no menu a esquerda e alterar consideravalmente o valor da opção “Automatically Hide Code Hints After”. Assim você terá mais tempo para pensar no que está fazendo e poder apertar TAB com um certo atraso para completar o código com um template.
Em sequência, vá na opção “Code Templates”. É aqui que se define os templates de código. Dê uma olhada nos existentes. Como exemplo, você pode criar um template para quando você já sabe que precisará fazer um SELECT e jogar o resultado em uma tabela interna que ainda não foi criada.
Momentaneamente feche o popup e escreva o template que você deseja em um editor aberto qualquer, como o abaixo. Note que o código não precisa ser “compilável”. Basta que ele facilite sua vida na hora de usá-lo.
Uma vez que o seu template seja escrito, copie-o no clipboard e volte na tela de configurações do editor, opção “Code Templates”.
Clique em adicionar e dê um nome (que você deve lembrar facilmente) e uma descrição o mais detalhada possível.
Salve e pronto! Você tem um template de código!
Para usá-lo, basta digitar o nome do template no editor (no caso, _select_into_table). Uma vez que o nome completo do template seja digitado, a descrição definida será exibida em forma de tooltip. Novamente, basta apertar TAB para que o código seja inserido de acordo com o template.
Tags
É possível também usar tags no seu template. Isso é útil quando seu template necessita de informações dinâmicas, como o dia atual ou o código do chamado que você esteja atendendo.
Para ilustrar este cenário, vamos supor que na sua empresa ninguém saiba como usar o versionador de código ABAP e por isso seja necessário incluir comentários de código como o abaixo englobando o trecho de código que precisa ser alterado.
” BEGIN OF TICKET-12345 – Date: dd/mm/aaaa
” … changed source code
” END OF TICKET-12345 – Date: dd/mm/aaaa.
Como o número do chamado e a data atual são dinâmicas, basta incluir tags no seu template. No dropdown exibido no botão “Insert Tag” há algumas tags pré-definidas, como %DateTime%. Pelo fato de DateTime estar entre %’s, o editor irá interpretar a informação como uma variável. Conforme abaixo.
Quando você define uma variável que o editor não é capaz de interpretar, como %Ticket ID%, um input box é exibido toda vez que o template for chamado.
* Não há uma variável pré-definida para somente a data, mas fica mais fácil remover só o horário ou deixar no fonte mesmo. Na minha opinião é melhor não usar estes comentários que poluem o código e usar o versionador quando preciso… mas, tais comentários são normas em muitas empresas.
Mas é claro que o ABAP101 não vai dar uma dica como esta sem nada mais a acrescentar não é mesmo? Vamos ver como o mesmo conceito se aplica no ABAP no Eclipse para quem já está usando.
Criando templates de código no ABAP no Eclipse
O Eclipse é mais inteligente que a SE80 por isso a qualquer momento você pode apertar CRTL+SPACE para acionar a função de autocompletar. Para criar templates, vá no menu “Window” >> “Preferences”. No menu a esquerda vá em “ABAP Development” >> “Source Code Editor” >> “Templates”.
Tags
Tags (variáveis) no template de código do Eclipse são denotadas com ${variável}. Existem mais possibilidades de variáveis para quem usa o Eclipse (data, hora, ano, usuário, etc). Ao usar um template com uma variável desconhecida você preencherá seu conteúdo após o template ser inserido, sem a presença de popups portanto.
Exemplos de Templates
Aqui vão alguns exemplos de templates para você adicionar no seu editor predileto (adequados ao eclipse).
class ${class_name} definition. public section. methods constructor. protected section. private section. endclass. class ${class_name} implementation. method constructor. endmethod. endclass.
*&---------------------------------------------------------------------* & Report ${zprogram} *& *&---------------------------------------------------------------------* *& Autor: *& Transação: *& Módulo: *& Decrição: *&---------------------------------------------------------------------*
class ${zcl_class_name_test} definition deferred. class zcl_tested_global_class definition local friends ${zcl_class_name_test}. CLASS ${zcl_class_name_test} DEFINITION FOR TESTING FINAL CREATE PUBLIC DURATION SHORT RISK LEVEL HARMLESS . PUBLIC SECTION. METHODS mut1 FOR TESTING . METHODS mut2 FOR TESTING . METHODS mut3 FOR TESTING . PROTECTED SECTION. * GIVEN METHODS given_reusable IMPORTING !im_ TYPE . METHODS given_1. METHODS given_2. METHODS given_3. * WHEN METHODS when_mut1. * THEN METHODS then_reusable IMPORTING !im_ TYPE . METHODS then_1. METHODS then_2. METHODS then_3. PRIVATE SECTION. METHODS setup. METHODS teardown. DATA o_ref_to_tested_class TYPE REF TO zcl_. DATA o_exception TYPE REF TO zcx_ . ENDCLASS. CLASS ${zcl_class_name_test} IMPLEMENTATION. METHOD setup. CLEAR me->o_ref_to_tested_class. CLEAR me->o_exception. ENDMETHOD. "setup METHOD teardown. ENDMETHOD. "teardown ************************************************ * Methods Under Test ************************************************ METHOD mut1. ENDMETHOD. "mut1 METHOD mut2. ENDMETHOD. "mut2 METHOD mut3. ENDMETHOD. "mut3 ************************************************ * GIVEN ************************************************ METHOD given_1. ENDMETHOD. "given_1 METHOD given_2. ENDMETHOD. "given_2 METHOD given_3. ENDMETHOD. "given_3 ************************************************ * WHEN ************************************************ METHOD when_mut1. ENDMETHOD. "when_mut1 ************************************************ * THEN ************************************************ METHOD then_reusable. ENDMETHOD. "then_reusable METHOD then_1. cl_aunit_assert=>assert_equals( EXPORTING exp = " Data Object with Expected Type act = " Data Object with Current Value * msg = " Message in Case of Error * level = CRITICAL " Error Severity * tol = " Tolerance Range for Floating Point Numbers * quit = METHOD " Flow Control in Case of Error * ignore_hash_sequence = ABAP_FALSE " Ignore change sequence in hash tables * RECEIVING * assertion_failed = " Condition not met ). ENDMETHOD. "then_1 METHOD then_2. cl_aunit_assert=>assert_bound( EXPORTING act = " Reference Variable to Be Checked * msg = " Error Message * level = CRITICAL " Error Severity * quit = METHOD " Flow Control in Case of Error * RECEIVING * assertion_failed = " Condition not met ). ENDMETHOD. "then_2 METHOD then_3. cl_aunit_assert=>assert_not_bound( EXPORTING act = " Reference Variable to Be Checked * msg = " Error Message * level = CRITICAL " Error Severity * quit = METHOD " Flow Control in Case of Error * RECEIVING * assertion_failed = " Condition not met ). ENDMETHOD. "then_3 ENDCLASS.
Envie seus templates!
Caso você use templates de código, cole seus preferidos no campo de comentário. Assim, todos podem economizar tempo também!
Que belezaaaa isso!
Vai ajudar muito para inserir códigos simples que insistem em sumir da cabeça quando preciso!
Obrigada pela dica!
De nada Aline.
Quando criar templates, poste aqui em forma de comentário para outras pessoas também poderem os utilizar.
Abraços!
Show essa dica !
Curti !
Realmente simples e uma mão na roda!
Valeu abraços!