Ejemplo de uso de punto de entrada padrón MVC para documentos fiscales de entrada.


#INCLUDE 'protheus.ch'

#INCLUDE 'FWMVCDEF.CH'

User Function LOCXIN()

Local aParam := PARAMIXB

Local xRet := .T.

Local oObj := ''

Local cIdPonto := ''

Local cIdModel := ''

Local cAction := ''

Local nLinha := 0

If aParam <> NIL
        
    oObj       := aParam[1]
    cIdPonto   := aParam[2]
    cIdModel   := aParam[3]
    
    If cIdPonto == 'MODELPRE' //Ejecutado antes de la alteración de cualquier campo del modelo.
        /*aParam
		1     O        Objeto del formulário o de modelo, conforme sea el caso
		2     C        ID local de ejecución del punto de entrada
		3     C        ID de formulário*/
        xRet := .T. 
    ElseIf cIdPonto == 'MODELPOS' //Validación total del modelo.
        /*aParam
		1     O        Objeto del formulário o de modelo, conforme sea el caso
		2     C        ID local de ejecución del punto de entrada
		3     C        ID de formulário*/
        oObj:GetModel("SF1_MASTER"):GetValue("F1_DOC")
        oObj:GetModel("SD1_DETAIL"):GetValue("D1_COD")
        xRet := .T. 
    ElseIf cIdPonto == 'FORMPRE' //Ejecutado antes de la alteración de cualquier campo de formulario.
        //Formulario
        /*aParam
		1     O        Objeto del formulário o de modelo, conforme sea el caso
		2     C        ID local de ejecución del punto de entrada
		3     C        ID de formulário
		4     C        Acción de formulario
		5     C        Id del campo
		6     C        Dato asignado al campo*/
        //Grid
        /*aParam
		1     O        Objeto del formulário o de modelo, conforme sea el caso
		2     C        ID local de ejecución del punto de entrada
		3     C        ID de formulário
		4     N        Número de línea de FWFORMGRID
		5     C        Acción de FWFORMGRID
		6     C        Id del campo*/
        If cIdModel == "SF1_MASTER"
            cAction := aParam[4]
        elseIf cIdModel == "SD1_DETAIL"
            cAction := aParam[5]
        EndIf
        If cAction == "CANSETVALUE" 
            //Código de validación
        ElseIf cAction == "SETVALUE" 
            //Código de validación
        EndIf
        xRet := .T. 
    ElseIf cIdPonto == 'FORMPOS' //Validación total del formulario.
        /*aParam
		1     O        Objeto del formulário o de modelo, conforme sea el caso
		2     C        ID local de ejecución del punto de entrada
		3     C        ID de formulário
		4     C        Acción de formulario
		5     C        Id del campo
		6			   Dato asignado al campo*/
        If cIdModel == "SF1_MASTER"
            //oObj:GetValue("F1_DOC")
        ElseIf cIdModel == "SD1_DETAIL"
            //oObj:GetValue("D1_COD")
        EndIf
        xRet := .T. 
    ElseIf cIdPonto == 'FORMLINEPRE' //Ejecutado antes de la alteración de una línea de formulário FWFORMGRID (Grid)
        /*aParam
		1     O        Objeto del formulário o de modelo, conforme sea el caso
		2     C        ID local de ejecución del punto de entrada
		3     C        ID de formulário
		4     N        Número de línea de FWFORMGRID
		5     C        Acción de FWFORMGRID
		6     C        Id del campo*/
        If cIdModel == "SD1_DETAIL"
            nLinha     := oObj:GetLine()
            //MsgInfo("Validación antes de edición de línea item" + oObj:GetValue("D1_ITEM", nLinha))
            xRet := .T. //Retorno de la validación.
        EndIf
    ElseIf cIdPonto == 'FORMLINEPOS' //Ejecutado al finalizar la edición de una línea de formulário FWFORMGRID (Grid). (Validación de línea)
        /*aParam
		1     O        Objeto del formulário o de modelo, conforme sea el caso
		2     C        ID local de ejecución del punto de entrada
		3     C        ID de formulário
		4     N        Número de línea de FWFORMGRID*/
        If cIdModel == "SD1_DETAIL"
            nLinha     := oObj:GetLine()
            //MsgInfo("Validación de edición de línea item" + oObj:GetValue("D1_ITEM", nLinha))
            xRet := .T. //Retorno de la validación.
        EndIf
    EndIf
EndIf

Return xRet


La función  de usuario debe llamarse "LOCXIN", sin embargo es importante que el nombre del fuente no sea "LOCXIN".

Para más información verificar: Punto de entrada padrón MVC