Trabalhando com P.E. Item() - Cadastro de Produtos


A pedido de alguns leitores do blog, estou postando um exemplo do uso de pontos de entrada no cadastro de Produtos (MVC)

A documentação do De/Para de pontos de entrada está listado no TDN em
http://tdn.totvs.com/display/public/PROT/PEST01015+-+MATA010+-+Pontos+de+Entrada+no+Cadastro+de+Produtos+MVC

Mas como utilizar?

Para fazer funcionar, precisaremos saber que a função que deveremos criar se chama ITEM().

No exemplo abaixo demonstraremos como substituir os pontos de entrada MT010INC, MT010ALT e MTA010E.

Ficará comentado alguns pontos que achamos importante

#include 'protheus.ch'
#include 'parmtype.ch'

User Function ITEM()
	Local oModel   	:= FwModelActive()
	Local aParam	:= PARAMIXB
	Local xRet 		:= .T.
	Local oObj 		:= ""
	Local cIdPonto 	:= ""
	Local cIdModel 	:= ""
	Local lIsGrid 	:= .F.
	Local nLinha 	:= 0
	Local nQtdLinhas:= 0
	Local cMsg 		:= ""
	Local cOper

	If aParam <> NIL
		oObj 	:= aParam[1]
		cIdPonto:= aParam[2]
		cIdModel:= aParam[3]
		lIsGrid := (Len(aParam) > 3) //se maior que 3, significa que é um grid.		                                                     
		cOper 	:= oObj:GetOperation()	//Armazena o tipo de operação que está sendo efetuada.	
		
		If cIdPonto == "MODELPOS"
			//cOper 	:= oObj:GetOperation()
			/*
			cMsg := "Chamada na validação total do modelo." + CRLF
			cMsg += "ID " + cIdModel + CRLF

			xRet := ApMsgYesNo(cMsg + "Continua?")
			*/
			//if(cOper == 5)

				//xRet := !(U_MFAT030E(SB1->B1_COD))

			//endif

		ElseIf cIdPonto == "FORMPOS"
			/*
			cMsg := "Chamada na validação total do formulário." + CRLF
			cMsg += "ID " + cIdModel + CRLF

			If lIsGrid
			     cMsg += "É um FORMGRID com " + Alltrim(Str(nQtdLinhas)) + " linha(s)." + CRLF
                cMsg += "Posicionado na linha " + Alltrim(Str(nLinha)) + CRLF
		  	Else
			     cMsg += "É um FORMFIELD" + CRLF
			EndIf

			xRet := ApMsgYesNo(cMsg + "Continua?")
			*/

		ElseIf cIdPonto == "FORMLINEPRE"
			If aParam[5] == "DELETE"
				/*
				cMsg := "Chamada na pré validação da linha do formulário. " + CRLF
				cMsg += "Onde esta se tentando deletar a linha" + CRLF
				cMsg += "ID " + cIdModel + CRLF
				cMsg += "É um FORMGRID com " + Alltrim(Str(nQtdLinhas)) + " linha(s)." + CRLF
				cMsg += "Posicionado na linha " + Alltrim(Str(nLinha)) + CRLF
				xRet := ApMsgYesNo(cMsg + " Continua?")
				*/

			EndIf

		ElseIf cIdPonto == "FORMLINEPOS"
			/*
			cMsg := "Chamada na validação da linha do formulário." + CRLF
			cMsg += "ID " + cIdModel + CRLF
			cMsg += "É um FORMGRID com " + Alltrim(Str(nQtdLinhas)) + " linha(s)." + CRLF
			cMsg += "Posicionado na linha " + Alltrim(Str(nLinha)) + CRLF
			xRet := ApMsgYesNo(cMsg + " Continua?")
			*/
		ElseIf cIdPonto == "MODELCOMMITTTS" //depois da mensagem de integração com o TAF
            //Os pontos de entrada MT010INC, MT010ALT e MTA010E estão sendo tratados aqui
			//Chamada após a gravação total do modelo e dentro da transação.
			
			if(cOper == 5)  //Se exclusão tratar com esta opção 5   //poderia utilizar tambem if(aParam[5] == "DELETE")
                MsgInfo("Exclusão")			
			Else
				
				//Ajusta o conteudo do campo B1_CNAE para remover a mascara pois não são validados pelo SIMPLISS
				If SB1->(dbSeek(xFilial("SB1")+SB1->B1_COD))
					RecLock("SB1",.F.)
					SB1->B1_CNAE := STRTRAN(STRTRAN(SB1->B1_CNAE,'-',''),'/','')
					SB1->(MsUnlock())
				Endif

			Endif
			
		ElseIf cIdPonto == "MODELCOMMITNTTS" //depois da mensagem de integração com o TAF
			//ApMsgInfo("Chamada após a gravação total do modelo e fora da transação.")
			//ApMsgInfo("MODELCOMMITNTTS")
		ElseIf cIdPonto == "FORMCOMMITTTSPRE" 
			//ApMsgInfo("Chamada após a gravação da tabela do formulário.")
			//ApMsgInfo("FORMCOMMITTTSPRE")

		ElseIf cIdPonto == "FORMCOMMITTTSPOS"
			//ApMsgInfo("Chamada após a gravação da tabela do formulário.")
			//ApMsgInfo("FORMCOMMITTTSPOS")
		ElseIf cIdPonto == "MODELCANCEL"
            /*
            //validar o botão Cancelar
			cMsg := "Deseja realmente sair?"
			xRet := ApMsgYesNo(cMsg)
			*/

		ElseIf cIdPonto == "BUTTONBAR"
            //Criar um botão na barra de botões da rotina
			//xRet := {{"Salvar", "SALVAR", {||alert("botão salvar")}}}

		EndIf
	Endif
Return xRet

Dúvidas? Comente!