Sobre

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 19 do protheus-lib-core tem como dependências as versões 19 do Angular e do PO UI.


Versão 19.0.0

Por conta de uma inconsistência no pacote do PO-UI que na versão 19 só funciona para versões ~19.0.X do Angular, é necessário instalar a lib utilizando o --force. Foram realizados os devidos testes para garantir que a lib está funcionando corretamente mesmo forçando sua instalação.

Versões

Recursos

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




Funcionamento

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

Performance e boas práticas

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.

Exemplo
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.

Exemplo
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.


Código Javascript - Arquivo advpltojs.js Expandir origem
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);
    }
}
Código Javascript - Componente que envia a interação Expandir origem
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', '')
  }
}
Código ADVPL Expandir origem
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.

Para utilização do método jsToAdvpl com observable é necessário seguir os seguintes passos:

  1. No app Angular, utilizar o método buildObservable do serviço ProJsToAdvplService:
    1. Exemplo Expandir origem
      jsAdvplObs(): Observable<any> {
      	// Variável que enviará as informações para o Protheus
          let sendIfo: ProJsToAdvpl = {
            autoDestruct: false, // Informa se o Observable será destruído assim que tiver um retorno
            receiveId: "receiveId1", // ID que será recebido pela aplicação Angular no retorno do Protheus
            sendInfo: { // Objeto com os dados que serão enviados ao Protheus
              type: "jstoadvplPar1",   // ID que será enviado ao protheus (Recebido na static function JsToAdvpl)
              content: "content" // Conteúdo enviado ao Protheus
            }
          };
      
      	// Callback que será executado após o retorno do AdplToJs
          const observableCallback = ({protheusResponse, subscriber}: {protheusResponse: any, subscriber: any}) => {
            console.log(protheusResponse);
      
            let isOk = (protheusResponse.length > 0);
      
            if (!isOk) {
              subscriber.error({
                status: 400,
                description: `Error`
              });
            } else {
              subscriber.next( protheusResponse ); // Dispara e evento do observable
            }
            subscriber.complete();
          };
      
      	// Realiza a inscrição no Observable, enviando o callback e as informações enviadas ao Protheus)
          this.proJsToAdvplService.buildObservable( observableCallback, sendIfo).subscribe({
            next: payLoad => {
              console.log(payLoad);
              console.log("buildObservable subscribe");
            }
          });
        }
  2. Ainda no angular no fonte advpltojs.js fazer o envio do evento recebido:
    1. Exemplo Expandir origem
      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);
        }
        // Efetua o envio do evento para observable do buildObservable
        this.eventTarget.send(codeType, content);
        console.log(codeType);
        console.log(content);
      }
  3. No fonte advpl que chama a FwCallApp, na função estática chamar o método AdvplToJs do WebChannel:
    1. Exemplo Expandir origem
      //-------------------------------------------------------------------
      /*/{Protheus.doc} JsToAdvpl
          chamada a partir do app
      @author Totvs
      @since 18/11/2022
      //-----------------------------------------------------------------*/
      Static Function JsToAdvpl(oWebChannel,cType,cContent)
          Local nx := 0
      
          _aVarI := {cType,cContent}
          VarInfo('_aVarI', _aVarI , , .F. )
          ;/*logproc*/ConOut(PadC("inicio",32,"=")+ProcSource() + ":"+cValToChar(ProcLine()))
          Do Case
              Case cType == "preLoad"
              Case cType == "jstoadvplPar1"
                  For nx := 1 to 10
                      ConOut(cValToChar(nx))
                      Sleep(1000)
                  Next
                  oWebChannel:AdvplToJs("receiveId1", "qwerty")
          EndCase
      
          ;/*logproc*/ConOut(PadC("Fim JsToAdvpl",32,"=")+ProcSource() + ":"+cValToChar(ProcLine()))
      Return
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

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

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})
}
ServiçoDescriçãoRetorno
ProThreadInfoServiceRetorna id, username, nome e emails do usuário logadoObservable de ProUserInfo

Exemplo

Exemplo
getUserInfo(): void {
    this.proThreadInfoService.getUserInfoThread().subscribe({
      next: (res: ProUserInfo) => this.user = res
    });
  }
ServiçoDescriçãoRetorno
ProBranchServiceRetorna as filiais do usuárioObservable de ProBranchList

Parâmetros

NomeTipoDescriçãoObrigatórioDefault
descriptionstring

Descrição da filial

NãoVazio
pagenumberNúmero da páginaNão1
pageSizenumberQuantidade de registros a serem retornados na páginaNão10

Exemplo

Exemplo
getUserBranches(): void {
    this.proBranchService.getUserBranches('Filial 01', 1, 20).subscribe({
      next: res => this.branches = res
    });
  }
ServiçoDescriçãoRetorno
ProCompanyServiceRetorna as empresas do usuárioObservable de ProCompanyList

Parâmetros

NomeTipoDescriçãoObrigatórioDefault
corporateNamestring

Nome da empresa

NãoVazio
pagenumberNúmero da páginaNão1
pageSizenumberQuantidade de registros a serem retornados na páginaNão10

Exemplo

Exemplo
getUserCompanies(): void {
    this.proCompanyService.getUserCompanies('Empresa 01', 1, 20).subscribe({
      next: res => this.companies = res
    });
  }
ServiçoDescriçãoRetorno
ProUserAccessServiceRetorna se o usuário logado possui acesso a determinada rotina e/ou sub-rotinaObservable

Parâmetros

NomeTipoDescriçãoObrigatórioDefault
cRotinastring

Nome da rotina a ser pesquisada

Sim
nOpcnumberPosição no menudef da sub-rotina a ser pesquisada, caso não seja passado será feita a pesquisa de acesso considerando apenas a função baseNão

Exemplo

Exemplo
import { ProUserAccessService, ProUserAccessInterface } from '@totvs/protheus-lib-core';

getAccess(){
    this.proUserAccessService.userHasAccess(this.cRotina).subscribe({
      next: ( acesso => {
	    const proUserAccess: ProUserAccessInterface = acesso as ProUserAccessInterface;
        console.log(acesso);
        this.poAlert.alert({title: cType , message: "Acesso: " + proUserAccess.access + "\n" + "Messagem: " + proUserAccess.message });
    })});
  }
Retorno esperado Expandir origem
{
    access: false,
    message: "Esse usuário não possui acesso para executar essa operação.\r\nMenu: MATA010 / Rotina: A010Inclui"
}
ServiçoDescriçãoRetorno
ProUserAccessServiceRetorna se o usuário logado possui acesso a determinada tabela e/ou operações com a tabela.Observable

Parâmetros

NomeTipoDescriçãoObrigatórioDefault
cTabelastring

Tabela a ser pesquisada

Sim
nOpcnumberPosição no menudef da sub-rotina a ser pesquisada, caso não seja passado será feita a pesquisa de acesso considerando apenas o acesso geral a tabelaNão

Exemplo

Exemplo
import { ProUserAccessService, ProUserAccessInterface } from '@totvs/protheus-lib-core';

getAccess(){
    this.proUserAccessService.aliasHasAccess(this.cTabela).subscribe({
      next: ( acesso => {
	    const proUserAccess: ProUserAccessInterface = acesso as ProUserAccessInterface;
        console.log(acesso);
        this.poAlert.alert({title: cType , message: "Acesso: " + proUserAccess.access + "\n" + "Messagem: " + proUserAccess.message });
    })});
  }
Retorno esperado Expandir origem
{
    access: false,
    message: "Esse usuário não possui acesso na tabela"
}
ServiçoDescriçãoRetorno
ProUserInfoServiceRetorna informações adicionais do usuário logadoObservable

Parâmetros:

Utiliza o usuário logado para efetuar a pesquisa

Exemplo

Exemplo
import { ProUserInfoService, ProUserPswretInterface } from '@totvs/protheus-lib-core';

pswRet(){
    this.proUserInfoService.pswRet().subscribe(
      pswret => {
        const proUserPswRet: ProUserPswretInterface = pswret as ProUserPswretInterface;
        console.log(proUserPswRet);
        this.poAlert.alert({title: "okok" , message: proUserPswRet.user_id + " - " + proUserPswRet.user_name });
      }
    );
  }
Retorno esperado Expandir origem
{
    "user_id": "000000",
    "user_name": "Administrador",
    "user_full_name": "Administrador",
    "expiration_date": "00/00/00",
    "number_of_days_to_expire": 999,
    "authorization_to_change_the_password": true,
    "change_password_at_next_logon": false,
    "groups_array": [
        "000000"
    ],
    "superiors": "",
    "department": "",
    "position": "",
    "email": "teste_admin@totvs.com.br",
    "number_of_simultaneous_accesses": 99,
    "date_of_last_change": "2022/07/04",
    "user_blocked": false,
    "number_of_digits_for_the_year": 4,
    "listener_for_calls": false,
    "extension": "",
    "operation_log": "",
    "company_branch_and_registration": "",
    "allow_changing_system_database": true,
    "days_to_go_back": 0,
    "days_to_go_forward": 0,
    "date_of_inclusion_in_the_system": "2015/08/28",
    "global_field_level": 5,
    "access_times": [
        "00:00|23:59",
        "00:00|23:59",
        "00:00|23:59",
        "00:00|23:59",
        "00:00|23:59",
        "00:00|23:59",
        "00:00|23:59"
    ],
    "path_for_disk_printing": "\\SPOOL\\",
    "driver_for_direct_port_printing": "EPSON.DRV",
    "accesses": "SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSNSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSNNNNNNNNNNSNSNNSNNSNSSNNSSSSSSSSNNNNNSSSSNNNSSSSSSSSSSSNNNNNNSNNNSNNSSSSSSSSSNNSSSNSSSSSSSSSSSSNSSNNSSNSSSSNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN",
    "companies_array": [
        "@@@@"
    ],
    "pe_useracs": "",
    "print_type": 1,
    "page_format": 1,
    "environment_type": 1,
    "prioritize_group_configuration": false,
    "print_option": "",
    "access_other_print_directories": false,
    "modules_array": [
        "015\\system\\SIGAATF.XNU",
        "025\\system\\SIGACOM.XNU",
        "035\\system\\SIGACON.xnu",
        "045\\system\\SIGAEST.XNU",
        "055SIGAFAT",
        "065\\system\\SIGAFIN.XNU",
        "075\\system\\SIGAGPE.XNU",
        "085\\system\\SIGAFAS.xnu",
        "095\\system\\SIGAFIS.XNU",
        "105\\system\\SIGAPCP.XNU",
        "115\\system\\SIGAVEI.XNU",
        "125\\system\\SIGALOJA.XNU",
        "135\\system\\SIGATMK.XNU",
        "145\\system\\SIGAOFI.XNU",
        "155\\system\\SIGARPM.xnu",
        "165\\system\\SIGAPON.XNU",
        "175\\system\\SIGAEIC.XNU",
        "185\\system\\SIGATCF.XNU",
        "195\\system\\SIGAMNT.XNU",
        "205\\system\\SIGARSP.XNU",
        "215\\system\\SIGAQIE.XNU",
        "225\\system\\SIGAQMT.XNU",
        "235\\system\\SIGAFRT.XNU",
        "245\\system\\SIGAQDO.XNU",
        "255\\system\\SIGAQIP.XNU",
        "265\\system\\SIGATRM.XNU",
        "275\\system\\SIGAEIF.xnu",
        "285\\system\\SIGATEC.XNU",
        "295\\system\\SIGAEEC.XNU",
        "305\\system\\SIGAEFF.XNU",
        "315\\system\\SIGAECO.XNU",
        "325\\system\\SIGAAFV.xnu",
        "335\\system\\SIGAPLS.XNU",
        "345\\system\\SIGACTB.XNU",
        "355\\system\\SIGAMDT.XNU",
        "365\\system\\SIGAQNC.XNU",
        "375\\system\\SIGAQAD.XNU",
        "385\\system\\SIGAQCP.xnu",
        "395\\system\\SIGAOMS.XNU",
        "405\\system\\SIGACSA.XNU",
        "415\\system\\SIGAPEC.XNU",
        "425\\system\\SIGAWMS.XNU",
        "435\\system\\SIGATMS.XNU",
        "445\\system\\SIGAPMS.XNU",
        "455\\system\\SIGACDA.XNU",
        "465\\system\\SIGAACD.XNU",
        "475\\system\\SIGAPPAP.XNU",
        "485\\system\\SIGAREP.XNU",
        "495\\system\\SIGAGE.XNU",
        "505\\system\\SIGAEDC.XNU",
        "515\\system\\SIGAHSP.XNU",
        "525\\system\\SIGAVDOC.xnu",
        "535\\system\\SIGAAPD.XNU",
        "545\\system\\SIGAGSP.XNU",
        "555\\system\\SIGACRD.XNU",
        "565\\system\\SIGASGA.XNU",
        "575\\system\\SIGAPCO.XNU",
        "585\\system\\SIGAGPR.XNU",
        "595\\system\\SIGAGAC.XNU",
        "605\\system\\SIGAPRA.XNU",
        "615\\system\\SIGAHGP.xnu",
        "625\\system\\SIGAHHG.xnu",
        "635\\system\\SIGAHPL.xnu",
        "645\\system\\SIGAAPT.XNU",
        "655\\system\\SIGAGAV.XNU",
        "665\\system\\SIGAICE.XNU",
        "675\\system\\SIGAAGR.XNU",
        "685\\system\\SIGAARM.xnu",
        "695\\system\\SIGAGCT.XNU",
        "705\\system\\SIGAORG.XNU",
        "715\\system\\SIGALVE.xnu",
        "725\\system\\SIGAPHOTO.XNU",
        "735\\system\\SIGACRM.XNU",
        "745\\system\\SIGABPM.XNU",
        "755\\system\\SIGAAPON.xnu",
        "765\\system\\SIGAJURI.XNU",
        "775\\system\\SIGAPFS.XNU",
        "785\\system\\SIGAGFE.XNU",
        "795\\system\\SIGASFC.XNU",
        "805\\system\\SIGAACV.xnu",
        "815\\system\\SIGALOG.xnu",
        "825\\system\\SIGADPR.XNU",
        "835\\system\\SIGAVPON.xnu",
        "845\\system\\SIGATAF.XNU",
        "855\\system\\SIGAESS.XNU",
        "865\\system\\SIGAVDF.XNU",
        "875\\system\\SIGAGCP.XNU",
        "885\\system\\SIGAGTP.xnu",
        "895\\system\\SIGATUR.xnu",
        "905\\system\\SIGAGCV.xnu",
        "915\\system\\SIGAPDS.XNU",
        "92X\\system\\SIGATFL.XNU",
        "93X\\system\\SIGACEN.XNU",
        "94X",
        "95X",
        "965\\system\\SIGAESP2.xnu",
        "975SIGAESP",
        "985\\system\\SIGAESP1.xnu",
        "995\\system\\SIGACFG.XNU"
    ]
}
ServiçoDescriçãoRetorno
ProUserProfileServiceMetodo para definir o profile a ser utilizado
Antes de utilizar qualquer método de CRUD é necessário definir o profile por esse método pelo menos uma vez.
null

Parâmetros

NomeTipoDescriçãoObrigatórioDefault
programNamestring

Nome do programa a ser salvo (max 20)

Sim
taskstringNome da tarefa a ser salvo (max 10)Sim
typestringTipo a ser salvo (max 10)sim

Exemplo

Exemplo
import { ProUserProfileService } from '@totvs/protheus-lib-core';  

profileManager(){
  this.proUserProfileService.setProfile(this.cFunction, this.cTask, this.cType);
  this.proUserProfileService.create(this.cValue).subscribe({
    next: apiReturn => {
      console.log(apiReturn);
    }
  });
}
ServiçoDescriçãoRetorno
ProUserProfileServiceCria um novo registro no profileObservable

Parâmetros

NomeTipoDescriçãoObrigatórioDefault
valuestring

Valor a ser gravado

Sim

Exemplo

Exemplo
import { ProUserProfileService } from '@totvs/protheus-lib-core';  

profileManager(){
  this.proUserProfileService.setProfile(this.cFunction, this.cTask, this.cType);
  this.proUserProfileService.create(this.cValue).subscribe({
    next: apiReturn => {
      console.log(apiReturn);
    }
  });
}
Retorno esperado Expandir origem
{
	"message":"Profile criado"
}
ServiçoDescriçãoRetorno
ProUserProfileServiceBusca o valor de uma chave salva no profileObservable

Parâmetros

NomeTipoDescriçãoObrigatórioDefault
valuestring

Valor default a ser retornado caso a chave de profile não exista

Não""
respTypestringtipo de retorno, pode ser text ou jsonNãojson

Exemplo

Exemplo
import { ProUserProfileService } from '@totvs/protheus-lib-core';  

  profileManager(){
    this.proUserProfileService.setProfile(this.cFunction, this.cTask, this.cType);
    this.proUserProfileService.read(this.cValue, "text").subscribe({
      next: apiReturn => {
        console.log(apiReturn);
      }
    });
  }
Retorno esperado Expandir origem
"Valor do profile"
ServiçoDescriçãoRetorno
ProUserProfileServiceAtualiza um registro no profileObservable

Parâmetros

NomeTipoDescriçãoObrigatórioDefault
valuestring

Valor a ser gravado

Sim

Exemplo

Exemplo
import { ProUserProfileService } from '@totvs/protheus-lib-core';  

profileManager(){
  this.proUserProfileService.setProfile(this.cFunction, this.cTask, this.cType);
  this.proUserProfileService.update(this.cValue).subscribe({
    next: apiReturn => {
      console.log(apiReturn);
    }
  });
}
Retorno esperado Expandir origem
{
	"message":"Descrição"
}
ServiçoDescriçãoRetorno
ProUserProfileServiceDeleta um registro no profileObservable

Parâmetros
(sem parâmetros para esse metodo.)

Exemplo

Exemplo
import { ProUserProfileService } from '@totvs/protheus-lib-core';  

profileManager(){
  this.proUserProfileService.setProfile(this.cFunction, this.cTask, this.cType);
  this.proUserProfileService.delete().subscribe({
    next: apiReturn => {
      console.log(apiReturn);
    }
  });
}
Retorno esperado Expandir origem
null
ServiçoDescriçãoRetorno
ProUserProfileServiceDeleta e cria um registro no profile
esse metodo pode substituir o uso do metodo create e update em alguns casos
Observable

Parâmetros

NomeTipoDescriçãoObrigatórioDefault
valuestring

Valor a ser gravado

Sim

Exemplo

Exemplo
import { ProUserProfileService } from '@totvs/protheus-lib-core';  

profileManager(){
  this.proUserProfileService.setProfile(this.cFunction, this.cTask, this.cType);
  this.proUserProfileService.deleteThenCreate(this.cValue).subscribe({
    next: apiReturn => {
      console.log(apiReturn);
    }
  });
}
Retorno esperado Expandir origem
{
	"message":"Profile criado"
}
ServiçoDescriçãoRetorno
ProGenericAdapterServiceMétodo para devolver uma listagem de registro baseado na api genericListObservable

Parâmetros

NomeTipoDescriçãoObrigatórioDefault
searchParamsProAdapterListInterface

Parâmetros a serem enviados para o serviço, para maiores informações consultar a interface abaixo.

Sim

Exemplo

Exemplo
import { ProGenericAdapterService, ProAdapterListInterface, ProAdapterQueryInterface } from '@totvs/protheus-lib-core';

genericListAdapter(){
  let adapterList: ProAdapterListInterface = {
    alias: this.genericAdapter.table,
    fields: this.genericAdapter.fields,
    quickSearch: this.genericAdapter.quicksearch
  };
  this.proGenericAdapterService.list(adapterList).subscribe({
    next: apiReturn => {
      console.log(apiReturn);
      let propriedades = this.genericAdapter.fields.split(',');
      let arrayJSON = propriedades.map((propriedade) => {
        return { property: propriedade };
      });
      this.table.items = apiReturn.items;
      this.table.columns = arrayJSON;
    }
  });
}
Retorno esperado Expandir origem
ProAdapterBaseV2<T>
ServiçoDescriçãoRetorno
ProGenericAdapterServiceMétodo para devolver uma listagem de registro baseado na api genericQueryObservable

Parâmetros

NomeTipoDescriçãoObrigatórioDefault
searchParamsProAdapterQueryInterface

Parâmetros a serem enviados para o serviço, para maiores informações consultar a interface abaixo.

Sim

Exemplo

Exemplo
import { ProGenericAdapterService, ProAdapterListInterface, ProAdapterQueryInterface } from '@totvs/protheus-lib-core';

genericQueryAdapter(){
  let adapterList: ProAdapterQueryInterface = {
    tables: this.genericAdapter.table,
    fields: this.genericAdapter.fields,
    quickSearch: this.genericAdapter.quicksearch
  };
  this.proGenericAdapterService.query(adapterList).subscribe({
    next: apiReturn => {
      console.log(apiReturn);
      let propriedades = this.genericAdapter.fields.split(',');
      let arrayJSON = propriedades.map((propriedade) => {
        return { property: propriedade };
      });
      this.table.items = apiReturn.items;
      this.table.columns = arrayJSON;
    }
  });
}
Retorno esperado Expandir origem
ProAdapterBaseV2<T>

Funcionamento

Esse recurso funciona apenas a partir da biblioteca do Po-Ui 17.3.9 

ServiçoDescriçãoRetorno
ProThemeServiceMetodo para definir o tema a ser utilizado com base nas configurações do appserver.ini, verificando a tag THEME.

Observable

Parâmetros
(sem parâmetros para esse metodo.)


Exemplo
import {  ProThemeService } from '@totvs/protheus-lib-core'; 
 
  constructor(
    private poTheme: PoThemeService
  ) {}

setTheme(): {
    let proTheme: ProTheme = new ProTheme();
	   
 	this.proTheme.setTheme(ProThemeEnum.proThemeTotvsClassic);

    // Configuração do tema totvs classic, com ativação padrão do tema claro 
	this.poTheme.setTheme(this.proTheme, PoThemeTypeEnum.light);

    // Configuração do tema totvs classic, com ativação padrão do tema escuro
	this.poTheme.setTheme(this.proTheme, PoThemeTypeEnum.dark);

   	// Configuração do tema totvs sunset
 	this.proTheme.setTheme(ProThemeEnum.proThemeTotvsSunset);
    this.poTheme.setTheme(this.proTheme, PoThemeTypeEnum.light);

}

ServiçoDescriçãoRetorno
ProThemeObjeto de temas padronizados para a plataforma ProtheusPoTheme

Parâmetros

NomeTipoDescriçãoObrigatórioDefault
namestring

Nomenclatura do tema a ser instanciado

Sim''
activeboolean

Qual configuração deve ser a padrão a ser inicializada

Sim0
typePoThemeTokens

Descrição da paleta de cores utilizada para a definição do tema novo instanciado

SimPoThemeTokens


Exemplo

import { ProThemeService } from '@totvs/protheus-lib-core'; 

Exemplo
import {  ProTheme} from '@totvs/protheus-lib-core';  

 getNewTheme(): ProTheme{
	
 	public proTheme: ProTheme = new ProTheme();

	return proTheme;

}

Métodos


availableThemes()

MétodoDescriçãoRetorno
availableThemesRetorno de temas padronizados disponíveis pelo serviço ProThemeServicePoTheme


Parâmetros
(sem parâmetros para esse metodo.)


Exemplo

import { ProThemeService } from '@totvs/protheus-lib-core'; 

Exemplo
import {  ProTheme} from '@totvs/protheus-lib-core';  

export enum ProThemeEnum {
  proThemeTotvsClassic = 'proThemeTotvsClassic',
  proThemeTotvsSunset = 'proThemeTotvsSunset',
}

 returnAvailableThemes(): Array<ProThemeEnum>{
	
	return this.proTheme.availableThemes(); //  ['proThemeTotvsClassic', 'proThemeTotvsSunset'] 
 }




Disponibiliza as informações de sessão dos aplicativos (empresa, filial, database etc).

As informações são atribuídas ao chamar o método proAppConfigService.loadAppConfig() na abertura/inicialização do aplicativo.

ServiçoDescriçãoRetorno
ProSessionInfoServiceRetorna um objeto com todas as informações de sessão do aplicativoProSessionInfo

Parâmetros
(sem parâmetros para este método)

Exemplo de retorno Expandir origem
{
  proCompany: ProCompany;
  proBranch: ProBranch;
  proModule: string;
  appName: string;
  proSystemModule: ProSystemModules;
  proDatabase: string;
  remoteRype: number;
  socketPort: number;
  proAppConfig: ProAppConfig;
  proIdiom: string;
  proRole: ProRole;
  token: ProAuthToken;
  erpAppConfig: ProAppConfig;
  proUser: ProUser;
  erpToken: ProAuthToken;
}
ServiçoDescriçãoRetorno
ProSessionInfoServiceRetorna as informações da empresa logadaProCompany

Parâmetros
(sem parâmetros para este método)

Exemplo de retorno Expandir origem
{
    Code: "T1",
    InternalId: "T1",
    CorporateName: "Grupo TOTVS 1                           "
}
ServiçoDescriçãoRetorno
ProSessionInfoServiceRetorna as informações da filial logadaProBranch

Parâmetros
(sem parâmetros para este método)

Exemplo de retorno Expandir origem
{
    CompanyCode: "T1",
    EnterpriseGroup: "T1",
    ParentCode: "D MG 01 ",
    Code: "D MG 01 ",
    Description: "Filial BELO HOR                          "
}
ServiçoDescriçãoRetorno
ProSessionInfoServiceRetorna o módulo logadostring

Parâmetros
(sem parâmetros para este método)

Exemplo de retorno Expandir origem
'CFG'
ServiçoDescriçãoRetorno
ProSessionInfoServiceRetorna o nome do appstring

Parâmetros
(sem parâmetros para este método)

Exemplo de retorno Expandir origem
'nomeApp'
ServiçoDescriçãoRetorno
ProSessionInfoServiceRetorna as informações do módulo logadoProSystemModules

Parâmetros
(sem parâmetros para este método)

Exemplo de retorno Expandir origem
{
    id: 99,
    name: "SIGACFG",
    description: "Configurador"
}

Atenção

Essa informação existe somente quando o aplicativo é executado via WebApp.

ServiçoDescriçãoRetorno
ProSessionInfoServiceRetorna a database informada no loginstring

Parâmetros
(sem parâmetros para este método)

Exemplo de retorno Expandir origem
'20240805'
ServiçoDescriçãoRetorno
ProSessionInfoServiceRetorna o tipo de remote conectadonumber

Parâmetros
(sem parâmetros para este método)

Exemplo de retorno Expandir origem
5
ServiçoDescriçãoRetorno
ProSessionInfoServiceRetorna a porta de conexão do socketnumber

Parâmetros
(sem parâmetros para este método)

Exemplo de retorno Expandir origem
1254
ServiçoDescriçãoRetorno
ProSessionInfoServiceRetorna as informações do aplicativoProAppConfig

Parâmetros
(sem parâmetros para este método)

Exemplo de retorno Expandir origem
{
    name: "Schedule",
    version: "1.0.0",
    versionAPI: "",
    productLine: "Protheus",
    api_baseUrl: "/",
    multiProtocolPort: null,
    serverBackend: null
}
ServiçoDescriçãoRetorno
ProSessionInfoServiceRetorna o idioma informado no loginstring

Parâmetros
(sem parâmetros para este método)

Exemplo de retorno Expandir origem
'pt-BR'
ServiçoDescriçãoRetorno
ProSessionInfoServiceRetorna as informações do aplicativoProAppConfig

Parâmetros
(sem parâmetros para este método)

Exemplo de retorno Expandir origem
{
    name: "Schedule",
    version: "1.0.0",
    versionAPI: "",
    productLine: "Protheus",
    api_baseUrl: /,
    multiProtocolPort: null,
    serverBackend: null
}
ServiçoDescriçãoRetorno
ProSessionInfoServiceRetorna as informações do usuárioProUser

Parâmetros
(sem parâmetros para este método)

Exemplo de retorno Expandir origem
{\"schemas\":[\"urn:scim:schemas:core:2.0:User\",\"urn:scim:schemas:extension:enterprise:2.0:User\"],\"id\":\"000000\",\"name\":{\"formatted\":\"Administrador\",\"givenName\":\"Administrador\",\"familyName\":\".\"},\"userName\":\"Administrador\",\"displayName\":\"Administrador\",\"meta\":{\"resourceType\": \"User\",\"created\":\"2015-08-28_00:00:00\",\"lastModified\":\"2024-03-08_00:00:00\"},\"externalId\":\"wellington.machado@totvs.com.br\",\"phoneNumbers\":[],\"emails\":[{\"value\":\"wellington.machado@totvs.com.br\",\"type\":\"work\",\"primary\":true}],\"active\":true,\"groups\":[],\"roles\":[],\"title\":\"\",\"department\":\"\"}

Atenção

Essa informação existe somente quando o aplicativo é executado via WebApp.

ServiçoDescriçãoRetorno
ProSessionInfoServiceRetorna as informações do papel de trabalho do usuárioProRole

Parâmetros
(sem parâmetros para este método)

Exemplo de retorno Expandir origem
{
    Code: "  ",
    Description: ""
}

Atenção

Essa informação existe somente quando o aplicativo é executado via WebApp.

ServiçoDescriçãoRetorno
ProDateService

Retorna o formato da data do sistema protheus com base no idioma.


Utilização: propriedade p-format do componente po-datepicker

string

Parâmetros

NomeTipoDescriçãoObrigatórioDefault
languagestring

Código do idioma

Nãopt
Exemplo de retorno Expandir origem
'dd/mm/yyyy'

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

Interface com os parâmetros possíveis para utilização do serviço ProGenericAdapterService.list().

Propriedades

PropriedadeTipoObrigatórioDescrição
aliasstringsimIndica o alias da tabela que terá seus dados listados
filialFilterbooleannãoIndica se deve ser feito o filtro da filial ([ALIAS]_FILIAL) - Opcional, tendo seu valor como verdadeiro por padrão.
deletedFilterbooleannãoIndica se deve ser feito o filtro de campos deletados de forma lógica (D_E_L_E_T_)
pagenumericnãonúmero da pagina
pageSizenumericnãoquantidade de registros por página
filterstringnãofiltro padrão oData a ser utilizado na requisição, ex.: propriedade1 eq 'valor1' and propriedade2 eq 'valor2'
fieldsstringnãocampos a serem retornados na listagem, caso não seja passado serão retornados todos os campos do alias e o filtro do tipo quickSearch não poderá ser utilizado.
ex: a1_cod,a1_loja,a1_nome
orderstringnãoordenação default da lista, ex.: a1_nome
quickSearchstringnãoo valor informado nessa propriedade será utilizado para a pesquisa do tipo quicksearch, pesquisa em todos os campos do tipo character do alias, para funcionar é necessário que seja utilizado o parâmetro fields também.
??nãoAlém dos parâmetros pré-definidos pode ser passado nessa interface parâmetros para filtrar cada propriedade individualmente, usada na busca avançada,
ex.: a1_cod='000001'

Interface com os parâmetros possíveis para utilização do serviço ProGenericAdapterService.query().

Propriedades

PropriedadeTipoObrigatórioDescrição
tablesstringsim Indica o alias da tabela que terá seus dados listados, caso seja mais de uma tabela, os alias devem ser separados por vírgula
filialFilterbooleannãoIndica se deve ser feito o filtro da filial ([ALIAS]_FILIAL) - Opcional, tendo seu valor como verdadeiro por padrão.
deletedFilterbooleannãoIndica se deve ser feito o filtro de campos deletados de forma lógica (D_E_L_E_T_)
wherestringnãoIndica um filtro SQL que será incluso na query
fromQrystringnãoPara querys mais complexas, que exigem um left join por exemplo, o FROM e JOIN podem ser informados aqui, sendo que por padrão, a tabela deve ter um alias conforme o SX2, exemplo: SED990 SED
pagenumericnãonúmero da pagina
pageSizenumericnãoquantidade de registros por página
filterstringnãofiltro padrão oData a ser utilizado na requisição, ex.: propriedade1 eq 'valor1' and propriedade2 eq 'valor2'
fieldsstringnãocampos a serem retornados na listagem, caso não seja passado serão retornados todos os campos do alias e o filtro do tipo quickSearch não poderá ser utilizado.
ex: a1_cod,a1_loja,a1_nome
orderstringnãoordenação default da lista, ex.: a1_nome
quickSearchstringnãoo valor informado nessa propriedade será utilizado para a pesquisa do tipo quicksearch, pesquisa em todos os campos do tipo character do alias, para funcionar é necessário que seja utilizado o parâmetro fields também.
??nãoAlém dos parâmetros pré-definidos pode ser passado nessa interface parâmetros para filtrar cada propriedade individualmente, usada na busca avançada,
ex.: a1_cod='000001'