Patrocinado por
Patrocinado por Inetum

Request Based Debugging

images/thumbnail.jpg - Thumbnail

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= | = 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.