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


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
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
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
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
      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
      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
      //-------------------------------------------------------------------
      /*/{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
{
    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
{
    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
{
    "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ç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
{
	"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
"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
{
	"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
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
{
	"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
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
ProAdapterBaseV2<T>

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'