Evitar mensagens dinâmicas

Qual é, digam lá, a melhor coisinha que o ABAP tem? É, digo eu, poder fazer where used em cima de tudo o que mexe.

E no entanto, esta maravilhosa funcionalidade só funciona maravilhosamente quando as coisas não são invocadas dinamicamente. Eu uso o where used amiúde para descobrir onde uma determinada mensagem está a ser usada. Ora não é nada incomum encontrar chamadas dinâmicas a mensagens, principalmente em casos onde as mensagens não são enviadas directamente para o utilizador mas sim, por exemplo, para o Application Log. Neste caso é normal encontrar coisas tipo:

READ TABLE blablabla TRANSPORTING NO FIELDS

Por vezes ao fazer READ TABLE a uma tabela interna queremos apenas verificar se um determinado registo existe, e não nos preocupamos com os dados retornados. Algo tipo:

READ TABLE lt_kna1 INTO wa_kna1 WITH KEY kunnr = l_kunnr.
CHECK SY-SUBRC = 0.

Ora já que a estrutura WA_KNA1 não vai ser necessária de qualquer forma, mais vale não a usar, usando antes a opção TRANSPORTING NO FIELDS:

READ TABLE lt_kna1 TRANSPORTING NO FIELDS WITH KEY kunnr = l_kunnr.
CHECK SY-SUBRC = 0.

O Abapinho saúda-vos.

Pesquisa SAP no Firefox e no Internet Explorer

Quando se faz desenvolvimentos em ABAP, pesquisar na SAP Community ou nas notas e na documentação da SAP é uma actividade recorrente. Como tal, quanto mais fácil for fazê-lo, melhor. Ideal seria que fazê-lo fosse tão fácil como pesquisar no Google. Ora uns senhores chamados JNYSolutions tornaram isso possível criando plugins de pesquisa para o Firefox e o Internet Explorer que adicionam a SDN, as notas e a documentação da SAP como motores de busca. São fáceis de instalar e fáceis de usar.

Verificar pasta

Eis uma função para verificar se uma pasta existe e se nela temos permissões de escrita.

PARAMETERS: p_dir TYPE btctext80 DEFAULT '/usr/sap/trans'.

CALL FUNCTION 'PFL_CHECK_DIRECTORY'
  EXPORTING
    directory = p_dir
    write_check = 'X'
* FILNAME = ' '
  EXCEPTIONS
    pfl_dir_not_exist = 1
    pfl_permission_denied = 2
    pfl_cant_build_dataset_name = 3
    pfl_file_not_exist = 4
    others = 5.

CASE sy-subrc.
  WHEN 0.
    WRITE /: 'Directory:', p_dir, ' exists'.
  WHEN 1.
    WRITE /: 'Directory does not exist:', p_dir.
  WHEN 2.
    WRITE /: 'No permission to write in directory:', p_dir.
ENDCASE.

Obrigado Renato Oliveira.

O Abapinho saúda-vos.

Testar na SE37 não grava dados? Grava.

Uma forma prática de aprender a usar um módulo de funções ou verificar se este nos é útil é através da funcionalidade de teste da transacção SE37. Escolhe-se o módulo de função, faz-se F8 (Executar) e tem-se uma forma interactiva de testar uma função.

Isto é óbvio.

O que não será óbvio para toda a gente é que este teste não faz COMMIT à transacção e, por isso, qualquer alteração que a função possa fazer à base de dados - como gerar um documento por exemplo - não é gravada.

A transacção N

É intrigante o porquê de, nos dias que correm, a transacção SE16 continuar a ser tão utilizada, quando já existe há tantos anos uma muito melhor, a SE16N.

A transacção SE16N tem mais:

  • sainete: tem um interface mais dinâmico e sofisticado;

  • simpatia: mostra em simultâneo a descrição funcional e o nome técnico dos campos;

  • sabedoria: mostra em simultâneo o valor interno e externo dos campos com rotinas de conversão;

E pode, vejam só, ser também invocada através da transacção N.

O Abapinho saúda-vos

Bem-vindo ao Abapinho, um blog sobre ABAP em português.