Histórico da Página
01. CNTA121 - Exemplos de utilização de pontos de entrada MVC
| Produto: |
| ||||||||
|---|---|---|---|---|---|---|---|---|---|
| Linha de Produto: |
| ||||||||
| Segmento: |
| ||||||||
| Módulo: | Gestão de Contratos | ||||||||
| Função: | CNTA121 - Medições | ||||||||
| Objetivo | Listar exemplos de implementação dos pontos de entrada MVC |
| Dica | ||
|---|---|---|
| ||
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 | ||
|---|---|---|
| ||
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: | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Eventos: | MODELVLDACTIVE | ||||||||||||
| Programa Fonte: | CNTA121.PRW | ||||||||||||
| Função: | CN121VlAct | ||||||||||||
| Parâmetros: |
| ||||||||||||
| Retorno: |
|
| Bloco de código | ||||
|---|---|---|---|---|
| ||||
#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: |
| ||||||||||||||||
| Retorno: |
|
| Bloco de código | ||||
|---|---|---|---|---|
| ||||
#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: |
| ||||||||||||
| Retorno: |
|
| Informações | ||
|---|---|---|
| ||
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 | ||||
|---|---|---|---|---|
| ||||
#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
|
05. Carregar dados adicionais na carga dos itens(CNE)
| Descrição: | Possibilitar ao desenvolvedor realizar a mesma operação anteriormente feita no ponto de entrada CN130INC | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Eventos: | FORMLINEPOS | ||||||||||||
| Programa Fonte: | CNTA121.PRW | ||||||||||||
| Parâmetros: |
| ||||||||||||
| Retorno: |
|
| Bloco de código | ||||
|---|---|---|---|---|
| ||||
#INCLUDE "Protheus.ch"
#INCLUDE "FWMVCDEF.CH"
/*{Protheus.doc} CNTA121()
Possibilitar ao desenvolvedor realizar a mesma operação anteriormente feita no ponto de entrada CN130INC
*/
User Function CNTA121()
Local aParam := PARAMIXB
Local xRet := .T.
Local oModel := Nil
Local oModelCND := Nil
Local oModelCNE := Nil
Local cIdPonto := ''
Local cIdModel := ''
Local cCampo := ""
Local cAction := ""
Local xValue := 0
If aParam <> NIL
oModel := aParam[1]
cIdPonto:= AllTrim(aParam[2])
cIdModel:= aParam[3]
If(cIdModel == 'CNEDETAIL')
oModelCNE := oModel //Qnd cIdModel for CNEDETAIl, oModel será o submodelo(FwFormGridModel) da CNE
If cIdPonto == "FORMPRE"
//
ElseIf cIdPonto == "FORMLINEPRE"
cAction := aParam[5]
cCampo := aParam[6]
If cAction == "SETVALUE"
//
Elseif cAction == "CANSETVALUE"
//
EndIf
ElseIf cIdPonto == "FORMLINEPOS"//Será ativado 1x por linha
oModelCND := oModelCNE:GetModel():GetModel("CNDMASTER")//Obtêm o modelo da CND, com ele é possível verificar valores da CND
/*Abaixo um exemplo de como informar valores para campos(que poderia ser um campo de usuário).*/
If oModelCNE:GetValue("CNE_VLUNIT") > 100
oModelCNE:LoadValue("CNE_CC", "GCT000001")
Else
oModelCNE:LoadValue("CNE_CC", "GCT000002")
EndIf
EndIf
ElseIf(cIdModel == 'CNDMASTER')//Cabeçalho
oModelCND := oModel //Qnd cIdModel for CNDMASTER, oModel será o submodelo(FWFormModel) da CND
If cIdPonto == "FORMPRE"
cAction := aParam[4]
cCampo := aParam[5]
xValue := aParam[6]
If cAction == "SETVALUE"
If cCampo == "CND_CONTRA"//Ao preencher o contrato
oModel:LoadValue("CND_OBS", "Observacao")
EndIf
Elseif cAction == "CANSETVALUE"
//
EndIf
EndIf
EndIf
EndIf
Return xRet
|