"
Apoiado por

Desfazer alterações no ecrã do depurador

benjaminbutton

Embora uma parte substancial do trabalho de um ABAPador seja depurar código, a maior parte dos ABAPadores que eu conheço investem muito pouco em explorar a ferramenta que o permite, o depurador. Talvez por terem passado anos a aturar um depurador arcaico e limitado. Mas o novo pode fazer muito mais do que lhe costuma ser pedido. E o Abapinho vai tentar ensinar como.

Hoje ensina-te apenas uma pequena tecla.

Ler o resto do artigo! »

Dar passos de bebé no debug

stepsize_baby

Quando fazes debug usas a tecla F5 para avançar para a próxima instrução (ou entrar para dentro de uma sub-rotina). Mas imagina um IF com várias condições:


IF A = 1 AND B = 2 AND C = 3.
  WRITE 'Gosto da palavra glauco'.
ENDIF.

Ao fazeres debug àquele IF com F5 e alguma das expressões for falsa saltas logo para fora do IF e ficas sem saber qual delas falhou.

Mas o novo debugger tem uma nova funcionalidade muito catita que te pode ajudar a entender melhor o que aconteceu ali.

Ler o resto do artigo! »

O SAP ajuda-te a traduzir para qualquer lingua

buddha

Volta não volta encontro mais uma virtude escondida do SAP. Então não é que fiquei a saber que existe uma transacção em que podemos introduzir uma determinada palavra numa determinada lingua e o SAP ajuda-nos a traduzi-la para outra lingua qualquer mostrando-nos noutras traduções que já existam para essa mesma palavra.

Não é fixe? Ok, não é o Google Translate, mas é uma bela ajuda.

Ah, já me esquecia, a transacção chama-se STERM.

Obrigado Sérgio Fraga pela dica.

O Abapinho saúda-vos.

SQL nativo

watch_movement

Por vezes o SQL do ABAP não te permite fazer coisas que conseguirias fazer usando SQL nativo da base de dados. É possível fazê-lo.


* Converte para maiúsculas e acrescenta wildcard 
  TRANSLATE l_name1 TO UPPER CASE.
  CONCATENATE l_name1 '%' INTO l_name1.

* Executa SQL nativo para fazer
* uma pesquisa "case insensitive" pelo nome 
  EXEC sql performing SAVE_ROW.
    SELECT kunnr
           INTO :l_kuune
           FROM kna1
           WHERE kna1.mandt        =    :sy-mandt
           AND   UPPER(kna1.name1) LIKE :l_name1
  ENDEXEC.

Mas atenção pois, ao contrário do SQL do ABAP que é genérico, este SQL terá de ser escrito especificamente para a base de dados existente. Por consequência o código fica menos flexível e mais complexo. Como tal, faz isto só mesmo se não tiveres alternativa.

Foto: Photodesaster via VisualHunt.com / CC BY-NC

O Abapinho saúda-vos.

GROUP BY em LOOPs a tabelas internas

loops

Todos já ordenamos tabelas internas e utilizamos a instrução AT NEW.
Mas a partir da 7.40, podemos utilizar GROUP BY no LOOP.

É fantástico a capacidade de agrupamento em que os valores do registo processado no loop podem ser comparados, recorrendo a expressões e  até métodos.

O agrupamento é realizado num primeiro LOOP e pode ser processado a seguir. Experimentem o seguinte código e, tal como eu, ficarão impressionados com o caminho que o ABAP está a seguir.

Ler o resto do artigo! »

Corrigir erro em código standard com enhancement implícito

remendar

Descobriste um bug num FORM (ou Função ou método) standard:


FORM EQUAL_VALUE CHANGING W_DATE TYPE SYDATUM.
  W_DATE = SY-DATUM - 1.
ENDFORM.

Reportaste o erro à SAP mas eles ainda devem demorar a responder e tu precisas da correcção urgentemente.

Tens de agir.

Sem demora usas o enhancement implícito do início do código para substituir o código original pelo teu (até a correcção chegar, claro):


FORM EQUAL_VALUE CHANGING W_DATE TYPE SYDATUM.
ENHANCEMENT...
* Enquanto no código SAP standard estiver isto: W_DATE = SY-DATUM - 1.
  W_DATE = SY-DATUM - 2.
  EXIT. "salta fora
ENDENHANCEMENT
W_DATE = SY-DATUM - 1.
ENDFORM.

Certo, não é elegante. Mas safa.

Obrigado Pierre Ameye pela dica.

Obrigado Sherri Lynn Wood pela foto.

O Abapinho saúda-vos.

SAABs ASSERTar à primeira?

cinderela

Checkpoints é uma framework muito poderosa do ABAP que no entanto quase ninguém a usa. Porquê? Provavelmente pela mesma razão que quase ninguém ouve Sun Ra e que quase ninguém sabe que o Frank Zappa tem 102 álbuns. Porque embora seja bom, é obscuro e pouco comercial. Os checkpoints são, de facto bons e pouco comerciais. Mas deviam ser mais como o Mozart, que é bom e comercial.

Ler o resto do artigo! »

STA Ticket System acelera a resolução de incidentes SAP

STA_654x885_t

Hoje temos um convidado, Tamás Holics. Ele é dono da STA Consulting, uma empresa Húngara que criou 2 produtos muito interessantes para SAP. Neste artigo o Tamás apresenta o STA Ticket System.

O Problema

Desperdiça-se muito tempo nos processos de teste e manutenção SAP dado que os relatórios de erros produzidos pelos utilizadores serem muitas vezes incompletos ou incorrectos. A resolução do problema reportado normalmente fica pendente até a informação estar toda completa. Ora como em boa parte dos incidentes reportados a equipa de manutenção (analistas, programadores) tem de pedir mais informação sobre o erro, há uma enorme perda de tempo valioso em iterações desnecessárias, tanto de quem reporta incidentes como de quem lhes dá suporte.

Ler o resto do artigo! »

Afinal a podridão é nobre

lateharvest

Durante anos queixei-me por o ambiente de desenvolvimento do SAP ser tão retrógrado e antiquado e por demorar tanto tempo a evoluir Sempre que mo ouvia dizer, um amigo meu avisava-me sabiamente: “não mordas a mão que te dá de comer”.

Mas como pode um homem ficar calado?

Ler o resto do artigo! »

Padrões de projecto de software em ABAP

burberry

Estamos em constante aprendizagem. Mas volta não volta aprendemos algo que nos obriga a dar um salto paradigmático na forma como olhamos para o que fazemos.

A última vez que isso me tinha acontecido foi quando comecei a usar OO em ABAP. OO não era novo para mim pois sempre programei em Java, C#, C++, etc. Mas poder finalmente aplicar os conceitos de OO em ABAP foi um alívio e um salto quântico na qualidade, flexibilidade e velocidade do meu trabalho.

Sinto-me neste momento a dar mais um salto. Porque estou finalmente a aprender a usar padrões de projecto (software design patterns). Desde sempre que ouvi falar neles mas nunca lhes dei a devida atenção. Por exemplo, o site de ABAP ZEVOLVING há muitos anos que fala neles e lembro-me de ter lido vários destes artigos. Mas de alguma forma ainda não tinha encontrado um texto que, para além de os explicar, mostrasse de forma clara as vantagens da sua utilização.

Agora, graças ao Miguel Jorge, encontrei: Head First Design Patterns. Além de cómico, explica de forma clara e simples as limitações dos paradigmas OO e como é que a utilização de padrões de projecto podem ajudar a contorná-las.

Este site tem links para vários textos interessantes, inclusive para o que parece ser uma versão PDF do livro acima referido. E também para esta página que os descrever e até critica.

A partir de hoje sempre que desenhar soluções OO tentarei ter presentes os vários padrões existentes e aplicá-los sempre que tiverem cabimento.

Obrigado Miguel Jorge!

O Abapinho saúda-vos.

Inibe o histórico de valores para um só campo

adam_eve

Normalmente o SapGUI memoriza os últimos valores introduzidos em cada campo. E isso costuma ser bom. Mas podes muito bem não querer que isto aconteça. (ex: no caso, improvável eu sei, de quereres introduzir valores pornográficos num determinado campo). Uma hipótese é desligar globalmente esta funcionalidade nas configurações do SapGUI.

Mas e se quiseres desligar apenas num campo? O Abapinho ensina-te.

Ler o resto do artigo! »

Acrescenta parâmetros a métodos e funções standard

esquilo

Todos conhecemos as ampliações implícitas da SAP, que permitem adicionar código no início ou final qualquer blocos de código standard (funções, métodos, etc.). Já todos as usámos para alterar uma BAPI ou outro código standard qualquer.

Mas só há pouco tempo é que descobri que também é possível usar ampliações implícitas para acrescentar parâmetros a funções e métodos ABAP standard.

Ler o resto do artigo! »

ZTOAD – Editor de SQL

toad-world-logo

O Toad é uma ferramenta muito famosa no mundo SQL que permite construir e executar queries SQL de forma fácil e interactiva. E agora, graças ao senhor Sébastien HERMANN, o SAP tem uma versão simplificada desta ferramenta maravilha.

Ele explica.

Obrigado Sérgio Fraga por descobrires isto.

O Abapinho saúda-vos.

Índices secundários em tabelas internas

postits

Durante anos as tabelas internas eram declaradas assim:


DATA: itbl TYPE TABLE OF bkpf.

Ler o resto do artigo! »

Programa a programação dos programas

cerebro_fios

Uma das coisas que distingue o homem dos restantes animais é o facto de ser capaz de pensar o pensamento.

Um pardal pode pensar “estou assustado, vou dizer piu piu piu” e, como consequência, quem estiver ao pé dele ouve “piu piu piu”.

Ler o resto do artigo! »

Utilizar a lista de utilizações programaticamente

Book Illustration Depicting Sherlock Holmes and Dr. Watson in a Train Cabin

A ferramenta “lista de utilizações” é uma das mais queridas de um programador ABAP. Através dela conseguimos saber onde é que um objecto é utilizado. Parece pouco mas sabemos que é muito.

Ler o resto do artigo! »

A classe CL_GUI_FRONTEND_SERVICES

nariz

A classe CL_GUI_FRONTEND_SERVICES é frequentemente usada para fazer upload e download de ficheiros de e para o computador local. Mas ela consegue fazer muitos mais coisas boas. Por exemplo:

Ler o resto do artigo! »

O SAP sabe tirar selfies!

selfiestick

Acabei de descobrir que o SAP consegue tirar selfies. Ainda não estou a ver para que é que isto possa servir. Mas não é grave porque na verdade também nunca vi para que é que servem as selfies tiradas por nós os humanos.

Faz-se assim:

Ler o resto do artigo! »

Nunca te lembras do código ASCII do CR_LF e seus amigos?

carriage_return

Eu também não.

Nem quero lembrar-me. Para quê gastar memória com códigos obtusos?

E não é preciso porque o ABAP tem uma classe que ajuda.

Ler o resto do artigo! »

SELECT de um conjunto de valores conhecidos

banner-minions

Pedem-te para seleccionares registos cujo critério é um conjunto de meia dúzia de códigos que são conhecidos e nunca vão mudar. Sabias que podes fazer tudo logo no SELECT?


SELECT * INTO T_T005T
FROM T005T
WHERE LAND1 = I_LAND1 AND
           SPRAS IN ( 'PT', EN' ).

Compete-me lembrar-te que fixar valores em programas não é a melhor das ideias por isso usa isto com tino.

Obrigado Sérgio Fraga pela dica.

O Abapinho saúda-vos.


Acerca do Abapinho
O Abapinho é suportado pelo WordPress
Artigos (RSS) e Comentários (RSS).