O que fazer quando Telas em PO UI não funcionam com protheus-lib-core no navegador

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:

Exemplo de mensagem de erro

Exemplo de 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):

Como é para ficar o angular.json

Como é para ficar o angular.json

 

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.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

Deixe uma resposta

Terminal de Informação