O protheus-lib-core é um pacote NPM cujo objetivo é facilitar a criação de apps voltados para o Protheus. Para isso, ele disponibiliza alguns serviços e interceptadores HTTP. 

Ele tem como base os pacotes do Angular e PO UI. Sua main version acompanha as versões do Angular e PO UI, logo a versão 14 do Protheus-lib-core tem como dependências as versões 14 do Angular e do PO UI.


Versões

Abaixo serão listados os recursos da biblioteca.



Comandos que permitem a integração de códigos ADVPL com códigos Javascript.

Repositório com exemplos




Esse recurso funciona apenas quando a aplicação é executada pelo Protheus. Para mais informações, clique aqui.

Para garantir melhor performance e boas práticas da aplicação, recomenda-se converter as informações disponibilizadas em serviços web.

Pré-requisitos

Para desenvolver essa integração, é necessário:

  1. Na aplicação web, criar o arquivo advpltojs.js em assets/preload. Esse arquivo irá receber e tratar as instruções ADVPL que foram enviadas.
  2. No fonte que chama a aplicação (utilizando a FwCallApp), criar uma Static Function com o nome JsToAdvpl. Essa função irá receber e tratar as instruções Javascript que foram enviadas. Importante: o fonte não pode ser tlpp, pois em tlpp não existe a chamada de funções estáticas.


Arquivo advpltojs.js na aplicação web

Esse arquivo deve conter uma função e javascript para receber e tratar as instruções ADVPL enviadas. Essa função deve receber dois parâmetros: codeType que indica qual o código da ação que foi definido e content que fornece a informação que deve ser tratada.

function(codeType, content) {
  // Se a interação que recebi for igual a mensagemProtheus
	if (codeType == 'mensagemProtheus') {
    // Eu dou um alert com a informação que recebi para trabalhar
		alert('Mensagem recebida do Protheus: ' + content);
	}
}


Static Function JsToAdvpl

Essa função recebe três parâmetros: oWebChannel que é o objeto do TWebEngine, cType que indica qual o código da ação que foi definido e cContent que fornece a informação que deve ser tratada.

Function callAppExample()
    FwCallApp('nome-do-app.app')
Return Nil

Static Function JsToAdvpl(oWebChannel,cType,cContent)
    Do Case
        // Se a interação que recebi for igual a mensagemJavascript
        Case cType == 'mensagemJavascript'
            // Imprimo no server a informação que recebi para trabalhar
            Conout(cContent)
    End
Return .T.


Enviando interações

  1. Para enviar as interações desejadas da aplicação web para o Protheus, utilizamos a função jsToAdvpl() do serviço ProJsToAdvplService disponibilizado pela biblioteca;
  2. Para enviar as interações desejadas do Protheus para a aplicação web, utilizamos o método AdvplToJs() disponibilizado pelo oWebChannel.


function(codeType, content) {
  // Se a interação que recebi for igual a mensagemProtheus
    if (codeType == 'mensagemProtheus') {
    // Eu dou um alert com a informação que recebi para trabalhar
        alert('Mensagem recebida do Protheus: ' + content);
    }
}
import { Component } from '@angular/core';
import { ProJsToAdvplService } from '@totvs/protheus-lib-core';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  title = 'doc-lib-core';

  constructor(private proJsToAdvplService: ProJsToAdvplService) {}

  click1(): void {
    this.proJsToAdvplService.jsToAdvpl('mensagemJavascript', 'Comando Javascript')
  }

  click2(): void {
    this.proJsToAdvplService.jsToAdvpl('receberProtheus', '')
  }
}
Function doclibcore()
    FwCallApp("doc-lib-core")
Return
 
Static Function JsToAdvpl(oWebChannel,cType,cContent)
    Do Case
        // Se a interação que recebi for igual a mensagemJavascript
        Case cType == 'mensagemJavascript'
            // Imprimo a informação que recebi para trabalhar
            alert('O que veio do JS: ' + cContent)
        // Se a interação que recebi for igual a receberProtheus
        Case cType == 'receberProtheus'
            // Envio um comando ADVPL para minha aplicação Web
            oWebChannel:AdvPLToJS('mensagemProtheus', 'Comando ADVPL')
    End
Return .T.
ServiçoDescriçãoRetorno
ProAppConfigServiceFunção que fecha a aplicação webvoid

Parâmetros

NomeTipoDescriçãoObrigatórioDefault
askboolean

Indica se deve forçar (true) o fechamento ou não (false). Caso o valor seja false,

irá apresentar uma pergunta se deve fechar ou não o aplicativo.

Nãotrue

Exemplo

fechar(): void {
	this.proAppConfigService.callAppClose(true);
}
ServiçoDescriçãoRetorno
ProAdapterBaseV2ServiceFunção que retorna query params (aceitos pela FwAdapterBaseV2) no formato HttpParams.HttpParams

Parâmetros

NomeTipoDescriçãoObrigatórioDefault
pagenumber

Número da página

Não1
pageSizenumberQuantidade de registros a serem retornados na páginaNão20
filterstringFiltro a ser utilizado na requisiçãoNãoVazio
fieldsstringCampos a serem retornados pela requisiçãoNãoVazio
orderstringOrdenação a ser utilizada no retorno da requisiçãoNãoVazio

Exemplo

getCustomers(): Observable<ProAdapterBaseV2<Customer>> {
    const parameters = this.proAdapterBaseV2Service.getHttpParams(1, 10, "contains(name, 'TOTVS')", "id,name", '-id');
    return this.httpClient.get('seu endpoint', { params: parameters})
}

Interface base para o retorno de APIs que utilizam a classe FwAdapterBaseV2.

Propriedades

PropriedadeTipo
itemsArray<T> - o T indica o tipo dos registros a serem retornados no array
hasNextboolean
remainingRecordsnumber