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!