Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.
Painel
titleBGColor#ADD8E6
titleSobre

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


Versões

Exibir filhos

Painel
titleBGColor#ADD8E6
titleRecursos

Abaixo serão listados os recursos da biblioteca.


Expandir
titleIntegração ADVPL x Javascript
Expandir
titleAdvplToJs e JsToAdvpl
Painel
borderStyledashed


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

Repositório com exemplos




Informações
titleFuncionamento

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

Dica
titlePerformance 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.

Bloco de código
languagejs
titleExemplo
linenumberstrue
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.

Bloco de código
languagec#
titleExemplo
linenumberstrue
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.


Bloco de código
languagejs
titleCódigo Javascript - Arquivo advpltojs.js
linenumberstrue
collapsetrue
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);
    }
}
Bloco de código
languagejs
titleCódigo Javascript - Componente que envia a interação
linenumberstrue
collapsetrue
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', '')
  }
}
Bloco de código
languagec#
titleCódigo ADVPL
linenumberstrue
collapsetrue
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.
Expandir
titleJsToAdvpl com Observable

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. Bloco de código
      languagejs
      titleExemplo
      collapsetrue
      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. Bloco de código
      languagejs
      titleExemplo
      collapsetrue
      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. Bloco de código
      languagejs
      titleExemplo
      collapsetrue
      //-------------------------------------------------------------------
      /*/{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
Expandir
titleFunções
Expandir
titlecallAppClose
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

Bloco de código
languagejs
titleExemplo
linenumberstrue
fechar(): void {
	this.proAppConfigService.callAppClose(true);
}
Expandir
titlegetHttpParams
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

Bloco de código
languagejs
titleExemplo
linenumberstrue
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})
}
Expandir
titlegetUserThreadInfo
ServiçoDescriçãoRetorno
ProThreadInfoServiceRetorna id, username, nome e emails do usuário logadoObservable de ProUserInfo

Exemplo

Bloco de código
languagejs
titleExemplo
linenumberstrue
getUserInfo(): void {
    this.proThreadInfoService.getUserInfoThread().subscribe({
      next: (res: ProUserInfo) => this.user = res
    });
  }
Expandir
titlegetUserBranches
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

Bloco de código
languagejs
titleExemplo
linenumberstrue
getUserBranches(): void {
    this.proBranchService.getUserBranches('Filial 01', 1, 20).subscribe({
      next: res => this.branches = res
    });
  }
Expandir
titlegetUserCompanies
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

Bloco de código
languagejs
titleExemplo
linenumberstrue
getUserCompanies(): void {
    this.proCompanyService.getUserCompanies('Empresa 01', 1, 20).subscribe({
      next: res => this.companies = res
    });
  }
Expandir
titleuserHasAccess
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

Bloco de código
languagejs
titleExemplo
linenumberstrue
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 });
    })});
  }
Bloco de código
languagejs
titleRetorno esperado
collapsetrue
{
    access: false,
    message: "Esse usuário não possui acesso para executar essa operação.\r\nMenu: MATA010 / Rotina: A010Inclui"
}
Expandir
titlealiasHasAccess
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

Bloco de código
languagejs
titleExemplo
linenumberstrue
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 });
    })});
  }
Bloco de código
languagejs
titleRetorno esperado
collapsetrue
{
    access: false,
    message: "Esse usuário não possui acesso na tabela"
}
Expandir
titlepswRet
ServiçoDescriçãoRetorno
ProUserInfoServiceRetorna informações adicionais do usuário logadoObservable

Parâmetros:

Utiliza o usuário logado para efetuar a pesquisa

Exemplo

Bloco de código
languagejs
titleExemplo
linenumberstrue
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 });
      }
    );
  }
Bloco de código
languagejs
titleRetorno esperado
collapsetrue
{
    "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": "[email protected]",
    "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"
    ]
}
Expandir
titleServiços
Expandir
titleProUserProfileService
Expandir
titlesetProfile
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

Bloco de código
languagejs
titleExemplo
linenumberstrue
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);
    }
  });
}
Expandir
titlecreate
ServiçoDescriçãoRetorno
ProUserProfileServiceCria um novo registro no profileObservable

Parâmetros

NomeTipoDescriçãoObrigatórioDefault
valuestring

Valor a ser gravado

Sim

Exemplo

Bloco de código
languagejs
titleExemplo
linenumberstrue
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);
    }
  });
}
Bloco de código
languagejs
titleRetorno esperado
collapsetrue
{
	"message":"Profile criado"
}
Expandir
titleread
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

Bloco de código
languagejs
titleExemplo
linenumberstrue
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);
      }
    });
  }
Bloco de código
languagejs
titleRetorno esperado
collapsetrue
"Valor do profile"
Expandir
titleupdate
ServiçoDescriçãoRetorno
ProUserProfileServiceAtualiza um registro no profileObservable

Parâmetros

NomeTipoDescriçãoObrigatórioDefault
valuestring

Valor a ser gravado

Sim

Exemplo

Bloco de código
languagejs
titleExemplo
linenumberstrue
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);
    }
  });
}
Bloco de código
languagejs
titleRetorno esperado
collapsetrue
{
	"message":"Descrição"
}
Expandir
titledelete
ServiçoDescriçãoRetorno
ProUserProfileServiceDeleta um registro no profileObservable

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

Exemplo

Bloco de código
languagejs
titleExemplo
linenumberstrue
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);
    }
  });
}
Bloco de código
languagejs
titleRetorno esperado
collapsetrue
null
Expandir
titledeleteThenCreate
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

Bloco de código
languagejs
titleExemplo
linenumberstrue
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);
    }
  });
}
Bloco de código
languagejs
titleRetorno esperado
collapsetrue
{
	"message":"Profile criado"
}
Expandir
titleProGenericAdapterService
Expandir
titlelist
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

Bloco de código
languagejs
titleExemplo
linenumberstrue
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;
    }
  });
}
Bloco de código
languagejs
titleRetorno esperado
collapsetrue
ProAdapterBaseV2<T>
Expandir
titlequery
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

Bloco de código
languagejs
titleExemplo
linenumberstrue
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;
    }
  });
}
Bloco de código
languagejs
titleRetorno esperado
collapsetrue
ProAdapterBaseV2<T>
Expandir
titleProThemeService
Informações
titleFuncionamento

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

Expandir
titlesetTheme
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.)


Bloco de código
languagejs
titleExemplo
linenumberstrue
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);

}

Expandir
titleProTheme
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'; 

Bloco de código
languagejs
titleExemplo
linenumberstrue
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'; 

Bloco de código
languagejs
titleExemplo
linenumberstrue
import {  ProTheme} from '@totvs/protheus-lib-core';  

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

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




Expandir
titleProSessionInfoService

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

Informações

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

Expandir
titlegetSessionInfo
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)

Bloco de código
languagejs
titleExemplo de retorno
linenumberstrue
collapsetrue
{
  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;
}
Expandir
titlegetCompany
ServiçoDescriçãoRetorno
ProSessionInfoServiceRetorna as informações da empresa logadaProCompany

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

Bloco de código
languagejs
titleExemplo de retorno
linenumberstrue
collapsetrue
{
    Code: "T1",
    InternalId: "T1",
    CorporateName: "Grupo TOTVS 1                           "
}
Expandir
titlegetBranch
ServiçoDescriçãoRetorno
ProSessionInfoServiceRetorna as informações da filial logadaProBranch

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

Bloco de código
languagejs
titleExemplo de retorno
linenumberstrue
collapsetrue
{
    CompanyCode: "T1",
    EnterpriseGroup: "T1",
    ParentCode: "D MG 01 ",
    Code: "D MG 01 ",
    Description: "Filial BELO HOR                          "
}
Expandir
titlegetModule
ServiçoDescriçãoRetorno
ProSessionInfoServiceRetorna o módulo logadostring

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

Bloco de código
languagejs
titleExemplo de retorno
linenumberstrue
collapsetrue
'CFG'
Expandir
titlegetAppName
ServiçoDescriçãoRetorno
ProSessionInfoServiceRetorna o nome do appstring

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

Bloco de código
languagejs
titleExemplo de retorno
linenumberstrue
collapsetrue
'nomeApp'
Expandir
titlegetSystemModule
ServiçoDescriçãoRetorno
ProSessionInfoServiceRetorna as informações do módulo logadoProSystemModules

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

Bloco de código
languagejs
titleExemplo de retorno
linenumberstrue
collapsetrue
{
    id: 99,
    name: "SIGACFG",
    description: "Configurador"
}
Aviso
titleAtenção

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

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

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

Bloco de código
languagejs
titleExemplo de retorno
linenumberstrue
collapsetrue
'20240805'
Expandir
titlegetRemoteType
ServiçoDescriçãoRetorno
ProSessionInfoServiceRetorna o tipo de remote conectadonumber

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

Bloco de código
languagejs
titleExemplo de retorno
linenumberstrue
collapsetrue
5
Expandir
titlegetSocketPort
ServiçoDescriçãoRetorno
ProSessionInfoServiceRetorna a porta de conexão do socketnumber

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

Bloco de código
languagejs
titleExemplo de retorno
linenumberstrue
collapsetrue
1254
Expandir
titlegetAppConfig
ServiçoDescriçãoRetorno
ProSessionInfoServiceRetorna as informações do aplicativoProAppConfig

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

Bloco de código
languagejs
titleExemplo de retorno
linenumberstrue
collapsetrue
{
    name: "Schedule",
    version: "1.0.0",
    versionAPI: "",
    productLine: "Protheus",
    api_baseUrl: "/",
    multiProtocolPort: null,
    serverBackend: null
}
Expandir
titlegetIdiom
ServiçoDescriçãoRetorno
ProSessionInfoServiceRetorna o idioma informado no loginstring

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

Bloco de código
languagejs
titleExemplo de retorno
linenumberstrue
collapsetrue
'pt-BR'
Expandir
titlegetErpAppConfig
ServiçoDescriçãoRetorno
ProSessionInfoServiceRetorna as informações do aplicativoProAppConfig

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

Bloco de código
languagejs
titleExemplo de retorno
linenumberstrue
collapsetrue
{
    name: "Schedule",
    version: "1.0.0",
    versionAPI: "",
    productLine: "Protheus",
    api_baseUrl: /,
    multiProtocolPort: null,
    serverBackend: null
}
Expandir
titlegetUser
ServiçoDescriçãoRetorno
ProSessionInfoServiceRetorna as informações do usuárioProUser

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

Bloco de código
languagejs
titleExemplo de retorno
linenumberstrue
collapsetrue
{\"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\":\"[email protected]\",\"phoneNumbers\":[],\"emails\":[{\"value\":\"[email protected]\",\"type\":\"work\",\"primary\":true}],\"active\":true,\"groups\":[],\"roles\":[],\"title\":\"\",\"department\":\"\"}
Aviso
titleAtenção

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

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

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

Bloco de código
languagejs
titleExemplo de retorno
linenumberstrue
collapsetrue
{
    Code: "  ",
    Description: ""
}
Aviso
titleAtenção

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

Expandir
titleInterfaces
Expandir
titleProAdapterBaseV2

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
Expandir
titleProAdapterListInterface

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'
Expandir
titleProAdapterQueryInterface

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'





Templatedocumentos

Painel
titleBGColor#ADD8E6
titlePacote

https://www.npmjs.com/package/@totvs/protheus-lib-core

Painel
titleBGColor#ADD8E6
titleDemais informações
Informações
titleVeja também

FwCallApp

Informações
titleLinks importantes

PO UI

Angular

Dica
titleArtigo e exemplo

Apps no Protheus | TOTVS Developers | Medium

Painel
titleBGColor#ADD8E6

Repositório com exemplos