Concatenemos

images/thumbnail.jpg - Thumbnail

Temos duas variáveis:

DATA palavra1 TYPE string.
DATA palavra2 TYPE string.
DATA: frase TYPE string.

palavra1 = ‘isto’.
palavra2 = ‘aquilo’.

E queremos concatená-las metendo entre elas a palavra ‘mais’ e, claro, separando-as por espaços.

Comunicação por evento entre programas

images/thumbnail.jpg - Thumbnail

Na mitologia grega a forma de comunicação mais frequentemente utilizada pelos deuses para comunicar com os mortais era o estupro. Estupravam por dá cá aquela palha.

O mais parecido que temos com estupro no ABAP é o comando SUBMIT, que é também a forma mais comum de comunicação entre dois programas.

Escrever em muitas linhas ao mesmo tempo

images/thumbnail.jpg - Thumbnail

O editor de ABAP tem coisas que não lembram ao diabo. Até dá para escrever ao mesmo tempo em várias linhas.

Onde está o booleano?

images/thumbnail.jpg - Thumbnail

Não está.

Mas eles - os senhores que fazem e refazem o ABAP propriamente dito - vão tentando remediar a situação.

Olha por exemplo esta nova funcionalidade.

LOOP at tbl ASSIGNING <linha> CASTING

images/thumbnail.jpg - Thumbnail

Sabias que podes fazer LOOP de uma tabela interna com uma estrutura A para dentro de uma estrutura do tipo B?

INNER JOIN vs FOR ALL ENTRIES vs RANGES artificiais

images/thumbnail.jpg - Thumbnail

Uma vez que as operações de dados estão muito mais optimizadas no servidor de base de dados do que no ABAP, é sempre preferível o primeiro. FOR ALL ENTRIES só deve ser usado quando não se conseguir fazer INNER JOIN (como com a BSEG por exemplo). Quando possível, usar RANGES artificiais é preferível a usar FOR ALL ENTRIES mas é preciso cuidado para não ultrapassar o limite do parser de SQL. Depende do servidor de base de dados mas regra geral é de evitar RANGES com mais de 1000 linhas. Claro que ao usar FOR ALL ENTRIES nunca te podes esquecer de verificar que a tabela interna não está vazia caso contrário todas as entradas da tabela serão lidas.

Não usarás CHECKs directamente em user-exits

images/thumbnail.jpg - Thumbnail

É comum encontrar o comando CHECK em user-exits. A trágica consequência disto é que, se o CHECK falha, nenhum do código que se segue a esse CHECK será alcançado. Como é comum (ainda que má prática) que num user-exit sejam tratados vários assuntos diferentes, um CHECK relacionado com um assunto pode inibir o acesso aos assuntos seguintes. Uma forma simples de evitar este risco é, como sempre aconselho, encapsular o código em rotinas.

Indentar em bloco

images/thumbnail.jpg - Thumbnail

Para indentares um bloco de linhas só com teclas faz assim:

Usarás LIKE LINE OF itbl

images/thumbnail.jpg - Thumbnail

Ao declarar uma estrutura que vai receber dados de uma tabela interna, em vez de a declarares directamente com o seu tipo, usa LIKE LINE OF. Assim, não só ficará claro que estão relacionadas como, se mudares o tipo da tabela interna, não terás de te preocupar em mudar também o tipo da estrutura.

Limpar os buffers de uma sessão SAP

images/thumbnail.jpg - Thumbnail

Todos os dias aprendo novos comandos para introduzir no campo da transacção. Hoje aprendi uns que resolvem um problema que, ainda que raramente, já me aconteceu no passado.

Vê lá se isto já te aconteceu: fazes uma alteração a um texto de um elemento usado numa tabela que editas a partir da SM30. Mas quando vais à SM30 o texto antigo continua lá. Activas vezes sem conta, sais e entras da transacção e nada.