Categoria > Dicas
Patrocinado por
Patrocinado por Inetum

Saltos dentro do editor ABAP

images/thumbnail.jpg - Thumbnail

Nunca te aconteceu estar a programar num programa ABAP daqueles que parecem um testamento com centenas e centenas de linhas e teres de estar sempre a saltar entre uma zona e outra do código? Até há uns dias eu, ignorante, usava o PageUp e o PageDown para saltar entre os dois sítios e perdia montes de tempo à procura do lugar exacto do código que me interessava. Mas entretanto o Sérgio Fraga ensinou-me que o editor ABAP tem uma funcionalidade chamada bookmarks que permite evitar o disparate de andar a subir e a descer às apalpadelas.

CASE de pernas para o ar

images/thumbnail.jpg - Thumbnail

Qual é a tua cor preferida? SELECTION-SCREEN BEGIN OF BLOCK b1. PARAMETERS: p_azul BUTTONGROUP GROUP COR DEFAULT 'X', p_verde BUTTONGROUP GROUP COR, p_roxo BUTTONGROUP GROUP COR. SELECTION-SCREEN END OF BLOCK b1. Se respondeste azul sobrevives e podes atravessar a ponte. De qualquer das formas, em ABAP costuma fazer-se o seguinte para descobrir a cor que o utilizador escolheu: IF p_azul = 'X'. lv_cor = 'AZUL'. ELSE IF p_verde = 'X'. lv_cor = 'VERDE'.

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.

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

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) :

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.

Indicador de progresso

images/thumbnail.jpg - Thumbnail

Sabes aquelas barras de progresso que vão indicando quanto falta para terminar um processo? Aquelas que às vezes quando chegam ao fim voltam ao princípio e te deixam frustrado e baralhado sem entender para que servem afinal? Eis como as podes usar num programa ABAP. DATA: lv_texto TYPE char40, lv_valor type i. DO 10 TIMES. WAIT UP TO 1 SECONDS. CLEAR lv_texto. lv_valor = sy-index * 10. lv_texto(3) = lv_valor. CONCATENATE lv_texto '%!

Executa um comando no teu computador

images/thumbnail.jpg - Thumbnail

Imagina que queres executar um programa no teu PC a partir de um programa ABAP. Não sei porque carga de água quererás tu fazer isto mas ok, se queres mesmo fazer, é assim: DATA: i_returncode TYPE i. CALL FUNCTION 'GUI_EXEC' EXPORTING command = 'Notepad.exe' parameter = 'eu_sou_um_texto.txt' IMPORTING returncode = i_returncode. É provável que dê para fazer coisas boas com isto. Mas está à vista a grande javardice que se pode fazer por isso pensa bem antes de começares para aí a escangalhar os computadores dos utilizadores todos.