Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

01. CNTA121 - Exemplos de utilização de pontos de entrada MVC


Produto:

Solucoes_totvs_cross
SolucaoCrossTOTVS Backoffice

Linha de Produto:

Linhas_totvs
SegmentoDistribuição
RegionConstrução Projetos
LinhaLinha Protheus

Segmento:

Segmentos_totvs
SegmentoBackoffice

Módulo:Gestão de Contratos
Função:CNTA121 - Medições
ObjetivoListar exemplos de implementação dos pontos de entrada MVC
Dica
titleLista dos Pontos de Entrada

Para uma lista com o De/Para dos pontos de entrada do CNTA120 para o CNTA121, acessar a página GCT0084_Nova_Medição_CNTA121

Informações
titleDesenvolvimento de customizações

Caso tenha interesse em utilizar o modelo do CNTA121 em customizações é possível achar diversos exemplos na página Utilizando o modelo do CNTA121

02. Impedir o encerramento da medição


Descrição:

Possibilitar ao desenvolvedor realizar a mesma operação anteriormente feita no ponto de entrada CN120ENVL e no CN120VENC

Eventos:

MODELVLDACTIVE

Programa Fonte:

CNTA121.PRW

Função:

CN121VlAct

Parâmetros:
PosiçãoTipoDescrição
PARAMIXB[1]Objeto do tipo MPFormModel

Modelo do CNTA121 antes da sua ativação

PARAMIXB[2]caractereIdentificador do evento, nesse exemplo será sempre MODELVLDACTIVE
PARAMIXB[3]caractereIdentificador do modelo, nesse exemplo será CNTA121
Retorno:
ValorTipoDescrição
xRetlógico

O evento MODELVLDACTIVE requer um retorno lógico.

.T. = Prossegue com a operação

.F. = Aborta a operação




Bloco de código
titleExemplo
linenumberstrue
#INCLUDE "Protheus.ch"
#INCLUDE "FWMVCDEF.CH"

/*{Protheus.doc} CNTA121()
	Possibilitar ao desenvolvedor realizar a mesma operação anteriormente feita no ponto de entrada CN120ENVL
*/
User Function CNTA121()
	Local aParam := PARAMIXB
	Local xRet := .T.
	Local oModel := ''
	Local cIdPonto := ''
	Local cIdModel := ''

	If aParam <> NIL
		oModel 	:= aParam[1]
		cIdPonto:= aParam[2]
		cIdModel:= aParam[3]
		
		/*O evento de id <MODELVLDACTIVE> será sempre chamado ao iniciar uma operação com o modelo de dados via método Activate do MPFormModel,
		então para nos certificarmos que a validação só será executada no encerramento tal qual o p.e CN120ENVL, é necessário verificar se a chamada está sendo realizada
		através da função CN121MedEnc, pra isso utilizamos a função FwIsInCallStack
		 */
		If cIdPonto == 'MODELVLDACTIVE' .And. FwIsInCallStack("CN121MedEnc")
			/*Como o modelo ainda não foi ativado, devemos utilizar as tabelas p/ validação, a única informação que constara em oModel 
			será a operação(obtida pelo método GetOperation), que nesse exemplo sempre será MODEL_OPERATION_UPDATE. 				
			*/
			If (CND->CND_VLTOT > 1000)
				Help("",1,"CNTA121ENC",,"Nao foi possivel realizar essa operacao",1,1)
				xRet := .F.
			EndIf
		EndIf
	EndIf
Return xRet


03. Importar rateios para medição(CNZAUTRAT)


Descrição:

Possibilitar ao desenvolvedor realizar a mesma operação anteriormente feita no ponto de entrada CNZAUTRAT

Eventos:

BUTTONBAR

Programa Fonte:

CNTA121.PRW

Função:

Não há

Parâmetros:
PosiçãoTipoDescrição
PARAMIXB[1]Objeto do tipo MPFormModel

Modelo do CNTA121 antes da sua ativação

PARAMIXB[2]caractereIdentificador do evento, nesse exemplo será sempre BUTTONBAR
PARAMIXB[3]caractereIdentificador do modelo, nesse exemplo será CNTA121
Retorno:
ValorTipoDescrição
xRetvetor

O evento BUTTONBAR requer como retorno um vetor bidimensional(matriz).

Cada posição da matriz deve ser um vetor de 4 posições no seguinte formato:

TipoDescrição
CTítulo do botão
CNome do bitmap para exibição
BBloco de código que será executado
CTooltip



Bloco de código
titleExemplo
linenumberstrue
#INCLUDE "Protheus.ch"
#INCLUDE "FWMVCDEF.CH"

/*{Protheus.doc} CNTA121()
Possibilitar ao desenvolvedor realizar a mesma operação anteriormente feita no ponto de entrada CNZAUTRAT
*/
User Function CNTA121()
 	 Local aParam := PARAMIXB
     Local xRet := .T.
     Local oModel := ''
     Local cIdPonto := ''
     Local cIdModel := ''
 
     If aParam <> NIL
         oModel  := aParam[1]
         cIdPonto:= aParam[2]
         cIdModel:= aParam[3]
         
         If(cIdPonto == 'BUTTONBAR')
 			xRet := { {'Importar Rateios', 'BUDGET', { |x| U_Exemplo(x) }, 'Importa Rateios Excel' } } //Uma opção nova será adicionada ao menu Outras Ações
         EndIf
     EndIf
 Return xRet

User Function Exemplo(oView)
 	Local oModel	:= oView:GetModel()
	Local aHeadCNZ	:= {}
	Local nOpc		:= oModel:GetOperation()
	Local oModelCNZ := oModel:GetModel("CNZDETAIL")
	Local aRetAutRat:= {}
	Local nX 		:= 0
	Local nY 		:= 0

 	If (nOpc == MODEL_OPERATION_INSERT .Or. nOpc == MODEL_OPERATION_UPDATE)
		 If ExistBlock("CNZAUTRAT") 
			 aHeadCNZ	:= GCTHeadCNZ()
			 aRetAutRat := ExecBlock("CNZAUTRAT",.F.,.F.,{aHeadCNZ, {}, nOpc}) /*Nesse exemplo ele chamará o P.E já existente*/

			 If (Len(aRetAutRat) > 0)
			 	If (oModelCNZ:Length() > 1)
					for nX := 1 to oModelCNZ:Length()
						oModelCNZ:GoLine(nX)
						If !oModelCNZ:IsDeleted()
							oModelCNZ:DeleteLine()
						EndIf
					next nX
				EndIf

				for nX := 1 to Len(aRetAutRat) /*Percorrerá os registros e adicionará ao submodelo CNZDETAIL */
					If Len(aRetAutRat[nX]) == Len(aHeadCNZ)+1
						If !Empty(oModelCNZ:GetValue("CNZ_CC"))
							oModelCNZ:AddLine()							
						EndIf

						for nY := 1 to Len(aHeadCNZ)
							If AllTrim(aHeadCNZ[nY,2]) $ 'CNZ_PERC|CNZ_CC|' /*Adicionar os campos desejados*/
								oModelCNZ:SetValue(aHeadCNZ[nY,2], aRetAutRat[nX,nY])
							EndIf
						next nY
					EndIf
				next nX
			 EndIf
		 EndIf
 	Else
 		Alert( 'Operacao inválida.' )
 	EndIf
Return 

04. Realizar validações antes do estorno da Medição


Descrição:

Possibilitar ao desenvolvedor realizador validações antes do estorno da medição

Eventos:

MODELVLDACTIVE

Programa Fonte:

CNTA121.PRW

Função:

CN121Estorn

Parâmetros:
PosiçãoTipoDescrição
PARAMIXB[1]Objeto do tipo MPFormModel

Modelo do CNTA121 antes da sua ativação

PARAMIXB[2]caractereIdentificador do evento, nesse exemplo será sempre MODELVLDACTIVE
PARAMIXB[3]caractereIdentificador do modelo, nesse exemplo será CNTA121
Retorno:
ValorTipoDescrição
xRetlógico

O evento MODELVLDACTIVE requer um retorno lógico.

.T. = Prossegue com a operação

.F. = Aborta a operação


Informações
titleImportante

O único evento do MVC chamado no estorno da medição é o MODELVLDACTIVE, pois as demais operações de estorno são feitas sem utilizar o modelo de dados.

Bloco de código
titleExemplo
linenumberstrue
#INCLUDE "Protheus.ch"
#INCLUDE "FWMVCDEF.CH"

/*{Protheus.doc} CNTA121()
	Possibilitar ao desenvolvedor realizador validações antes do estorno da medição
*/
User Function CNTA121()
	Local aParam := PARAMIXB
	Local xRet := .T.
	Local oModel := ''
	Local cIdPonto := ''
	Local cIdModel := ''

	If aParam <> NIL
		oModel 	:= aParam[1]
		cIdPonto:= aParam[2]
		cIdModel:= aParam[3]
		
		/*O evento de id <MODELVLDACTIVE> será sempre chamado ao iniciar uma operação com o modelo de dados via método Activate do MPFormModel,
		então para nos certificarmos que a validação só será executada no estorno da medição é necessário verificar se a chamada está sendo realizada
		através da função CN121Estorn, pra isso utilizamos a função FwIsInCallStack
		 */
		If(cIdPonto == 'MODELVLDACTIVE' .And. FwIsInCallStack("CN121Estorn"))
			/*Como o modelo ainda não foi ativado, devemos utilizar as tabelas p/ validação, a única informação que constara em oModel 
			será a operação(obtida pelo método GetOperation), que nesse exemplo sempre será MODEL_OPERATION_UPDATE. 				
			*/
			If (CND->CND_VLTOT > 1000)
				Help("",1,"CN121ESTOR",,"Nao foi possível realizar essa operacao",1,1)
				xRet := .F.
			EndIf
		EndIf
	EndIf
Return xRet