No artigo de hoje, vamos falar sobre por qual motivo algumas telas em PO UI ao testar via navegador não carregam informações (ao usar protheus-lib-core).
Até meados das versões 17 e 18 do Angular, a integração com protheus-lib-core, estava funcionando também em navegadores (desde que você configurasse o ERPTOKEN na session).
Acontece que a partir da versão 19, mudou um pouco a sistemática, inclusive essa dica foi enviada por um aluno nosso, o grande Lucas Rafael Maia de Souza. Abaixo um exemplo da mensagem de erro:
A principal mudança foi no arquivo angular.json, que até a versão 17 o assets, você informava direto a pasta onde ficava o appConfig.json. Já na versão 19, ele vem com uma informação apontando para a pasta public, então deve ser alterado para apontar para a pasta que vai ter o appConfig.json também.
Segue abaixo um print comparando o arquivo angular.json (como estava na versão 19 e voltando como era na versão 17):
A partir disso, já é para funcionar bem no navegador. Mas caso permaneça as questões de não conseguir consumir as APIs do Protheus, você precisará mudar também no código fonte na parte que consome as APIs.
O que precisará ser feito é, testar se a execução não está pelo Protheus, se for esse o caso, você vai passar o httpOptions informando o Token do ERPTOKEN e a URL base do appConfig.json (dentro da definição ERPAPPCONFIG na Session).
Abaixo um exemplo de trecho do antes:
... //Busca as informações via API getItems(): Array<any> { var itemsRequest: Array<any> = []; var procedencia: string = ""; //Realiza um Get no Protheus para buscar os dados this.http.get<any>('/zWsGrpProd/get_all?limit=100', {}).subscribe({ next: (v) => { ...
E como ficou na versão 19, para testar via navegador:
... //Busca as informações via API getItems(): Array<any> { var itemsRequest: Array<any> = []; var procedencia: string = ""; //Variáveis usadas a partir da versão 19: var urlBase: string = ""; var appConfig: string = ""; var jsonConfig; var appErpToken: string = ""; var jsonErpToken; var httpOptions = {}; //Se tiver rodando via navegador if (sessionStorage.getItem("insideProtheus") == "0") { //Busca a url base dentro do appConfig.json appConfig = sessionStorage.getItem('ERPAPPCONFIG') ?? ''; jsonConfig = JSON.parse(appConfig); urlBase = jsonConfig.api_baseUrl; //Busca o Token do Protheus appErpToken = sessionStorage.getItem('ERPTOKEN') ?? ''; jsonErpToken = JSON.parse(appErpToken); //Define manualmente o httpOptions httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Authorization': 'Bearer ' + jsonErpToken.access_token })}; } //Realiza um Get no Protheus para buscar os dados this.http.get<any>(urlBase + '/zWsGrpProd/get_all?limit=100', httpOptions).subscribe({ next: (v) => { ...
Bom pessoal, por hoje é só.
Abraços e até a próxima.