Olá pessoal,
Imagine que você precise criar um portal WEB em PHP, Java, ou qualquer outra linguagem de sua preferência, para fornecer informações para seus parceiros de negócio, sem que eles precisem acessar seu ERP.
Tal portal fornecerá informações para representantes, clientes, ou quem quer que seja. E essas informações precisam estar seguras. Com o REST, você consulta como um webservice somente os dados que estão disponíveis, no Servidor REST feito em Protheus.
Neste exemplo eu utilizei o PHP, que é uma linguagem para Web muito difundida no mercado.
Veja também:
Como configurar um servidor REST no Protheus
Então, como fazer um login com REST no Protheus? Eis o exemplo:
- Neste primeiro trecho, pode criar o arquivo com o nome de FBREST01.PRW, o qual conterá os métodos que serão acessados e disponibilizarão o resultado em JSON.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
#Include 'protheus.ch' #Include 'parmtype.ch' #Include "RestFul.CH" #Include "TopConn.ch" //Constantes #Define STR_PULA Chr(13)+Chr(10) /*/{Protheus.doc} FBREST01 Ensinando Rest em ADVPL @author Fernando Bueno @since 13/04/2017 @version undefined @type function /*/ User Function FBREST01() Return /*/{Protheus.doc} AUTHUSER Definição da estrutura do webservice @author Fernando Bueno @since 13/04/2017 @type class /*/ WSRESTFUL AUTHUSER DESCRIPTION "Serviço REST para manipulação de usuarios/vendedores" WSDATA USR As String //String que vamos receber via URL WSDATA PWD As String //String que vamos receber via URL WSMETHOD GET DESCRIPTION "Retorna o usuário autenticado na URL" WSSYNTAX "/AUTHUSER || /AUTHUSER/{USR}{PWD}" //Disponibilizamos um método do tipo GET END WSRESTFUL /*/{Protheus.doc} GET Processa as informações e retorna o json @author Fernando Bueno @since 13/04/2017 @version undefined @param oSelf, object, Objeto contendo dados da requisição efetuada pelo cliente, tais como: - Parâmetros querystring (parâmetros informado via URL) - Objeto JSON caso o requisição seja efetuada via Request Post - Header da requisição - entre outras ... @type Method /*/ WSMETHOD GET WSRECEIVE USR,PWD WSSERVICE AUTHUSER //--> Recuperamos o usuário informado via URL //--> Podemos fazer dessa forma ou utilizando o atributo ::aUrlParms, que é um array com os parâmetros recebidos via URL (QueryString) Local cUsr := Self:USR Local cPwd := Self:PWD Local aArea := GetArea() Local oObjCom := Nil Local aDados := {} Local cJson := "" Local aArray := {} // define o tipo de retorno do método ::SetContentType("application/json") PswOrder(2) If PswSeek( cUsr, .T. ) aArray := PSWRET()[1] // Retorna vetor com informações do usuário //cPwd := Decode64(cPwd) cCodVen := bscCodVen(PSWRET()[1][1]) If PSWNAME(cPwd) .AND. !Empty(cCodVen) aAdd(aArray, cCodVen) oObjCom := UsrVend():New(aArray) EndIF EndIf // --> Transforma o objeto de produtos em uma string json cJson := FWJsonSerialize(oObjCom) // --> Envia o JSON Gerado para a aplicação Client ::SetResponse(cJson) RestArea(aArea) Return(.T.) /**************************************************************** Aqui você pode fazer a consistência com o cadastro de vendedores No caso utilizei o campo padrão A3_USUCORP para colocar o código de usuário *****************************************************************/ Static Function bscCodVen(cCodUsr) Local cQryAux := "" Local cRet := "" //Montando consulta de dados cQryAux := "" cQryAux += " SELECT A3_COD FROM SA3010 WHERE D_E_L_E_T_ = ' ' AND A3_MSBLQL <> '1' AND A3_USUCORP LIKE '%" + AllTrim(cCodUsr) + "%' " conout(cQryAux) cQryAux := ChangeQuery(cQryAux) //Executando consulta e setando o total da régua TCQuery cQryAux New Alias "QRY_AUX" Count to nTotal //Enquanto houver dados QRY_AUX->(DbGoTop()) While ! QRY_AUX->(Eof()) cRet := QRY_AUX->(A3_COD) QRY_AUX->(dbSkip()) EndDo QRY_AUX->(dbCloseArea()) Return cRet |
2. Abaixo, outro código fonte que será utilizado para instanciar o objeto que será retornado no JSON, fazendo as devidas conversões. Está de forma simplificada, com atributo em array.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
#include 'protheus.ch' #include 'totvs.ch' User Function LARESTA2() Return /*/{Protheus.doc} LARESTA2 Classe de comissões para realizar a serialização do objeto de comissões @author Fernando Bueno @since 14/04/2017 @version 1.0 @example (examples) @see (links_or_references) /*/ Class UsrVend Data aDados As Array Method New(aDados) Constructor EndClass /*/{Protheus.doc} new Metodo construtor @author Fernando Bueno @since 14/04/2017 @version 1.0 @example (examples) @see (links_or_references) /*/ Method New(aDad) Class UsrVend ::aDados := aDad Return(Self) |
3. Agora vai a parte WEB, em PHP. Crie uma página simples de login.
Faça download do código PHP aqui
Ao utilizar os fontes em anexo, atente-se para as seguintes mudanças:
No arquivo config/app.php, troque /suapasta para a sua respectiva pasta do seu Apache Server
1 2 3 4 5 6 |
<?php define('SUBFOLDER', '/suapasta'); define('WS_URL', ''); ?> |
E na chamada do login, troque SEUIP para o seu servidor Protheus, onde está rodando o seu servidor REST. (Arquivo valida_login.php)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<?php include('config/app.php'); ?> <?php session_start(); if ($_SERVER['REQUEST_METHOD'] == 'POST' && count($_POST) > 0) { $url = 'http://SEUIP/rest/AUTHVEND?USR=' . $_POST['usuario'] . '&PWD=' . $_POST['senha']; $result = file_get_contents($url); $json = json_decode($result, true); $_SESSION['nome'] = $json['ADADOS'][3]; $_SESSION['codigo'] = $json['ADADOS'][0]; $_SESSION['codvend'] = $json['ADADOS'][26]; header('Location: ' . SUBFOLDER . '/'); exit; } ?> |
Algumas observações pessoal: Não exemplifiquei aqui diretivas de segurança. Então, na sua configuração REST, verifique corretamente que tudo está seguro, antes de disponibilizar dados da sua empresa externamente a ela.
Este foi só um exemplo de login. Mas você pode gerar relatórios, gravar dados no Protheus e assim por diante. Também é o princípio básico pra você que quer criar um aplicativo Android como este que desenvolvemos, IOS etc. Crie o aplicativo e consuma os Web Services disponíveis.
Caso queira de aprofundar em web services pergunte-me como aqui no nosso formulário de contato
Links:
Como configurar REST no Protheus
Espero que seja útil e se tiver qualquer dúvida entre em contato
Fernando Bueno
Atuando desde 2005 no mercado de tecnologia, desenvolvendo e implantando e sistemas gerenciais, sistemas e sites web e ecommerce.
Siga-me no Linked In
Últimos posts por Fernando Bueno (exibir todos)
- O Papel Estratégico do Setor Logístico na Cadeia de Suprimentos - 20 de novembro de 2024
- Logística Reversa: Estratégia Sustentável e Lucrativa para Empresas - 20 de novembro de 2024
- A Importância da Contagem de Estoque para a Eficiência Empresarial - 20 de novembro de 2024