SAP e PHP
Estava eu realizando minhas atividades quando surgiu uma demanda um tanto exótica: conectar páginas em PHP com o SAP ECC.
Nas primeiras pesquisas, vi que me deparava com um monstro com diversos tentáculos e nenhuma capacidade de compartilhamento de conhecimento.
Pesquisei bastante, testei bastante e ainda estou em vias de conseguir um resultado melhor. Até o momento, consegui alguns resultados positivos e funcionais, que serão aprimorados com o passar do tempo. No momento, o que possuo é o seguinte:
Consigo conectar o PHP no SAP e executar RFC's para enviar e extrair dados, mas a solução que consegui utiliza Windows. Foi a mais fácil para esta emergência, isso me atende, mas eu ainda pretendo melhorá-la.
Segue a lista das "coisas" que eu precisei:
- ZendServer-CE-php-5.3.9-5.6.0-SP1-Windows_x86
- php_saprfc_535_nts_RFCSDK720.dll
- SAPRFC
- Um servidor com Windows 2008 Server
Vamos aos passos que eu executei para que o PHP conectasse ao SAP:
Instalação do Zend Server
Baixe o pacote no link desse artigo.
Execute a instalação, conforme as instruções abaixo:
Clique em NEXT
Clique em I ACCEPT THE TERMS OF THE LICENSE AGREEMENT e em seguida em NEXT
Selecione a opção TYPICAL e clique em NEXT
Nesta etapa, você precisa escolher qual web server irá ser utilizado. Por escolha pessoal (acredito também que o ISS não de suporte ao SAPRFC) escolhi o APACHE:
Escolha qual porta que o servidor ira atuar (neste caso, estou utilizando a porta 8080 porque a minha porta 80 já tem outro serviço)
Clique em INSTALL
Clique em FINISH
Apos o termino da inatalação, uma tela do navegador irá abrir para concluir a instalação do ZEND SERVER. Caso ela não abra ou aconteça algum imprevisto, acesso pelo endereço:
http://ipdoservidor:10081
Marque a caixa de seleção I have read and agree to the end user license agreement terms e clique em next
Digite uma senha para administração do servidor e clique em NEXT
Clique em FINISH
O SAPRFC precisa de uma biblioteca do SAP GUI. Neste nosso caso, instale o SAP GUI 720 (este pacote é um pouco grande para armazenar aqui, mas tá fácil de achar na internet)
Copie o arquivo php_saprfc_535_nts_RFCSDK720.dll que esta linkado neste artigo (ou se estiver com preguiça de rolar a página, clique aqui) para a pasta de instalação do ZEND SERVER: C:\Program Files (x86)\Zend\ZendServer\lib\phpext\
Configuração do ZEND
Acesse o endereço de configuração do ZEND SERVER:
http://ipdoservidor:10081
Selecione a aba SERVER SETUP
Selecione a aba Extensions
Localize a extensão php_saprfc_535_nts_RFCSDK720.dll e clique no link Turn on
Clique no botão RESTART PHP
Verifique se foram carregados duas extensões: uma chamada SAPRFC e a outra com php_saprfc_535_nts_RFCSDK720. Note que a primeira extensão está sem problemas, já a segunda apresenta erro, mas é normal.
Crie um arquivo chamado teste.php em "C:\Program Files (x86)\Zend\Apache2\htdocs" com o seguinte conteúdo, alterando os valores de conexão para o seu ambiente:
<html>
<body>
<h1>SAPRFC-Class: Get List of Users in SAP-System</h1>
<?
// Example for using the saprfc-class-library for accessing sap-functions via rfc
// provided by lars laegner, btexx business technologies, august 2001
// !!!! PLEASE CHANGE THE LOGINDATA TO YOUR SAP-SYSTEM !!!!
// $Id: example_userlist.php,v 1.2 2001/08/16 15:54:35 llaegner Exp $
// saprfc-class-library
require_once("saprfc.php");
// Create saprfc-instance
$sap = new saprfc(array(
"logindata"=>array(
"ASHOST"=>"IP_DO_APP" // application server
,"SYSNR"=>"00" // system number
,"CLIENT"=>"000" // client
,"USER"=>"cmehcr1" // user
,"PASSWD"=>"xxxxxxx" // password
)
,"show_errors"=>false // let class printout errors
,"debug"=>false)) ; // detailed debugging information
// Call-Function
$result=$sap->callFunction("SO_USER_LIST_READ",
array( array("IMPORT","USER_GENERIC_NAME","*"),
array("TABLE","USER_DISPLAY_TAB",array())
));
// Call successfull?
if ($sap->getStatus() == SAPRFC_OK) {
// Yes, print out the Userlist
?><table>
<tr><td>SAP-Name</td><td>User-Nummer</td></tr><?
foreach ($result["USER_DISPLAY_TAB"] as $user) {
echo "<tr><td>", $user["SAPNAM"],"</td><td>",$user["USRNO"],"</td></tr>";
}
?></table>
</body>
</html>
Copie o arquivo saprfc.php que está no saprfc-1.4.1.All para o mesmo local do teste.php ("C:\Program Files (x86)\Zend\Apache2\htdocs").
Execute um navegador e aponte para o seu servidor ZEND colocando no final do endereço /teste.php:
Você terá uma lista de todos os usuários cadastrados no SAP ECC. Outras formas de uso podem ser vistas nos exemplos contidos no saprfc-1.4.1.All.