Patrocinado por
Patrocinado por Inetum

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.

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.

Não farás COMMIT em user-exits

images/thumbnail.jpg - Thumbnail
Não faças COMMIT dentro de user-exits. E garante também que rotinas que possas chamar a partir de user-exits não o fazem.

Modelo automático só com CTRL-SPACE

images/thumbnail.jpg - Thumbnail
Claro que já conheces o botão “Modelo” no editor de ABAP que permite introduzir automaticamente modelos para módulos de função, chamadas a métodos e outros. Mas o novo editor agora cresceu um bocadinho (já só está 10 anos atrasado em relação ao Eclipse em vez de 20) e já permite completar automaticamente alguns comandos através do atalho CTRL-SPACE.

Considerarás usar clusters SM34

images/thumbnail.jpg - Thumbnail
Se um desenvolvimento necessitar de mais do que uma tabela de parametrização, considera agrupar as tuas vistas de manutenção num “cluster”. Assim será mais intuitivo mantê-las. Isto fará ainda mais sentido se umas dependerem de outras uma vez que na definição do “cluster” estas relações podem ser explicitadas. Exemplo: Como encavalitar tabelas

Não farás SELECT *

images/thumbnail.jpg - Thumbnail
Tenta seleccionar sempre apenas os campos que vais realmente usar. Escolher todos é um desperdício de recursos. Excepção feita ao uso das FM *_SINGLE_READ que, embora leiam os campos todos, fazem cache dos dados, sendo por isso ainda assim mais rápidos de usar quando usados múltiplas vezes com a mesma chave. Se queres apenas verificar que um registo existe, selecciona apenas um campo, e se possível aquele que estás a usar como critério, evitando assim declarares uma variável extra.

Usarás uma tabela de constantes

images/thumbnail.jpg - Thumbnail
Sempre que achares que um valor que estás a usar num programa pode mudar e não o puderes tornar um parâmetro de entrada ou do ecrã de seleccção, guarda-o numa tabela de constantes (ex: ZCONSTS). Esta tabela nunca deverá ser usada directamente. Em vez disso, cria uma classe ZCL_CONSTS que aceda a ela e usa sempre esta classe para obter as tuas constantes. Como é mostrado neste artigo: Não caias na tentação de usar a T900 ou outras tabelas do género para este propósito.

Desbloquear objectos numa ordem de transporte

images/thumbnail.jpg - Thumbnail
Quando alteras um objecto e o guardas numa ordem de transporte ele normalmente fica bloqueado. Dentro da ordem de transporte é podes bloquear objectos que não estejam já bloqueados que não estão já bloqueados noutra ordem. Mas, uma vez bloqueados, como é que se desbloqueiam?

Criarás e adoptarás bibliotecas de ferramentas comuns

images/thumbnail.jpg - Thumbnail
Código que seja usado comummente deve estar disponível centralmente, se possível guardado em pacotes bem identificados (ex: ZFERRAMENTAS) para que seja facilmente encontrados e transportados. Há muito código já disponível na Internet que permite executar várias funções comummente necessárias (ex: ABAP2XLSX). Adopta-o; Para as tuas tarefas mais comuns, desenvolve ferramentas que possas reutilizar, juntando-as à biblioteca central; Divulga a biblioteca entre os colegas do teu projecto para evitar que venham a perder tempo a criar código duplicado;