"
Apoiado por

Mostra valores não convertidos na SE16N

A SE16N mostra-te os valores dos campos no formato externo. Até há pouco tempo eu usava a arcaica SE17 para ver os valores no formato interno. Mas o Rui Nunes explicou que há uma forma de o conseguir fazer na SE16N.

Ler o resto do artigo! »

Serialização – Clona a Dolly em ABAP

A ovelha Dolly

Este artigo é da autoria de José Vília.

A ovelha Dolly está no ABAP e eu não sabia.

Depois de criar uma instância de uma classe, gostava de partilhá-la com outro programa totalmente independente para que este outro programa posso usá-la como se a tivesse instanciado.

Como se de uma fábrica de ovelhas Dollies se tratasse, o ABAP pode utilizar serialização para resolver o problema.

Ler o resto do artigo! »

Abracadabra revela parâmetro secreto

Aqui está uma forma pouco ortodoxa de lidar com o ecrã de selecção de um programa.

Se tiveres um parâmetro que pretendes manter escondido dos olhos dos utilizadores e mesmo assim poder ter acesso a ele (ex.: um pisco para entrar em modo de debug) podes usar a palavra mágica ABRACADABRA para lhe aceder.

Funciona assim:


DATA: unhide_parameters TYPE flag.

PARAMETERS: p_debug AS CHECKBOX.

AT SELECTION-SCREEN.
  CASE sy-ucomm.
    WHEN 'ABRACADABRA'.
      unhide_parameters = abap_true.
    WHEN 'NORMAL'.
      CLEAR unhide_parameters.
  ENDCASE.

AT SELECTION-SCREEN OUTPUT.
  LOOP AT SCREEN.
    IF screen-name = 'P_DEBUG' AND unhide_parameters IS INITIAL.
      screen-active = 0.
      MODIFY SCREEN.
    ENDIF.
  ENDLOOP.

Quando estiveres no ecrã de selecção basta escreveres ABRACADABRA no campo de comandos e o teu parâmetro secreto aparece magicamente. Se for preciso depois podes escrever NORMAL e ele torna a desaparecer.

O Abapinho saúda-vos.

Protocolo de erros da ALV Grid

A lei do menor esforço, esse grande axioma da Humanidade, tem, no mundo da programação, a particularidade de, em muitos casos, acabar por ser simplesmente a lei do esforço adiado. Porque é muito provável que algo que tenha sido desenvolvido de acordo com esta lei venha mais tarde a precisar de um grande esforço extra. Seja dos utilizadores que vão utilizar esse algo ou dos programadores que mais tarde terão de o manter.

Atire a primeira pedra aquele que não se deixou guiar por esta lei ao desenvolver este ou aquele programas.

Eu não atiro.

Ler o resto do artigo! »

PlantUML – Finalmente o UML dá para usar

Prólogo

Quando digo que gosto de usar diagramas de classes UML para documentar o meu código as pessoas acham que sou maluco.

Introdução

O UML ganhou má fama porque as pessoas pensam que primeiro se faz o diagrama de classes todo em UML e só depois o programa. Mas isso era em 1996, quando se achava que a primeira coisa a fazer era o desenho técnico todo, mesmo que na práctica ninguém nunca o fizesse.

Hoje em dia felizmente já não temos vergonha de dizer que o próprio acto de programar é já em si uma forma de desenhar.

Ler o resto do artigo! »

Classe para garantir segurança em programação dinâmica

No outro dia encontrei um programa que gerava um comando SQL com base em várias variáveis fixadas no código. Mas, por distracção ou ignorância, a alminha que fez aquilo achou que fazia sentido associar essas variáveis a símbolos de texto. Algo assim:

Ler o resto do artigo! »

Relatório de consistência da SALV

Às vezes uma SALV pode ter inconsistências que passam despercebidas a quem as programa. Um exemplo é uma estrutura com um campo WRBTR sem um campo de moeda associado:

Ler o resto do artigo! »

Entra numa transacção sem passar pelo ecrã de selecção

Mais uma vez o SAPGui me surpreende com mais um atalho obscuro que desconhecia.

Usemos a transacção de visualização de clientes XD03 como exemplo:

  1. Entras no ecrã de selecção da transacção escrevendo lá em cima /NXD03
  2. Introduzes o número do cliente que queres visualizar e carregas em ENTER
  3. Fazes lá o que tens a fazer e depois sais da transacção
  4. Mas… de repente… precisas de ver mais qualquer coisa desse cliente
  5. Em vez de /NXD03 fazes /*XD03
  6. Como que por magia apareces dentro da transacção já mostrando os detalhes do último cliente

É extraordinário como até hoje nunca ninguém me falou nisto.

Também já experimentei na FB03 por isso deve funcionar numa boa parte das transacções funcionais. Infelizmente já constatei que não funciona na que uso mais: SE24, SE38 e SE11. Pena.

Ide e espalhai a notícia!

Obrigado Sérgio Fraga pela dica.

Foto: Leonard J Matthews.

O Abapinho saúda-vos.

Copiar variante do Code Inspector para outro sistema

No meu cliente tenho três ambientes de desenvolvimento. Dantes tinha só um. E foi nesse que configurei a variante do Code Inspector que uso para correr o Abap Test Cockpit.

Quando apareceram os outros dois, antes de me decidir a replicar a variante à mão em cada um deles, decidi investigar um pouco. Para minha surpresa encontrei no GitHub o projecto upDOWNci que faz exactamente o que eu precisava: exportar e importar variantes do Code Inspector.

Trigo limpo, farinha amparo.

Obrigado Lars por teres feito esta singela mas útil ferramenta. Aliás, obrigado pelas dúzias de de ferramentas úteis que já ofereceste à comunidade. São notáveis.

O Abapinho saúda-vos.

Pasta física vs pasta lógica

Se num relatório chamado APP1 precisares de gravar um ficheiro numa determinada pasta do servidor (ex.: /export/app1/) e não quiseres que esta pasta seja um parâmetro, como fazes?

Ler o resto do artigo! »

Fechar automaticamente as portas que tu abres

Estas no editor. Introduzes um ( ou [ ou { ou ‘ e o SAP é mongo e não o fecha certo?

Ora bem,

Clica no ícone em baixo à direita que acede às opções do SAPGui onde adicionamos template.

Na opção formatting, activas o Enable Auto Brackets e voilá, o SAP começa a fechar automaticamente as portas que tu abres.

Mais valia que isto viesse activado de raiz.

Obrigado Sérgio Fraga pela dica.

O Abapinho saúda-vos.

Dantes o ABAP gostava de inverter datas

Todos os dias o ABAP me revela coisas novos. Às vezes coisas que mais valia eu nem saber que existem. Como esta.

A tabela T056P tem um campo com uma data. Fazendo um SELECT a esta tabela filtrando pela data não conseguia obter nada de jeito. Mas o código parecia correcto. Na SE16N descobri que o intervalo de datas também não funcionava conforme esperado: só apresentava resultados quando a data final era colocada no LOW e a inicial no HIGH. Bizarro.

Ler o resto do artigo! »

A transacção que queria chamar outra e não podia

O Manelinho criou a transacção ZFB01 associada ao programa ZFB01 que faz lá umas coisas e depois faz CALL TRANSACTION à FB01. A seguir veio o Joãozinho e correu a transacção ZFB01.

Conseguiu começar a corrê-la porque tem permissões para a transacção ZFB01. Mas a meio teve um erro porque não tem permissões para a transacção FB01.

Tanto o Manelinho como o Joãozinho sabiam que os administradores de sistema nunca na vida deles darão ao Joãozinho autorizações para correr a FB01.

Ler o resto do artigo! »

ASSERT vs Excepção

Quem lê o Abapinho sabe quanto gosto de classes de excepções. No entanto, este não é o único mecanismo que o ABAP disponibiliza para controlo de erros.

Há outro, chamado ASSERT, que devia ser mais usado, e que hoje trago à baila.

Ler o resto do artigo! »

Obtém o texto mais profundo de cadeia de excepções

Nos dias que correm se não estás a usar objectos és totó.

Se usas objectos, espero que estejas a seguir a boa práctica de usar classes de excepções.

E se usas classes de excepção é bom que entendas a melhor forma de as usar, particularmente as vantagens de as encadear.

Com tudo isto esclarecido, chegamos ao que nos traz aqui hoje. No artigo sobre cadeias de excepções mostrei como, para obter o texto da excepção mais profunda, a que foi inicialmente espoletada, se pode fazer um DO WHILE:

Ler o resto do artigo! »


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