Patrocinado por
Patrocinado por Inetum

As funções *_SINGLE_READ

images/thumbnail.jpg - Thumbnail
Quando se quer obter um único registo de uma tabela da base de dados é costume usar-se o SELECT SINGLE que, como toda a gente sabe, na sua forma mais básica reza assim: SELECT SINGLE * FROM KNA1 WHERE KUNNR = '1234567890'.

RICEF não é arroz transgénico nem faz parte da ONU

images/thumbnail.jpg - Thumbnail
O RICEF é um acrónimo do mundo SAP que aparentemente não foi inventado pela SAP. É, por isso, um acrónimo não oficial. O que não faz dele um acrónimo ilegal ou clandestino visto que tem vindo a tornar-se um termo de uso corrente em cada vez mais projectos. RICEF significa Report , Interface , Conversion , Enhancement , Form e, basicamente, refere-se a qualquer tipo de desenvolvimento que seja necessário num projecto SAP.

CTRL-clique para seleccionar uma palavra

images/thumbnail.jpg - Thumbnail
Uma dica simples mas valiosa: em qualquer sítio do SAP GUI - incluindo o editor de ABAP - para seleccionar uma palavra basta fazer CTRL-clique em cima dela. Fixe, não? Infelizmente não funciona no GUI Java do Mac :-( (Obrigado ao Sérgio Fraga pela dica) O Abapinho saúda-vos.

RANGE instantâneo - É só juntar água

images/thumbnail.jpg - Thumbnail
Vou ensinar-te uma fórmula mágica para gerar um RANGE em que praticamente é só juntar água. Imagina que queres fazer um RANGE a partir de uma seleção da base de dados para depois o utilizar num outro SELECT qualquer. Claro que o poderias fazer assim: DATA: lt_kunnr TYPE STANDARD TABLE OF kunnr, lr_kunnr TYPE RANGE OF kunnr, wa_kunnr LIKE LINE OF lr_kunnr. FIELD-SYMBOLS: <kunnr> LIKE LINE OF lt_kunnr. SELECT kunnr INTO TABLE lt_kunnr FROM kna1.

LOOP ASSIGNING em vez de LOOP INTO

images/thumbnail.jpg - Thumbnail
No princípio era o INTO. Aliás, no princípio nem sequer era o INTO.

Soneca

images/thumbnail.jpg - Thumbnail
Volta não volta é preciso meter um programa a dormir. E como em quase tudo, há várias formas de o fazer, e umas formas são melhores do que outras. A forma mais standard de conseguir isto em ABAP é a seguinte: WAIT UP TO 10 SECONDS. A vantagem do WAIT UP TO N SECONDS é que o processo é libertado durante estes 10 segundos, ficando assim disponível para quem o quiser apanhar.

Várias versões da mesma história

images/thumbnail.jpg - Thumbnail
Toda a gente sabe que as versões do SAP são uma grande confusão. Os senhores de Heidelberg que brincam a dar os nomes às coisas lá deles ou são uns caprichosos, ou andam a gozar connosco, ou devem andar sempre à bulha. Aqui fica uma tabelinha para ajudar a deslindá-las: Ano | UI | Edição | Versão | Versinha | BASIS | WebAS | ECC | NetWeaver —|—|—|—|—|—|—|—|— | Terminal

Partida... lagarta... fugida!

images/thumbnail.jpg - Thumbnail
Senhoras e senhores, meninos e meninas, a corrida está prestes a começar. Introdução Apresento-vos as 4 participantes. São 4 tabelas internas, de diferentes raças e credos, que se vão pelejar pelo título atlético do LOOP em velocidade. Aqui estão elas: Concorrente 1: DATA: LT_ITEM TYPE TABLE Concorrente 2: DATA: LT_ITEM_HASHED TYPE HASHED TABLE Concorrente 3: DATA: LT_ITEM_SORTED TYPE SORTED TABLE Concorrente 4: DATA: LT_ITEM TYPE TABLE + INTO INDEX

Macros globais

images/thumbnail.jpg - Thumbnail
Noutro artigo falámos de macros, uma funcionalidade relativamente obscura e pouco utilizada que tanto pode ser útil como criar uma grande salganhada. Mas estas não são as únicas macros do ABAP. Há outras, ainda mais obscuras e com ainda maior potencial de enfarelhamento de um sistema: as macros globais. Nem sei se revele isto de tão esquisito que é… Mas também não me parece bem escondê-lo… Seja, revelarei. É possível definir macros a nível global do sistema que podem ser utilizadas em qualquer programa ABAP.

Começar com o pé direito

images/thumbnail.jpg - Thumbnail
Quando se faz login no SAP normalmente vai parar-se ao menu. Mas pode usar-se o módulo de função NAVIGATION_SET_START_TCODE para pré-definir uma transacção inicial. Vale o que vale, mas é melhor saber que existe do que não saber que existe e ainda melhor do que sabe que não existe. Quem sabe dê jeito a alguns utilizadores. Existe também o módulo de função NAVIGATION_GET_START_TCODE para ver qual está pré-definida. O Abapinho saúda-vos.

Nem o Luís de Matos faria melhor

images/thumbnail.jpg - Thumbnail
Às vezes acontece querermos aceder a uma transacção e não termos permissões. É uma chatice. Felizmente existe o módulo de função ALINK_CALL_TRANSACTION que alivia a situação. Mas usa com cuidado, não vá alguém zangar-se. Bem-vindo ao lado negro do Abapinho. Se disserem que fui eu que disse, nego tudo. (obrigado aoBohman pela foto) Actualização: com este módulo de função também lá chegas: CALL_TRANSACTION_FROM_TABLE. Nova actualização: se os outros falharem tenta este módulo de função: RS_HDSYS_CALL_TC_VARIANT (limpando a flag AUTHORITY_CHECK).

Bate às portas certas

images/thumbnail.jpg - Thumbnail
Para tua conveniência, aqui tens as portas TCP/IP utilizadas pelo NetWeaver Application Server ABAP e pelo Internet Connection Manager (ICM) : <table border="0"> <thead> <tr> <th>Serviço</td> <th>Número porta/Nome serviço</td> <th>Por defeito</td> <th>Fixo</td> </tr> </thead> <tbody> <tr> <td>Dispatcher</td> <td>32NN/sapdpNN</td> <td>3200</td> <td>x</td> </tr> <tr> <td>Gateway</td> <td>33NN/sapgwNN</td> <td>3300</td> <td>x</td> </tr> <tr> <td>Gateway</td> <td>48NN/sapgwNNs</td> <td>4800</td> <td>x</td> </tr> <tr> <td>ICM HTTP</td> <td>80NN</td> <td>8000</td> <td> </td> </tr> <tr> <td>ICM HTTPS</td> <td>443NN</td> <td>Inactivo</td> <td> </td> </tr> <tr> <td>ICM SMTP</td> <td>25</td> <td>Inactivo</td> <td> </td> </tr> <tr> <td>Message Server</td> <td>36NN/sapmsSID</td> <td>3600/sapmsC11</td> <td> </td> </tr> <tr> <td>Message Server HTTP</td> <td>81NN</td> <td>8100</td> <td> </td> </tr> <tr> <td>Message Server HTTPS</td> <td>444NN</td> <td>Inactivo</td> <td> </td> </tr> <tr> <td>Central System Log</td> <td>UDP: 12NN, 13NN, 14NN, 15NN</td> <td>Inactivo</td> <td> </td> </tr> </tbody> </table> Para saberes mais consulta este documento da SAP.

ABAP Ninja

images/thumbnail.jpg - Thumbnail
Uma das grandes novidades do ERP 6.0 é a Enhancement Framework que é uma espécie de “amigo do senhorio” que permite dar marteladas em todas as paredes do SAP sem escavacar a pintura. Infelizmente ainda há muito pouca documentação sobre isto e é sempre o cabo dos trabalhos para encontrar o Enhancement Point adequado à martelada desejada. O site ABAP Ninja tenta ajudar. É um motor de pesquisa de Enhancements. Dizem que têm mais de 13.

Santo Isidoro de Sevilha

images/thumbnail.jpg - Thumbnail
Não sabes a quem rogar as tuas preces nos momentos de desespero? Já podes ficar descansado. Os programadores têm um santo. Santo Isidoro de Sevilha. Um senhor muito culto e inteligente que respirou o ar espanhol dos séculos VI e VII que, como diz a Wikipédia, “escreveu sobre matemática, astronomia, medicina, anatomia humana, zoologia, geografia, meteorologia, geologia, mineralogia, botânica e agricultura, não acrescentando nada de inovador ou original, não realizou qualquer experiência, não fez novas observações ou reinterpretações e não descobriu nada, mas a influência na Idade média e no Renascimento foi grande”.

LOOP FROM INDEX

images/thumbnail.jpg - Thumbnail
É muito fácil meter os pés pelas mãos no que toca a performance quando se manipula tabelas internas. Principalmente quando elas são assim a tender para o grandalhonas. É até comum que estes problemas só surjam passados uns meses, quando as tabelas tendem a crescer com o tempo. Por exemplo, quando fazes loop a duas tabelas, uma de cabeçalhos e outra de itens, fazes assim? LOOP AT itab1 ASSIGNING <fs1>. LOOP AT itab2 ASSGNING <fs2> WHERE field1 = <fs1>-field1.