No artigo de hoje, vamos demonstrar em como você pode adicionar botões dentro de uma tela de manipulação em MVC conforme o tipo de operação (adicionar botões por exemplo, somente se for inclusão ou alteração).
Quando usamos o método AddUserButton em uma ViewDef em MVC, tem um parâmetro chamado aOptions, e dentro dele, nós informamos qual é o tipo de operação que esse botão vai aparecer.
Se você não informar nada, ele vai mostrar em todas as operações. Ai você pode informar manualmente, fazendo diversas combinações como:
- Somente Inclusão
- Somente Visualização
- Somente Alteração
- Somente Exclusão
- Inclusão e Visualização
- Inclusão e Alteração
- Alteração e Visualização
- Inclusão, Alteração e Exclusão
- Entre outras
Abaixo um print de uma tela de alteração, note que ela vai exibir alguns botões no Outras Ações:
E abaixo o exemplo de código fonte montado:
//Bibliotecas
#Include "Totvs.ch"
#Include "FWMVCDef.ch"
//Variveis Estaticas
Static cTitulo := "Artistas (com botões na ViewDef)"
Static cAliasMVC := "ZD1"
/*/{Protheus.doc} User Function zMVC07
Cadastro de Artistas (com botões na ViewDef)
@author Daniel Atilio
@since 11/02/2022
@version 1.0
/*/
User Function zMVC07()
Local aArea := GetArea()
Local oBrowse
Private aRotina := {}
//Definicao do menu
aRotina := MenuDef()
//Instanciando o browse
oBrowse := FWMBrowse():New()
oBrowse:SetAlias(cAliasMVC)
oBrowse:SetDescription(cTitulo)
oBrowse:DisableDetails()
//Ativa a Browse
oBrowse:Activate()
RestArea(aArea)
Return Nil
Static Function MenuDef()
Local aRotina := {}
//Adicionando opcoes do menu
ADD OPTION aRotina TITLE "Visualizar" ACTION "VIEWDEF.zMVC07" OPERATION 1 ACCESS 0
ADD OPTION aRotina TITLE "Incluir" ACTION "VIEWDEF.zMVC07" OPERATION 3 ACCESS 0
ADD OPTION aRotina TITLE "Alterar" ACTION "VIEWDEF.zMVC07" OPERATION 4 ACCESS 0
ADD OPTION aRotina TITLE "Excluir" ACTION "VIEWDEF.zMVC07" OPERATION 5 ACCESS 0
Return aRotina
Static Function ModelDef()
Local oStruct := FWFormStruct(1, cAliasMVC)
Local oModel
Local bPre := Nil
Local bPos := Nil
Local bCommit := Nil
Local bCancel := Nil
//Cria o modelo de dados para cadastro
oModel := MPFormModel():New("zMVC07M", bPre, bPos, bCommit, bCancel)
oModel:AddFields("ZD1MASTER", /*cOwner*/, oStruct)
oModel:SetDescription("Modelo de dados - " + cTitulo)
oModel:GetModel("ZD1MASTER"):SetDescription( "Dados de - " + cTitulo)
oModel:SetPrimaryKey({})
Return oModel
Static Function ViewDef()
Local oModel := FWLoadModel("zMVC07")
Local oStruct := FWFormStruct(2, cAliasMVC)
Local oView
//Cria a visualizacao do cadastro
oView := FWFormView():New()
oView:SetModel(oModel)
oView:AddField("VIEW_ZD1", oStruct, "ZD1MASTER")
oView:CreateHorizontalBox("TELA" , 100 )
oView:SetOwnerView("VIEW_ZD1", "TELA")
//Adiciona botões direto no Outras Ações da ViewDef
oView:addUserButton("* Botão em Tudo", "MAGIC_BMP", {|| Alert("Teste 1")}, /*cToolTip*/, /*nShortCut*/, /*aOptions*/, /*lShowBar*/)
oView:addUserButton("* Botão Somente Inclusão", "MAGIC_BMP", {|| Alert("Teste 2")}, /*cToolTip*/, /*nShortCut*/, {MODEL_OPERATION_INSERT}, /*lShowBar*/)
oView:addUserButton("* Botão Somente Alteração", "MAGIC_BMP", {|| Alert("Teste 3")}, /*cToolTip*/, /*nShortCut*/, {MODEL_OPERATION_UPDATE}, /*lShowBar*/)
oView:addUserButton("* Botão na Inclusão e Alteração", "MAGIC_BMP", {|| Alert("Teste 4")}, /*cToolTip*/, /*nShortCut*/, {MODEL_OPERATION_INSERT, MODEL_OPERATION_UPDATE}, /*lShowBar*/)
Return oView
Bom pessoal, por hoje é só.
Abraços e até a próxima.
