"
Etiqueta > estilo
Apoiado por

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! »

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! »

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! »

Como devolver um REF TO data sem fazer asneira

Tenho usado cada vez mais referências em ABAP.

Primeiro usava REF TO só para classes mas vou percebendo cada vez mais as vantagens de as usar também para estruturas de dados. Mas, tal como acontece em C++, há que ter cuidado quando se lida con referências para dados pois facilmente a coisa pode dar para o torto.

Neste artigo tento mostrar como usar e como não usar o REF TO data. Comecemos por ver um exemplo de como não usar:

Ler o resto do artigo! »

$PACOTES locais

Todos os objectos criados em SAP têm de estar associados a um pacote.

Até recentemente, quando eu queria fazer um teste rápido criava o objecto no pacote $TMP. Tinha assim a garantia de este nunca viria a ser transportado.

Mas por vezes há necessidade de criar coisas no sistema de desenvolvimento que não pretendemos nunca vir a transportar mas que queremos que lá existam eternamente. Como o ZSAPLINK e o abapGit, por exemplo. Mas se as associarmos todas as pacote $TMP fica uma valente confusão.

Ler o resto do artigo! »

INSERT wa INTO itbl REFERENCE INTO ref. Bug?

Tenho usado cada vez mais referências em ABAP. Primeiro usava REF TO só para classes mas agora vou percebendo as vantagens de as usar também para estruturas de dados.

Recentemente descobri um comportamento muito lamentável do seguinte comando:


INSERT wa INTO itbl REFERENCE INTO ref.

Mas antes de me queixar sobre isso, dou um bocado de contexto.

Ler o resto do artigo! »

Devíamos ser responsabilizados pela merda que fazemos

Se, ao construir uma ponte, um engenheiro civil fizer mal as contas a ponte cai. Mas não é só a ponte que cai. Esse engenheiro civil provavelmente também cai. Ou pelo menos desequilibra-se. Porque quando fez o projecto da ponte assinou-o, assumindo responsabilidade pelo que fez.

Nós os programadores ABAP não temos esses problemas.

Ler o resto do artigo! »

GROUP BY em LOOPs a tabelas internas

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! »

Eu te baptizo em nome do ABAP

Quando aprendemos ABAP ensinam-nos uma série de regras sobre como dar nomes a variáveis. Ainda que nem todos acabem por dar nomes iguais, ainda assim partilham-se algumas ideias rígidas:

  • As variáveis locais começam por L: L_BUKRS;
  • As variáveis globais começam por G: G_MODE;
  • As tabelas internas têm de ter lá um T_: LT_MARA;
  • As estruturas têm de ter lá um S_: LS_MARA;
  • As referências para objectos começam por R_: R_CUSTOMER;
  • Os parâmetros input devem começar por I, os output por O, os changing por C e os returning por R.
  • E a mais estúpida de todas, os field-symbols devem começar por FS_: <FS_MARA>.

No início do século XXI isto até fazia sentido (excepto a dos field-symbols que já na altura era tão estúpida como escrever a palavra “lápis” em todos os lápis que tivermos). Hoje quase já não. Passo a explicar.
Ler o resto do artigo! »

CONCATENATE LINES OF itbl

Se queres serializar um conjunto de strings que tens guardadas numa tabela interna tens duas formas de o fazer. Uma ranhosa e outra cheia de estilo.

Ler o resto do artigo! »

Modificar uma campo em todas as linhas de tabela interna

O que vos vou mostrar não é propriamente uma novidade. Até já foi usado antes no Abapinho. Mas como se continua a ver por aí muita gente a fazer LOOPs a tabelas internas para alterar um campo, achei que valia a pena recordar.

Tens uma tabela com um milhão e duzentas mil linhas e queres que o campo ICON tenha sempre o valor ‘@FM@’.

Em vez de fazeres isto:


LOOP AT lt_data ASSIGNING <data>.
  <data>-icon = '@FM@'.
ENDLOOP.

Experimenta fazer antes isto:


ls_data-icon = '@FM@'.
MODIFY lt_data FROM ls_data TRANSPORTING icon WHERE icon <> 'PATO DONALD'.

Como é óbvio, na condição podes escolher outra personagem qualquer dos Tio Patinhas.

Obrigado Sérgio Serra por sugerires que poderia ser interessante ensinar isto.
Obrigado Andrew Becraft pela foto.

O Abapinho saúda-vos.

DELETE vs CLEAR vs REFRESH vs FREE

DELETE
CLEAR
REFRESH
FREE

São várias maneiras de limpar os dados de uma tabela interna.
À partida parecem iguais.
Mas não são.

Ler o resto do artigo! »

CASE dentro de SELECT (brevemente em todos os SAPs)

Prepara-te porque em breve terás muitas surpresas. É que o ABAP está a aprender troques novos. Repara neste:


CONSTANTS:
  lc_menina TYPE STRING VALUE ‘MENINA',
  lc_menino TYPE STRING VALUE ‘MENINO’,
  lc_senhor TYPE STRING VALUE ’SENHOR’,
  lc_senhora TYPE STRING VALUE ‘SENHORA’.

SELECT nome,  
 CASE
   WHEN sexo_id = ‘M' AND idade < 18 THEN @lc_menino
   WHEN sexo_id = ‘F’ AND idade < 18 THEN @lc_menina
   WHEN sexo_id = ‘M' AND idade >=18 THEN @lc_senhor
   WHEN sexo_id = ‘F’ AND idade >=18 THEN @lc_senhora
 END AS titulo
FROM zpessoa
WHERE pessoa_id = @pessoa_id
INTO CORRESPONDING FIELDS OF @lt_pessoas.

Só tens de esperar pela versão 7.40.

Obrigado Sérgio Fraga pela dica.

Obrigado Anil Wadghule pela foto.

O Abapinho saúda-vos.


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