Adicionar botões em uma tela em MVC somente em determinadas operações

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:

Exemplo dos botõ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.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

Deixe uma resposta

Terminal de Informação