Entenda o que é e como funciona o Ponto de Entrada Protheus
Entenda o Ponto de Entrada Protheus
Ponto de Entrada Protheus são chamadas de Programas ADVPL colocadas em pontos estratégicos nas funções padrões do sistema e que originalmente não fazem nada. O conceito utilizado para a Criação de um Ponto de Entrada é o mesmo da herança adotado nas linguagens para Banco de Dados, ou seja, (Store Procedures).
Assim que o desenvolvedor identificar a necessidade de uma intervenção nestes pontos, basta criar a rotina, dar a ela o nome específico citado na documentação do Protheus e compilá-la.
No momento em que a Rotina Padrão for disparada e passar pela customização do Ponto de Entrada, o mesmo também será executado.
Podemos dizer que esta é a maneira mais prática de intervenção aos Programas Padrões do sistema sem a necessidade de alteração dos mesmos, fazendo com que estas implementações passem despercebidas pelo usuário no momento de sua execução.
Porém é necessário que saibamos muito bem sobre a Lógica do Programa em questão e até mesmo qual é a situação de memória utilizada naquele momento.
Objetivos
Um ponto de entrada é uma User Function desenvolvida com a finalidade de interagir com uma rotina padrão da aplicação ERP.
A User Function deverá ter um nome pré-estabelecido no desenvolvimento da rotina padrão do ERP, e de acordo com esta pré-disposição e o momento no qual o ponto de entrada é executado durante um processamento, ele poderá:
- Complementar uma validação realizada pela aplicação;
- Complementar as atualizações realizadas pelo processamento em tabelas padrões do ERP;
- Implementar a atualização de tabelas especificas durante o processamento de uma rotina padrão do ERP;
- Executar uma ação sem processos de atualizações, mas que necessite utilizar as informações atuais do Ambiente, durante o processamento da rotina padrão para determinar as características do processo;
- Substituir um processamento padrão do Sistema por uma regra específica do cliente, no qual o mesmo será implementado.
Premissas e Regras
Um ponto de entrada não deve ser utilizado para outras finalidades senão para as quais o mesmo foi pré-definido, sob pena de causar a perda da integridade das informações da base de dados ou provocar eventos de erro durante a execução da rotina padrão.
Um ponto de entrada deve ser transparente para o processo padrão, de forma que todas as tabelas, acessadas pelo ponto de entrada e que sejam utilizadas pela rotina padrão, deverão ter sua situação imediatamente anterior à execução do ponto restaurado ao término do mesmo, e para isto recomenda-se o uso das funções GETAREA() e RESTAREA().
GETAREA()
Função utilizada para proteger o ambiente ativo no momento de algum processamento específico. Para salvar uma outra área de trabalho (alias) que não o ativo, a função GetArea() deve ser executada dentro do alias: ALIAS->( GetArea() ).
Retorno: Array contendo {Alias(),IndexOrd(),Recno()}
RESTAREA()
Função utilizada para devolver a situação do ambiente salva, através do comando GETAREA(). Deve-se observar que a última área restaurada é a área que ficará ativa para a aplicação.
Sintaxe: RESTAREA(aArea)
Retorno: aArea Array contendo {cAlias, nOrdem, nRecno}, normalmente gerado pelo uso da função GetArea().
Como um ponto de entrada não é executado da forma tradicional, ou seja, ele não é chamado como uma função, ele não recebe parâmetros. A aplicação ERP disponibiliza uma variável de Sistema denominada PARAMIXB, a qual recebe os parâmetros da função chamadora e os disponibiliza para serem utilizados pela rotina customizada.
A variável PARAMIXB não possui um padrão de definição nos códigos fontes da aplicação ERP, desta forma seu tipo pode variar de um conteúdo simples (caractere, numérico, lógico e etc.) a um tipo complexo como um array ou um objeto. Assim, é necessário sempre avaliar a documentação sobre o ponto, bem como proteger a função customizada de tipos de PARAMIXB não tratados por ela.
Quando criar
Exemplo: Montagem das parcelas de pagamento de um pedido
Ele é útil em processos que podem ser diferentes de acordo com o tipo de negócio de cada empresa ou estratégia adotada.
Ex: Relatório de Pedido, Cadastro de Clientes
Sintaxe
Local lRetorno := .F.
Local LTMKMCL := Existblock(“TMKMCl”) // O “Existblock” detecta se existe uma função no repositório
If lTMKMCL
lRetorno := Execblock(“TMKMCI”,.F.,F.,{aValor}) // aValor é um array que seria recebido pelo usuario
Endif
Return( lRetorno )
Estude para provas de certificações em TI com os simulados Bynem