Olá pessoal…
Na aula de hoje vou mostrar como fazer um MarkBrowse em MVC (browse com opção de flagar / checar um registro).
Abaixo o código fonte completo usado na aula:
//Bibliotecas
#Include 'Protheus.ch'
#Include 'FwMVCDef.ch'
/*/{Protheus.doc} zMkMVC
MarkBrow em MVC da tabela de Artistas
@author Atilio
@since 03/09/2016
@version 1.0
@obs Criar a coluna ZZ1_OK com o tamanho 2 no Configurador e deixar como não usado
/*/
User Function zMkMVC()
Private oMark
//Criando o MarkBrow
oMark := FWMarkBrowse():New()
oMark:SetAlias('ZZ1')
//Setando semáforo, descrição e campo de mark
oMark:SetSemaphore(.T.)
oMark:SetDescription('Seleção do Cadastro de Artistas')
oMark:SetFieldMark( 'ZZ1_OK' )
//Setando Legenda
oMark:AddLegend( "ZZ1->ZZ1_COD <= '000005'", "GREEN", "Menor ou igual a 5" )
oMark:AddLegend( "ZZ1->ZZ1_COD > '000005'", "RED", "Maior que 5" )
//Ativando a janela
oMark:Activate()
Return NIL
/*---------------------------------------------------------------------*
| Func: MenuDef |
| Autor: Daniel Atilio |
| Data: 03/09/2016 |
| Desc: Criação do menu MVC |
*---------------------------------------------------------------------*/
Static Function MenuDef()
Local aRotina := {}
//Criação das opções
ADD OPTION aRotina TITLE 'Visualizar' ACTION 'VIEWDEF.zModel1' OPERATION 2 ACCESS 0
ADD OPTION aRotina TITLE 'Alterar' ACTION 'VIEWDEF.zModel1' OPERATION 4 ACCESS 0
ADD OPTION aRotina TITLE 'Processar' ACTION 'u_zMarkProc' OPERATION 2 ACCESS 0
ADD OPTION aRotina TITLE 'Legenda' ACTION 'u_zMod1Leg' OPERATION 2 ACCESS 0
Return aRotina
/*---------------------------------------------------------------------*
| Func: ModelDef |
| Autor: Daniel Atilio |
| Data: 03/09/2016 |
| Desc: Criação do modelo de dados MVC |
*---------------------------------------------------------------------*/
Static Function ModelDef()
Return FWLoadModel('zModel1')
/*---------------------------------------------------------------------*
| Func: ViewDef |
| Autor: Daniel Atilio |
| Data: 03/09/2016 |
| Desc: Criação da visão MVC |
*---------------------------------------------------------------------*/
Static Function ViewDef()
Return FWLoadView('zModel1')
/*/{Protheus.doc} zMarkProc
Rotina para processamento e verificação de quantos registros estão marcados
@author Atilio
@since 03/09/2016
@version 1.0
/*/
User Function zMarkProc()
Local aArea := GetArea()
Local cMarca := oMark:Mark()
Local lInverte := oMark:IsInvert()
Local nCt := 0
//Percorrendo os registros da ZZ1
ZZ1->(DbGoTop())
While !ZZ1->(EoF())
//Caso esteja marcado, aumenta o contador
If oMark:IsMark(cMarca)
nCt++
//Limpando a marca
RecLock('ZZ1', .F.)
ZZ1_OK := ''
ZZ1->(MsUnlock())
EndIf
//Pulando registro
ZZ1->(DbSkip())
EndDo
//Mostrando a mensagem de registros marcados
MsgInfo('Foram marcados <b>' + cValToChar( nCt ) + ' artistas</b>.', "Atenção")
//Restaurando área armazenada
RestArea(aArea)
Return NIL
Bom pessoal, por hoje é só.
Abraços e até a próxima.
Boa Tarde, como eu poderia neste exemplo colocar na parte superior ou inferior da tela uma variável que eu pudesse colocar a quantidade de títulos selecionadas e outra a soma dos valores selecionados, tipo o que existe na tela padrão do protheus de liberação automática de títulos a pagar no financeiro.
Boa noite Paulo, tudo bem?
Rapaz, com o FWMarkBrowse eu nunca vi (apenas com o MSSelect mesmo), mas talvez o que você poderia fazer, é criar uma Dialog, e criar um Panel e vincular o seu mark com esse panel através do médoto SetOwner.
Ai você criaria gets em outro panel, e nos métodos de marcar os registros, você poderia incrementar as variáveis desses gets.
Qualquer dúvida, fico à disposição.
Um grande abraço.
Boa tarde.
Preciso criar um markbrowse como este na mesma tela onde terá um formulário, de forma que eu teria um formulário acima, e um markbrowse abaixo.
Como eu consigo fazer isso em MVC?
Obrigado desde já.
Bom dia Wexlei, tudo bem?
Na verdade você teria que criar um fonte MVC normal (sem ser markbrowse), e no viewdef dele, teria que criar uma struct de uma tabela, e nessa struct criar um campo tipo check, futuramente irei fazer uma vídeo aula sobre esse assunto.
Um grande abraço.
Obrigado pela resposta.
Consegui fazer dessa forma, porém não carrega nada na inclusão. Precisaria que carregasse nessa grid as informações de uma tabela independente de ser inclusão, alteração ou exclusão, porque o usuário irá selecionar alguns dos registros dela que será associado ao que estiver sendo incluído no formulário de cima.
Entendi Wexlei, estou tentando conseguir um tempo para voltar com as vídeo aulas, mas fique de olho, que irei tentar postar.
Um grande abraço.
Boa tarde, gostaria de saber como fazer este markbrowse com tela modelo 3, onde no cabeçalho tenho o titulo e no detalhe tenho os produtos da NF que deu origem ao titulo.
Obrigada
Boa noite Maria, tudo bem?
No caso, você teria que criar um campo na sua grid do tipo checkbox, seja via banco de dados (campo lógico) ou diretamente no ModelDef.
Um grande abraço.
Bom dia Dan_Atilo,
Estou usando este fonte que voce disponibilizou porem usando uma tabela fora do protheus, carregada os dados corretamente, quando excluo um dado ele não atualiza a tela, já usei o refresh() e não atualiza os dados o oMark
Bom dia Wanderson.
No caso, você está excluindo via RecLock na sua temporária?
Nesse link tem outro exemplo de FWMarkBrowse com temporária – https://terminaldeinformacao.com/knowledgebase/fwmarkbrowse-com-tabela-temporaria/