01. CNTA121 - Exemplos de utilização de pontos de entrada MVC
Produto: | TOTVS Backoffice |
---|---|
Linha de Produto: | Linha Protheus |
Segmento: | Backoffice |
Módulo: | Gestão de Contratos |
Função: | CNTA121 - Medições |
Objetivo | Listar exemplos de implementação dos pontos de entrada MVC |
Lista 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
Desenvolvimento 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
Índice:
02. Impedir o encerramento da medição
Descrição: | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Eventos: | MODELVLDACTIVE | ||||||||||||
Programa Fonte: | CNTA121.PRW | ||||||||||||
Função: | CN121VlAct | ||||||||||||
Parâmetros: |
| ||||||||||||
Retorno: |
|
#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: |
|
#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: |
|
Importante
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.
#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: |
|
06. Modificar dados da CND antes da sua gravação(MD130GRV/CN130PGRV)
Descrição: | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Eventos: | FORMCOMMITTTSPRE | ||||||||||||
Programa Fonte: | CNTA121.PRW | ||||||||||||
Parâmetros: |
| ||||||||||||
Retorno: |
|
#include "PROTHEUS.CH" #INCLUDE "FWMVCDEF.CH" #INCLUDE "RWMAKE.CH" #INCLUDE "TBICONN.CH" User Function CNTA121() Local aParam := PARAMIXB Local xRet := .T. Local oModelCND := Nil Local cIdPonto := '' Local cIdModel := '' Local lIsInsert := .F. If aParam <> NIL cIdPonto:= AllTrim(aParam[2]) cIdModel:= aParam[3] If (cIdPonto == "FORMCOMMITTTSPRE" .And. cIdModel == "CNDMASTER")//FORMCOMMITTTSPRE: Antes da gravação da tabela do formulário. Equivalente ao MD130GRV oModelCND := aParam[1] lIsInsert := aParam[4] If lIsInsert .And. AllTrim(oModelCND:GetValue("CND_SITUAC")) == "B" oModelCND:LoadValue("CND_SITUAC", "L") EndIf ElseIf (cIdPonto == "FORMCOMMITTTSPOS" .And. cIdModel == "CNDMASTER")//FORMCOMMITTTSPOS: Após a gravação da tabela do formulário. Equivalente ao CN130PGRV //Lógica do usuário EndIf EndIf Return xRet
07. Adicionar botões na tela de medições(CN130BUT)
Descrição: | Possibilitar ao desenvolvedor realizar a mesma operação anteriormente feita no ponto de entrada CN130BUT | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Eventos: | BUTTONBAR | ||||||||||||||||
Programa Fonte: | CNTA121.PRW | ||||||||||||||||
Função: | Não há | ||||||||||||||||
Parâmetros: |
| ||||||||||||||||
Retorno: |
|
#INCLUDE "Protheus.ch" #INCLUDE "FWMVCDEF.CH" /*{Protheus.doc} CNTA121() Possibilitar ao desenvolvedor realizar a mesma operação anteriormente feita no ponto de entrada CN130BUT */ 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 := { {'Botão customizado', 'BUDGET', { |x| U_Exemplo(x) }, 'Botão customizado' } } //Uma opção nova será adicionada ao menu Outras Ações EndIf EndIf Return xRet User Function Exemplo(oView) Local oModel := oView:GetModel() Local nOpc := oModel:GetOperation() Alert( 'Ação customizada.' ) Return
08. Validar exclusão dos itens da medição(C130KDEL)
Descrição: | Possibilitar ao desenvolvedor realizar a mesma operação anteriormente feita no ponto de entrada C130KDEL | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Eventos: | FORMLINEPRE | ||||||||||||
Programa Fonte: | CNTA121.PRW | ||||||||||||
Parâmetros: |
| ||||||||||||
Retorno: |
|
09. Implementação equivalente CN130TOK
#INCLUDE "Protheus.ch" #INCLUDE "FWMVCDEF.CH" /*{Protheus.doc} CNTA121() Possibilitar ao desenvolvedor realizar a mesma operação anteriormente feita no ponto de entrada CN130TOK */ User Function CNTA121() Local aParam := PARAMIXB Local xRet := .T. Local oModel := Nil Local cIdPonto := '' Local cIdModel := '' If aParam <> NIL cIdPonto:= AllTrim(aParam[2]) cIdModel:= aParam[3] If (cIdPonto == "MODELPOS")//CN130TOK oModel := aParam[1]//instância de MPFormModel if oModel:GetOperation() == MODEL_OPERATION_INSERT If Empty(oModel:GetValue("CNDMASTER", "CND_OBS")) Alert("Informe observação.") xRet := .F. EndIf ElseIf oModel:GetOperation() == MODEL_OPERATION_UPDATE // ElseIf oModel:GetOperation() == MODEL_OPERATION_DELETE xRet := MsgYesNo("Confirma exclusão?") endif EndIf EndIf Return xRet
10. Implementação equivalente CN130VLIN
#INCLUDE "Protheus.ch" #INCLUDE "FWMVCDEF.CH" /*{Protheus.doc} CNTA121() Possibilitar ao desenvolvedor realizar a mesma operação anteriormente feita no ponto de entrada CN130VLIN */ User Function CNTA121() Local aParam := PARAMIXB Local xRet := .T. Local oModel := Nil Local oModelCNE := Nil Local cIdPonto := '' Local cIdModel := '' Local cCampo := "" Local cAction := "" Local lOnCheck := .F. 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 lOnCheck := FwIsInCallStack("CN121ITEM")//Indica que trata-se da carga dos itens ao marcar a CXN If cIdPonto == "FORMLINEPRE" .And. !lOnCheck cAction := aParam[5] cCampo := aParam[6] If cAction == "SETVALUE" //Inserir validação do valor de acordo com <cCampo> if cCampo == "CNE_QUANT" if oModelCNE:GetValue(cCampo) > 1 //Apresentar HELP xRet := .F. endif endif Elseif cAction == "CANSETVALUE" //Retorna se é possível alterar o campo(WHEN) de <cCampo>, usar com cuidado pois pode impactar performance EndIf EndIf EndIf EndIf Return xRet
11. Implementação equivalente CN130VCK/CN130VAD
#INCLUDE "Protheus.ch" #INCLUDE "FWMVCDEF.CH" /*{Protheus.doc} CNTA121() Possibilitar ao desenvolvedor realizar a mesma operação anteriormente feita no ponto de entrada CN130VCK/CN130VAD */ User Function CNTA121() Local aParam := PARAMIXB Local xRet := .T. Local oModel := Nil Local oModelCZY := Nil Local cIdPonto := '' Local cIdModel := '' Local cCampo := "" Local cAction := "" If aParam <> NIL oModel := aParam[1] cIdPonto:= AllTrim(aParam[2]) cIdModel:= aParam[3] If(cIdModel == 'CZYDETAIL')//CZY = Tabela de amarração Medição x Adiantamentos(CNX) oModelCZY := oModel //Qnd cIdModel for CZYDETAIL, oModel será o submodelo(FwFormGridModel) da CZY If cIdPonto == "FORMLINEPRE"//CN130VCK cAction := aParam[5] cCampo := aParam[6] If cAction == "SETVALUE" if cCampo == "CZY_VALOR" if oModelCZY:GetValue(cCampo) > 100 //Apresentar HELP xRet := .F. endif endif EndIf ElseIf cIdPonto == "FORMPOS" //CN130VAD //Realizar validacao EndIf EndIf EndIf Return xRet
12. Implementação equivalente CN130VCK/CN130MTINC
#INCLUDE "Protheus.ch" #INCLUDE "FWMVCDEF.CH" /*{Protheus.doc} CNTA121() Possibilitar ao desenvolvedor realizar a mesma operação anteriormente feita no ponto de entrada CN130VCK/CN130MTINC */ User Function CNTA121() Local aParam := PARAMIXB Local xRet := .T. Local cIdPonto := '' Local cIdModel := '' Local oMdlCNQ := Nil Local oMdlCNR1 := Nil Local oMdlCNR2 := Nil If aParam <> NIL cIdPonto:= AllTrim(aParam[2]) cIdModel:= aParam[3] If (cIdPonto == "FORMPOS" .And. cIdModel $ 'CNQDETAIL|CNRDETAIL1|CNRDETAIL2|') If(cIdModel == 'CNQDETAIL') //Descontos oMdlCNQ := aParam[1] ElseIf(cIdModel == 'CNRDETAIL1') //Multas/Bonificacoes por Medição oMdlCNR1 := aParam[1] ElseIf(cIdModel == 'CNRDETAIL2') //Multas/Bonificacoes por Item oMdlCNR2 := aParam[1] EndIf endif EndIf Return xRet