- Criado por Daniel Mendes De Melo Sousa, última alteração por Debora Frias Constantino em 29 out, 2024
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
Abaixo serão listados os recursos da biblioteca.
Comandos que permitem a integração de códigos ADVPL com códigos Javascript.
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:
- 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.
- 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
- 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;
- 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.
Para utilização do método jsToAdvpl com observable é necessário seguir os seguintes passos:
- No app Angular, utilizar o método buildObservable do serviço ProJsToAdvplService:
- 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"); } }); }
- Ainda no angular no fonte advpltojs.js fazer o envio do evento recebido:
- 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); }
- No fonte advpl que chama a FwCallApp, na função estática chamar o método AdvplToJs do WebChannel:
- 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ço | Descrição | Retorno |
---|---|---|
ProAppConfigService | Função que fecha a aplicação web | void |
Parâmetros
Nome | Tipo | Descrição | Obrigatório | Default |
---|---|---|---|---|
ask | boolean | 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ão | true |
Exemplo
fechar(): void { this.proAppConfigService.callAppClose(true); }
Serviço | Descrição | Retorno |
---|---|---|
ProAdapterBaseV2Service | Função que retorna query params (aceitos pela FwAdapterBaseV2) no formato HttpParams. | HttpParams |
Parâmetros
Nome | Tipo | Descrição | Obrigatório | Default |
---|---|---|---|---|
page | number | Número da página | Não | 1 |
pageSize | number | Quantidade de registros a serem retornados na página | Não | 20 |
filter | string | Filtro a ser utilizado na requisição | Não | Vazio |
fields | string | Campos a serem retornados pela requisição | Não | Vazio |
order | string | Ordenação a ser utilizada no retorno da requisição | Não | Vazio |
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ço | Descrição | Retorno |
---|---|---|
ProThreadInfoService | Retorna id, username, nome e emails do usuário logado | Observable de ProUserInfo |
Exemplo
getUserInfo(): void { this.proThreadInfoService.getUserInfoThread().subscribe({ next: (res: ProUserInfo) => this.user = res }); }
Serviço | Descrição | Retorno |
---|---|---|
ProBranchService | Retorna as filiais do usuário | Observable de ProBranchList |
Parâmetros
Nome | Tipo | Descrição | Obrigatório | Default |
---|---|---|---|---|
description | string | Descrição da filial | Não | Vazio |
page | number | Número da página | Não | 1 |
pageSize | number | Quantidade de registros a serem retornados na página | Não | 10 |
Exemplo
getUserBranches(): void { this.proBranchService.getUserBranches('Filial 01', 1, 20).subscribe({ next: res => this.branches = res }); }
Serviço | Descrição | Retorno |
---|---|---|
ProCompanyService | Retorna as empresas do usuário | Observable de ProCompanyList |
Parâmetros
Nome | Tipo | Descrição | Obrigatório | Default |
---|---|---|---|---|
corporateName | string | Nome da empresa | Não | Vazio |
page | number | Número da página | Não | 1 |
pageSize | number | Quantidade de registros a serem retornados na página | Não | 10 |
Exemplo
getUserCompanies(): void { this.proCompanyService.getUserCompanies('Empresa 01', 1, 20).subscribe({ next: res => this.companies = res }); }
Serviço | Descrição | Retorno |
---|---|---|
ProUserAccessService | Retorna se o usuário logado possui acesso a determinada rotina e/ou sub-rotina | Observable |
Parâmetros
Nome | Tipo | Descrição | Obrigatório | Default |
---|---|---|---|---|
cRotina | string | Nome da rotina a ser pesquisada | Sim | |
nOpc | number | Posiçã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 base | Não |
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 }); })}); }
{ access: false, message: "Esse usuário não possui acesso para executar essa operação.\r\nMenu: MATA010 / Rotina: A010Inclui" }
Serviço | Descrição | Retorno |
---|---|---|
ProUserAccessService | Retorna se o usuário logado possui acesso a determinada tabela e/ou operações com a tabela. | Observable |
Parâmetros
Nome | Tipo | Descrição | Obrigatório | Default |
---|---|---|---|---|
cTabela | string | Tabela a ser pesquisada | Sim | |
nOpc | number | Posiçã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 tabela | Não |
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 }); })}); }
{ access: false, message: "Esse usuário não possui acesso na tabela" }
Serviço | Descrição | Retorno |
---|---|---|
ProUserInfoService | Retorna informações adicionais do usuário logado | Observable |
Parâmetros:
Utiliza o usuário logado para efetuar a pesquisa
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 }); } ); }
{ "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" ] }
Serviço | Descrição | Retorno |
---|---|---|
ProUserProfileService | Metodo 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
Nome | Tipo | Descrição | Obrigatório | Default |
---|---|---|---|---|
programName | string | Nome do programa a ser salvo (max 20) | Sim | |
task | string | Nome da tarefa a ser salvo (max 10) | Sim | |
type | string | Tipo a ser salvo (max 10) | sim |
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ço | Descrição | Retorno |
---|---|---|
ProUserProfileService | Cria um novo registro no profile | Observable |
Parâmetros
Nome | Tipo | Descrição | Obrigatório | Default |
---|---|---|---|---|
value | string | Valor a ser gravado | Sim |
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); } }); }
{ "message":"Profile criado" }
Serviço | Descrição | Retorno |
---|---|---|
ProUserProfileService | Busca o valor de uma chave salva no profile | Observable |
Parâmetros
Nome | Tipo | Descrição | Obrigatório | Default |
---|---|---|---|---|
value | string | Valor default a ser retornado caso a chave de profile não exista | Não | "" |
respType | string | tipo de retorno, pode ser text ou json | Não | json |
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); } }); }
"Valor do profile"
Serviço | Descrição | Retorno |
---|---|---|
ProUserProfileService | Atualiza um registro no profile | Observable |
Parâmetros
Nome | Tipo | Descrição | Obrigatório | Default |
---|---|---|---|---|
value | string | Valor a ser gravado | Sim |
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); } }); }
{ "message":"Descrição" }
Serviço | Descrição | Retorno |
---|---|---|
ProUserProfileService | Deleta um registro no profile | Observable |
Parâmetros
(sem parâmetros para esse metodo.)
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); } }); }
null
Serviço | Descrição | Retorno |
---|---|---|
ProUserProfileService | Deleta e cria um registro no profile esse metodo pode substituir o uso do metodo create e update em alguns casos | Observable |
Parâmetros
Nome | Tipo | Descrição | Obrigatório | Default |
---|---|---|---|---|
value | string | Valor a ser gravado | Sim |
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); } }); }
{ "message":"Profile criado" }
Serviço | Descrição | Retorno |
---|---|---|
ProGenericAdapterService | Método para devolver uma listagem de registro baseado na api genericList | Observable |
Parâmetros
Nome | Tipo | Descrição | Obrigatório | Default |
---|---|---|---|---|
searchParams | ProAdapterListInterface | Parâmetros a serem enviados para o serviço, para maiores informações consultar a interface abaixo. | Sim |
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; } }); }
ProAdapterBaseV2<T>
Serviço | Descrição | Retorno |
---|---|---|
ProGenericAdapterService | Método para devolver uma listagem de registro baseado na api genericQuery | Observable |
Parâmetros
Nome | Tipo | Descrição | Obrigatório | Default |
---|---|---|---|---|
searchParams | ProAdapterQueryInterface | Parâmetros a serem enviados para o serviço, para maiores informações consultar a interface abaixo. | Sim |
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; } }); }
ProAdapterBaseV2<T>
Funcionamento
Esse recurso funciona apenas a partir da biblioteca do Po-Ui 17.3.9
Serviço | Descrição | Retorno |
---|---|---|
ProThemeService | Metodo 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.)
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ço | Descrição | Retorno |
---|---|---|
ProTheme | Objeto de temas padronizados para a plataforma Protheus | PoTheme |
Parâmetros
Nome | Tipo | Descrição | Obrigatório | Default |
---|---|---|---|---|
name | string | Nomenclatura do tema a ser instanciado | Sim | '' |
active | boolean | Qual configuração deve ser a padrão a ser inicializada | Sim | 0 |
type | PoThemeTokens | Descrição da paleta de cores utilizada para a definição do tema novo instanciado | Sim | PoThemeTokens |
Exemplo
import { ProThemeService } from '@totvs/protheus-lib-core';
import { ProTheme} from '@totvs/protheus-lib-core'; getNewTheme(): ProTheme{ public proTheme: ProTheme = new ProTheme(); return proTheme; }
Métodos
availableThemes()
Método | Descrição | Retorno |
---|---|---|
availableThemes | Retorno de temas padronizados disponíveis pelo serviço ProThemeService | PoTheme |
Parâmetros
(sem parâmetros para esse metodo.)
Exemplo
import { ProThemeService } from '@totvs/protheus-lib-core';
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ço | Descrição | Retorno |
---|---|---|
ProSessionInfoService | Retorna um objeto com todas as informações de sessão do aplicativo | ProSessionInfo |
Parâmetros
(sem parâmetros para este método)
{ 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ço | Descrição | Retorno |
---|---|---|
ProSessionInfoService | Retorna as informações da empresa logada | ProCompany |
Parâmetros
(sem parâmetros para este método)
{ Code: "T1", InternalId: "T1", CorporateName: "Grupo TOTVS 1 " }
Serviço | Descrição | Retorno |
---|---|---|
ProSessionInfoService | Retorna as informações da filial logada | ProBranch |
Parâmetros
(sem parâmetros para este método)
{ CompanyCode: "T1", EnterpriseGroup: "T1", ParentCode: "D MG 01 ", Code: "D MG 01 ", Description: "Filial BELO HOR " }
Serviço | Descrição | Retorno |
---|---|---|
ProSessionInfoService | Retorna o módulo logado | string |
Parâmetros
(sem parâmetros para este método)
'CFG'
Serviço | Descrição | Retorno |
---|---|---|
ProSessionInfoService | Retorna o nome do app | string |
Parâmetros
(sem parâmetros para este método)
'nomeApp'
Serviço | Descrição | Retorno |
---|---|---|
ProSessionInfoService | Retorna as informações do módulo logado | ProSystemModules |
Parâmetros
(sem parâmetros para este método)
{ id: 99, name: "SIGACFG", description: "Configurador" }
Atenção
Essa informação existe somente quando o aplicativo é executado via WebApp.
Serviço | Descrição | Retorno |
---|---|---|
ProSessionInfoService | Retorna a database informada no login | string |
Parâmetros
(sem parâmetros para este método)
'20240805'
Serviço | Descrição | Retorno |
---|---|---|
ProSessionInfoService | Retorna o tipo de remote conectado | number |
Parâmetros
(sem parâmetros para este método)
5
Serviço | Descrição | Retorno |
---|---|---|
ProSessionInfoService | Retorna a porta de conexão do socket | number |
Parâmetros
(sem parâmetros para este método)
1254
Serviço | Descrição | Retorno |
---|---|---|
ProSessionInfoService | Retorna as informações do aplicativo | ProAppConfig |
Parâmetros
(sem parâmetros para este método)
{ name: "Schedule", version: "1.0.0", versionAPI: "", productLine: "Protheus", api_baseUrl: "/", multiProtocolPort: null, serverBackend: null }
Serviço | Descrição | Retorno |
---|---|---|
ProSessionInfoService | Retorna o idioma informado no login | string |
Parâmetros
(sem parâmetros para este método)
'pt-BR'
Serviço | Descrição | Retorno |
---|---|---|
ProSessionInfoService | Retorna as informações do aplicativo | ProAppConfig |
Parâmetros
(sem parâmetros para este método)
{ name: "Schedule", version: "1.0.0", versionAPI: "", productLine: "Protheus", api_baseUrl: /, multiProtocolPort: null, serverBackend: null }
Serviço | Descrição | Retorno |
---|---|---|
ProSessionInfoService | Retorna as informações do usuário | ProUser |
Parâmetros
(sem parâmetros para este método)
{\"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\":\"\"}
Atenção
Essa informação existe somente quando o aplicativo é executado via WebApp.
Serviço | Descrição | Retorno |
---|---|---|
ProSessionInfoService | Retorna as informações do papel de trabalho do usuário | ProRole |
Parâmetros
(sem parâmetros para este método)
{ Code: " ", Description: "" }
Atenção
Essa informação existe somente quando o aplicativo é executado via WebApp.
Serviço | Descrição | Retorno |
---|---|---|
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
Nome | Tipo | Descrição | Obrigatório | Default |
---|---|---|---|---|
language | string | Código do idioma | Não | pt |
'dd/mm/yyyy'
Interface base para o retorno de APIs que utilizam a classe FwAdapterBaseV2.
Propriedades
Propriedade | Tipo |
---|---|
items | Array<T> - o T indica o tipo dos registros a serem retornados no array |
hasNext | boolean |
remainingRecords | number |
Interface com os parâmetros possíveis para utilização do serviço ProGenericAdapterService.list().
Propriedades
Propriedade | Tipo | Obrigatório | Descrição |
---|---|---|---|
alias | string | sim | Indica o alias da tabela que terá seus dados listados |
filialFilter | boolean | não | Indica se deve ser feito o filtro da filial ([ALIAS]_FILIAL) - Opcional, tendo seu valor como verdadeiro por padrão. |
deletedFilter | boolean | não | Indica se deve ser feito o filtro de campos deletados de forma lógica (D_E_L_E_T_) |
page | numeric | não | número da pagina |
pageSize | numeric | não | quantidade de registros por página |
filter | string | não | filtro padrão oData a ser utilizado na requisição, ex.: propriedade1 eq 'valor1' and propriedade2 eq 'valor2' |
fields | string | não | campos 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 |
order | string | não | ordenação default da lista, ex.: a1_nome |
quickSearch | string | não | o 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ão | Alé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
Propriedade | Tipo | Obrigatório | Descrição |
---|---|---|---|
tables | string | sim | Indica o alias da tabela que terá seus dados listados, caso seja mais de uma tabela, os alias devem ser separados por vírgula |
filialFilter | boolean | não | Indica se deve ser feito o filtro da filial ([ALIAS]_FILIAL) - Opcional, tendo seu valor como verdadeiro por padrão. |
deletedFilter | boolean | não | Indica se deve ser feito o filtro de campos deletados de forma lógica (D_E_L_E_T_) |
where | string | não | Indica um filtro SQL que será incluso na query |
fromQry | string | não | Para 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 |
page | numeric | não | número da pagina |
pageSize | numeric | não | quantidade de registros por página |
filter | string | não | filtro padrão oData a ser utilizado na requisição, ex.: propriedade1 eq 'valor1' and propriedade2 eq 'valor2' |
fields | string | não | campos 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 |
order | string | não | ordenação default da lista, ex.: a1_nome |
quickSearch | string | não | o 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ão | Alé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' |
Veja também
Artigo e exemplo