Árvore de páginas

Como utilizar os pontos de entrada da rotina MATA010 na P12

Produto:

Protheus ADVPL

Versões:

P12

Ocorrência:

Pontos de entrada M010ALT, A010TOK, M010INC, M010VLD, (...), não estão sendo chamados na P12

Passo a passo:

DESCRIÇÃO

Após a conversão de rotinas antigas para o novo padrão de desenvolvimento MVC, não é mais possível utilizar pontos de entrada antes disponíveis nestas rotinas, da forma que vinham sendo utilizados. Desta forma o presente documento tem como objetivo apresentar uma nova forma de utilização destes pontos de entrada no padrão MVC para a nova rotina de Cadastro de Produtos (MATA010).


COMO VERIFICAR?

Verifique no dicionário de dados se na tabela SX3 consta a tabela G3Q, caso conste, sua rotina já está no padrão MVC.


COMO FUNCIONA?

A partir de agora, você terá todos os pontos de entradas concentrados em apenas um único arquivo. Arquivo o qual, terá acesso a todos os pontos de entrada disponíveis no padrão MVC.

No momento em que o ponto entrada compilado for chamado, será possível receber o id do modelo de dados,e este id será uma informação do tipo caractere que será passada da lib para a variável PARAMIXB e irá variar de acordo com o momento, assim sendo será possível a partir dela, detectar em que momento da rotina estamos.


COMO TESTAR?

Compile uma função de usuário com o id do modelo de dados da rotina MATA010, neste caso o id será ITEM (este é o nome do ponto de entrada MVC da MATA010), receba o valor de PARAMIXB e retorne uma variável lógica recebendo .T. conforme exemplo abaixo:

#include "protheus.ch"
#include "parmtype.ch"

User Function ITEM()
    Local aParam := PARAMIXB
    Local xRet := .T.
Return xRet

Com este exemplo, uma vez colocado um ponto de entrada na linha 6, será possível verificar na posição 2 da variável APARAM todos os ids disponíveis por meio do modelo MVC na rotina e seus respectivos ids.


COMO MIGRAR OS PONTOS ANTIGOS PARA OS NOVOS?

Supondo que anteriormente fosse utilizado o ponto A010TOK para a validação total dos dados inseridos pelo usuário, e também foi identificado que o id FORMPOS é chamado após a confirmação do processo e o mesmo tem retorno lógico, iremos retirar os dados de validação de um e aplicar ao outro da seguinte forma:


FONTE: A010TOK.prw

#include "protheus.ch"
#include "parmtype.ch"

User Function A010TOK()
	Local lRet := .T.
	Local cB1_TIPO := M->B1_TIPO
	
	If cB1_TIPO == "PA"
		lRet := .F.
	EndIf
Return lRet


FONTE: MT010_MVC.prw

#include "protheus.ch"
#include "parmtype.ch"

User Function ITEM()
    Local aParam   := PARAMIXB
    Local oModel   := FwModelActive()
    Local oObj     := ""
    Local cIdPonto := ""
    Local cIdModel := ""
    Local lIsGrid  := .F.
    Local xRet     := .T.
    
    Local cB1_TIPO := ""
		
	// VERIFICA SE APARAM NÃO ESTÁ NULO
	If aParam <> NIL
        oObj := aParam[1]
        cIdPonto := aParam[2]
        cIdModel := aParam[3]
        lIsGrid := (Len(aParam) > 3)
		
		//	VERIFICA SE O PONTO EM QUESTÃO É O FORMPOS
		If cIdPonto == "FORMPOS"
		
			// VERIFICA SE OMODEL NÃO ESTÁ NULO
			If oModel <> NIL
			
				cB1_TIPO := oModel:GetModel("SB1MASTER"):GetValue("B1_TIPO") // ATRIBUI VALOR A VARIÁVEL POR MEIO DO MODELO DE DADOS
				If cB1_TIPO == "PA"
					xRet := .F.
				EndIf
				
			EndIf
			
		EndIf
	
	EndIf
Return xRet


EM CASO DE DÚVIDAS

1) Acesse o link http://tdn.totvs.com/display/public/PROT/ADV0041_PE_MVC_MATA010_P12;

2) Copie o exemplo completo e cole em um arquivo *.prw (exemplo: MT010_MVC.prw);

3) Compile o ponto de entrada e insira um ponto de parada na linha que cita If aParam <> NIL;

4) Acesse a rotina MATA010 debugando e realize o cadastro de um novo produto;

5) A partir deste ponto, será possível ver cada id dos momentos de validação;


ADVPL ATUAL

O modelo MVC é um novo modo de codificar em ADVPL, assim sendo será necessária uma análise das documentações referente ao mesmo, para tal vide área de Observações para saber mais.

Observações:

Para saber mais:

• Arquitetura MVC acesse: ADVPL utilizando MVC

• Acessando o modelo de dados: MPFormModel

• Utilização de pontos de entrada no padrão MVC acesse: Pontos de Entrada para fontes ADVPL desenvolvidos utilizando o conceito MVC

• Pontos de entrada MVC: Ponto de Entrada Padrão do MVC

• Exemplo MATA010: Pontos de Entrada MVC MATA010 na P12