"
Apoiado por

Request Based Debugging

Se em debug consultares a variável de sistema UNAME dentro de uma chamada RFC podes achar estranho encontrar um utilizador que não o teu. O que acontece é que o sistema adopta um utilizador específico a chamadas remotas e uma nova sessão é iniciada. Uma nova sessão implica um novo contexto de execução e, consequentemente, todos os nossos breakpoints, já estrategicamente colocados, não serão reconhecidos.

Este problema pode dificultar um debug simples obrigando-nos a percorrer o código à procura DAQUELA chamada remota ÀQUELE sistema em particular.

A SAP tem a solução.

Para evitar este tipo de situações a SAP disponibiliza, desde a Netweaver Release 7.02, a funcionalidade de debug por Terminal ID. O Terminal ID identifica o utilizador Microsoft Windows que iniciou a sessão e é armazenado no registo do Windows sob a chave HKEY_CURRENT_USER\Software\SAP\ABAP Debugging.

Este identificador único permite que o debugger não se atrapalhe com as mudanças de sessão e responda a todos os breakpoints externos (subscritos a um determinado Terminal ID) com a tranquilidade a que estamos habituados.

Os passos para iniciar uma sessão de debugging por terminal ID são os seguintes:

  1. Login no sistema onde pretendemos fazer debug;
  2. Abrir o objecto a ser testado no editor ABAP (SE38, SE80, SE37, SE24) e introduzir os breakpoints externos pretendidos;
  3. Aceder ao menu de debugging e escolher a opção de debug por ID terminal:
    Utilitários>Configurações>Editor ABAP>Depuração
    Nota: Se ainda não existir, um novo ID será gerado e armazenado no registo do Windows;
  4. Ao aceitar o sistema irá perguntar se os breakpoints que já existem deverão continuar activos. A reposta é sim. Neste momento já temos breakpoints externos associados a um terminal ID;
  5. No sistema de origem podemos agora executar o programa que chama o nosso RFC em debug mas, ao invés de utilizar o comando /h utilizamos o comando /htid indicando ao debug que deve parar em todos os breakpoints associados ao meu terminal ID.

Esta é uma funcionalidade muito prática e pode também ser aplicada a chamadas HTTP. Mas para este cenário será necessária a instalação de um plug-in no browser que permita a propagação do terminal ID às camadas de baixo.

Nota: Neste cenário assumimos que o utilizador que corre o programa é o mesmo que introduz os breakpoints no RFC a testar pois assim, consequentemente, o terminal ID será o mesmo. Podem no entanto haver dois utilizadores distintos e para estes casos podemos usar os seguintes comandos para activar/desactivar o debug com base em terminal ID:

/hset tid=<tid> <tid> = do utilizador que introduziu os breakpoints
/hget tid Exibir o terminal ID assignado
/hdel tid Eliminar a assignação a um terminal ID

O Abapinho agradece a Miguel Jorge por ter escrito este artigo.

Obrigado Howard Dickins pela foto.

Deixe um comentário


Acerca do Abapinho
O Abapinho é suportado pelo WordPress
Artigos (RSS) e Comentários (RSS).