SAP Gateway Zero-to-Hero — Pt.4
Internet Communication Framework (ICF)
E aweeeeeeee meu povo!!!!!!
E aqui estamos, na parte quatro! Depois desse monte de textos, ainda não será agora que você irá colocar as mãos na massa e criar seu projeto de serviço no SAP Gateway, mas isso é por um bom motivo. Prometo!
Quando você iniciar suas atividades no gateway perceberá que boa parte da sua rotina, ao menos no começo do desenvolvimento, estará envolvida em transações relacionada a um framework de comunicação com a internet.
Internet Communication Framework — ICF
O ICF permite que você se comunique com o sistema SAP usando protocolos padrões da Internet (como o HTTP, o HTTPS e o SMTP), o que já é muito útil pois lhe tornará capaz de consumir ou criar serviços restful que poderão ser consumidos.
Para entender melhor, o ICF é um componente integrado do Application Server, o que significa que, diferentemente do SAP Gateway, não será necessário instalar nada. Isso torna mais fácil você iniciar suas experiências na criação e consumo de serviços.
O ICF oferece os seguintes benefícios:
- Flexibilidade: usando o ICF, o usuário pode abrir uma conexão a um sistema SAP pela Internet a partir de qualquer local;
- Como citado anteriormente, o esforço necessário para configuração é relativamente pequeno — Lembrando que o SAP Gateway também é simples, mas este é ainda mais;
- Segurança: o protocolo HTTPS garante transferência segura de dados. O nível de segurança é o mesmo que com a comunicação RFC/SNC;
- E o melhor: você consegue utilizar o seu minisap para isso!
Mãos a obra
A implementação de um nó neste framework é bem simples, e vou descrever como isso funciona logo abaixo:
- Vá a transação SICF
2. Então, execute a transação, e você terá a seguinte tela:
Reparem na imagem abaixo. Dentro do nó public, existe um nó chamado ping. Este serviço é muito interessante quando você quer descobrir se pelo navegador conseguiria acesso ao servidor SAP.
3. Vamos agora criar o nosso próprio nó para que então possamos criar o nosso serviço. Para isso, clique com o botão secundário do mouse e então clique na opção: Subelemento novo em cima do nó SAP.
Logo em seguida será apresentada a seguinte tela:
4. Após a confirmação você será levado para a tela abaixo. Serão apresentados vários recursos, mas nesse caso vamos ser bem diretos, pois o que desejamos é ter o nosso serviço de forma prática.
5. Clique na aba Lis. Manipuls. (HandlerList).
Essa lista de manipulação é muito interessante: quando você chamar um serviço lá do seu navegador, esse será basicamente o primeiro ponto disponível para que você capture a requisição. Então, neste ponto, vamos fazer um teste bem simples.
6. Vamos na SE24 e criar uma classe. Sim, precisa ser uma classe pois, caso contrário, você obteria o seguinte erro:
Uma vez criada a classe na SE24, informe-a para o framework. Simples assim. Apenas crie uma classe (não se preocupe com métodos ou atributos nesse momento), ative-a e então informe seu nome como na imagem abaixo:
É, caros amigos, a SAP realmente pensou em tudo. Se você quiser debugar o framework para entender o que aconteceu vale muito a pena, mas se não quiser eu vos lhe contar o que houve.
Para que essa lista de manipulação possa funcionar, a SAP utiliza o padrão strategy. Para que isso funcione, ela espera que você implemente a interface IF_HTTP_EXTENSION. Vejamos então o que tem demais nesta interface:
Perceba que é uma interface muito simples, com apenas um comportamento que é bastante sugestivo (HANDLE_REQUEST) que, como o próprio nome já diz, irá manipular qualquer requisição que seja feita ao servidor SAP.
Existem também alguns atributos que serão muito úteis em assuntos mais avançados, como por exemplo para que possamos entender o estado de uma requisição enquanto ocorre seu processamento.
Então, vamos implementar essa interface na nossa classe, que no meu exemplo é a classe Z_CL_BAR8_SERVICE_TEST.
Agora, já podemos ativar a nossa classe e então voltar para a SICF para que possamos ativar o nosso serviço.
7. Com classe ativada, não devemos ter mais problemas em preencher a lista de manutenção.
Feito isso, podemos voltar para a tela anterior e então ativar o serviço para realizarmos nossos testes.
8. Para testar o seu serviço, volte na implementação do seu break-point e então crie um ponto de parada externo. Se você não tem experiência em debugar chamadas RFC, saiba que inserir apenas uma parada de sessão não irá funcionar. Então, faça como na imagem abaixo:
Agora, clique com o botão secundário do mouse em cima do serviço que foi criado, e então clique em Testar Serviço.
No meu caso, o SAP irá pedir permissão para utilizar o meu navegador e, quando o navegador abrir, será apresentada a seguinte tela:
Inserindo o usuário e senha (de preferência o mesmo que você utilizou para inserir o ponto de parada externo), o navegador irá realizar a requisição e, então, o seu SAP irá abrir automaticamente a seguinte tela:
Pronto, agora você já está apto a realizar requisições diretamente do seu navegador e então cair já dentro do SAP. Mas que tal explorarmos mais um pouco?
E se, ao requisitar um serviço, ele retornasse uma mensagem de sucesso para o navegador? Assim como o serviço de PING havia feito. Voltemos para o método Handle_Request da nossa classe Z_CL_BAR8_SERVICE_TEST.
Lembra que eu havia comentado a respeito de alguns atributos da interface If_HTTP_EXTENSION? Eles começam a ser muito úteis agora, pois nesse momento da requisição eles estão recheados de informação e eu também posso incrementá-los com mais informações. Por exemplo:
#Tips&Tricks
Nesse trecho iremos ver sobre:
- Lista de manipulação (HandlerList);
- Encurtar a URI do seu serviço;
- Cache;
- Manipulando o cabeçalho da requisição.
Quando estamos na SICF, perceba que ela funciona com uma estrutura de hierarquia, onde podemos ter situações de nó dentro de nó. Principalmente quando passarmos a criar nossos serviços via SAP Gateway, parte desse processo será automatizado, e será comum termos uma URI tipo:
http://endereço_do_SAP:porta/nó_01/nó_02/../enfim_nó_do_serviço
A representação disso na SICF, ficaria mais ou menos como:
Isso será mais normal (do que você imagina), pois as empresas normalmente terão um espaço próprio na SICF para que você possa criar seus serviços. Com esse tipo de situação, tenho duas dicas para você:
- Cada nó desse poderia muito bem ser um serviço. Isso significa que cada nó desse possui sua própria lista de manipulação (HandleList). E ai te pergunto: o que acontece se, por exemplo, existir a referência a uma classe na lista de manipulação do nó OPU e, também, uma referência de uma segunda classe dentro do nó da lista de manipulação zbar8_02? Simples, o SAP irá se basear pela lista de manipulação do nó mais próximo ao topo da hierarquia. Exemplo:
Agora vamos chamar no navegador o serviço zbar8_02 e vejamos qual será o resultado:
2. Outra dica. Essa URI gigantesca é horrível, e quando estamos desenvolvendo no dia a dia, isso se torna uma pedra no sapato. Para facilitar, a SAP disponibilizou uma opção para que possamos encurtar URI por meio de alias. E como isso funciona? Simples, veja abaixo:
Basta salvar e seu alias já estará na arvore junto com todos os outros. Então, vá até o navegador e, após o endereço do host:porta, informe o alias. Veja abaixo:
3. Outra dica é uma introdução para o que veremos no futuro, mas também uma ajuda quando você estiver testando o seu serviço. Sempre que estiver testando serviços, teste-os no modo privativo do seu navegador, pois navegadores costumam guardar cachê, e isso é realmente chato. Entretanto utilizando o navegador no modo privativo, toda vez que você chamar um serviço ele irá requerer autenticação com o seu usuário e senha, para facilitar isso é possível deixar um usuário e senha padrão, assim evitando esse aborrecimento. Como configurar:
4. Esta dica não sei afirmar se faz sentido ou não, entretanto por diversas vezes me ajuda a eliminar cachê do lado do SAP, principalmente quando tenho alguma atualização em classes ligadas a lista de manipulação. Então uma prática que possuo é desativar e ativar logo em seguida o serviço. Se isso faz sentido ou não, eu realmente não consigo afirmar, mas desde então tenho feito e nunca mais tive esse tipo de problema.
5. Esta parte é mais avançada, e vamos entender melhor sobre isso nos próximos posts, mas mesmo assim já quero deixar a referência caso você volte aqui no futuro com muito mais conhecimento para uma segunda leitura. É possível capturar a ação da requisição do seu serviço, e então baseado nela tomar novas decisões. Então caso você não queira utilizar o SAP Gateway é possível controlar todas as requisições por aqui. Veja abaixo:
Você conseguem ver a riqueza que temos aqui? Com essas informações, sabemos qual é o verbo da requisição (~request_method — GET, POST,PUT,DELETE…), tipo de protocolo (~server_protocol) e etc…
Com essas informações somos capazes de fazer algo assim:
Ufaaa…
Então é isso pessoal espero ter conseguido mostrar quão interessante é este framework, e o que ele pode fazer por nós.
E é isso ai, não deixe de conferir as referências abaixo, e se curtiu o post não deixe de participar comentando, compartilhando ou simplesmente segurando esse botão de aplausos para mostrar que é esse tipo de conteúdo que você deseja ter por aqui. Muito obrigado e até mais!