No vídeo de hoje, vamos demonstrar em como criar uma tela para cadastro de informações do tipo CRUD (Create, Read, Update e Delete) no Protheus.
Abaixo o vídeo do nosso canal no YouTube:
Abaixo a estrutura da tabela:
Tabela (SX2):
ZA1 - Artistas - Totalmente compartilhada
Campos (SX3):
Campo | Tipo | Tamanho | Contexto | Visual? | Título | Usado | Browse | Obrigatório | Inic Padrão | Validação Usuário | Opções do ComboBox
===========*===========*=========*==========*============*=============*=======*========*=============*================================*=======================*===============================================================================================
ZA1_CODIGO | Caractere | 6 | Real | Visualizar | Código | Sim | Sim | | GetSXENum('ZA1', 'ZA1_CODIGO') | |
ZA1_DATA | Data | 8 | Real | Visualizar | Data Cad. | Sim | | | Date() | |
ZA1_HORA | Caractere | 8 | Real | Visualizar | Hora Cad. | Sim | | | Time() | |
ZA1_NOME | Caractere | 100 | Real | Alterar | Nome | Sim | Sim | Sim | | NaoVazio() |
ZA1_TIPO | Caractere | 1 | Real | Alterar | Tipo | Sim | Sim | Sim | | Pertence("ACDELMOPT") | A=Audiovisual;C=Cinema;D=Dança;E=Escultura;L=Literatura;M=Música;O=Outros;P=Pintura;T=Teatro;
ZA1_OBRAS | Numérico | 6,2 | Real | Alterar | Qtd. Obras | Sim | | | | Positivo() |
ZA1_OBSERV | Memo | 10 | Real | Alterar | Observações | Sim | | | | |
Índices (SIX):
ZA1_FILIAL + ZA1_CODIGO
ZA1_FILIAL + ZA1_NOME
Separadores (SXA):
Cadastro: ZA1_CODIGO, ZA1_DATA, ZA1_HORA
Artista: ZA1_NOME, ZA1_TIPO, ZA1_OBRAS, ZA1_OBSERV
Abaixo o código fonte desenvolvido para fazer o cadastro de informações na tabela:
//Bibliotecas
#Include "Totvs.ch"
#Include "FWMVCDef.ch"
//Variveis Estaticas
Static cTitulo := "Artistas"
Static cAliasMVC := "ZA1"
/*/{Protheus.doc} User Function zCadZA1
Cadastro de Artistas
@author Daniel Atilio
@since 10/04/2025
@version 1.0
@type function
@obs Codigo gerado automaticamente pelo Autumn Code Maker
@see http://autumncodemaker.com
/*/
User Function zCadZA1()
Local aArea := FWGetArea()
Local oBrowse
Private aRotina := {}
//Definicao do menu
aRotina := MenuDef()
//Instanciando o browse
oBrowse := FWMBrowse():New()
oBrowse:SetAlias(cAliasMVC)
oBrowse:SetDescription(cTitulo)
oBrowse:DisableDetails()
//Adicionando as Legendas
oBrowse:AddLegend( "ZA1->ZA1_TIPO == 'A'", "BLACK", "Audiovisual" )
oBrowse:AddLegend( "ZA1->ZA1_TIPO == 'C'", "BLUE", "Cinema" )
oBrowse:AddLegend( "ZA1->ZA1_TIPO == 'D'", "BROWN", "Dança" )
oBrowse:AddLegend( "ZA1->ZA1_TIPO == 'E'", "GRAY", "Escultura" )
oBrowse:AddLegend( "ZA1->ZA1_TIPO == 'L'", "GREEN", "Literatura" )
oBrowse:AddLegend( "ZA1->ZA1_TIPO == 'M'", "ORANGE", "Música" )
oBrowse:AddLegend( "ZA1->ZA1_TIPO == 'O'", "PINK", "Outros" )
oBrowse:AddLegend( "ZA1->ZA1_TIPO == 'P'", "RED", "Pintura" )
oBrowse:AddLegend( "ZA1->ZA1_TIPO == 'T'", "VIOLET", "Teatro" )
//Ativa a Browse
oBrowse:Activate()
FWRestArea(aArea)
Return Nil
/*/{Protheus.doc} MenuDef
Menu de opcoes na funcao zCadZA1
@author Daniel Atilio
@since 10/04/2025
@version 1.0
@type function
@obs Codigo gerado automaticamente pelo Autumn Code Maker
@see http://autumncodemaker.com
/*/
Static Function MenuDef()
Local aRotina := {}
//Adicionando opcoes do menu
ADD OPTION aRotina TITLE "Visualizar" ACTION "VIEWDEF.zCadZA1" OPERATION 1 ACCESS 0
ADD OPTION aRotina TITLE "Incluir" ACTION "VIEWDEF.zCadZA1" OPERATION 3 ACCESS 0
ADD OPTION aRotina TITLE "Alterar" ACTION "VIEWDEF.zCadZA1" OPERATION 4 ACCESS 0
ADD OPTION aRotina TITLE "Excluir" ACTION "VIEWDEF.zCadZA1" OPERATION 5 ACCESS 0
ADD OPTION aRotina TITLE "Copiar" ACTION "VIEWDEF.zCadZA1" OPERATION 9 ACCESS 0
Return aRotina
/*/{Protheus.doc} ModelDef
Modelo de dados na funcao zCadZA1
@author Daniel Atilio
@since 10/04/2025
@version 1.0
@type function
@obs Codigo gerado automaticamente pelo Autumn Code Maker
@see http://autumncodemaker.com
/*/
Static Function ModelDef()
Local oStruct := FWFormStruct(1, cAliasMVC)
Local oModel
Local bPre := Nil
Local bPos := Nil
Local bCancel := Nil
//Cria o modelo de dados para cadastro
oModel := MPFormModel():New("zCadZA1M", bPre, bPos, /*bCommit*/, bCancel)
oModel:AddFields("ZA1MASTER", /*cOwner*/, oStruct)
oModel:SetDescription("Modelo de dados - " + cTitulo)
oModel:GetModel("ZA1MASTER"):SetDescription( "Dados de - " + cTitulo)
oModel:SetPrimaryKey({})
Return oModel
/*/{Protheus.doc} ViewDef
Visualizacao de dados na funcao zCadZA1
@author Daniel Atilio
@since 10/04/2025
@version 1.0
@type function
@obs Codigo gerado automaticamente pelo Autumn Code Maker
@see http://autumncodemaker.com
/*/
Static Function ViewDef()
Local oModel := FWLoadModel("zCadZA1")
Local oStruct := FWFormStruct(2, cAliasMVC)
Local oView
//Cria a visualizacao do cadastro
oView := FWFormView():New()
oView:SetModel(oModel)
oView:AddField("VIEW_ZA1", oStruct, "ZA1MASTER")
oView:CreateHorizontalBox("TELA" , 100 )
oView:SetOwnerView("VIEW_ZA1", "TELA")
Return oView
Leitura Complementar:
- https://terminaldeinformacao.com/2023/06/14/a-diferenca-entre-abas-paineis-e-separadores-no-protheus-tabela-sxa/
- https://terminaldeinformacao.com/2021/01/06/o-que-pode-ser-quando-botoes-nao-funcionam-em-mvc/
Bom pessoal, por hoje é só.
Abraços e até a próxima.