Vídeo Aula – AdvPL 017 – MVC

Olá pessoal…

Na vídeo aula de hoje, irei mostrar alguns conceitos básicos de MVC em AdvPL, e criaremos tabelas e campos que serão usadas nas próximas aulas.


Fonte de exemplo:

//Bibliotecas
#Include "Protheus.ch"

/*/{Protheus.doc} zUpdTab
Função que cria tabelas, campos e índices para utilização nos exemplos de MVC
@type function
@author Atilio
@since 23/04/2016
@version 1.0
/*/

User Function zUpdTab()
	Local aArea := GetArea()
	
	Processa( {|| fAtualiza()}, "Processando...")
	
	RestArea(aArea)
Return

/*---------------------------------------------------------------------*
 | Func:  fAtualiza                                                    |
 | Autor: Daniel Atilio                                                |
 | Data:  23/04/2016                                                   |
 | Desc:  Função que chama as rotinas para criação                     |
 *---------------------------------------------------------------------*/

Static Function fAtualiza()
	ProcRegua(6)
	
	//ZZ1 - Artistas
	IncProc('Atualizando ZZ1 - Artistas...')
	fAtuZZ1()
	
	//ZZ2 - CDs
	IncProc('Atualizando ZZ2 - CDs...')
	fAtuZZ2()
	
	//ZZ3 - Músicas do CD
	IncProc('Atualizando ZZ3 - Músicas do CD...')
	fAtuZZ3()
	
	//ZZ4 - Venda de CDs
	IncProc('Atualizando ZZ4 - Venda de CDs...')
	fAtuZZ4()
Return

/*---------------------------------------------------------------------*
 | Func:  fAtuZZ1                                                      |
 | Autor: Daniel Atilio                                                |
 | Data:  23/04/2016                                                   |
 | Desc:  Função que cria a tabela ZZ1                                 |
 *---------------------------------------------------------------------*/

Static Function fAtuZZ1()
	Local aSX2 := {}
	Local aSX3 := {}
	Local aSIX := {}
	
	//Tabela
	//			01			02						03		04			05
	//			Chave		Descrição				Modo	Modo Un.	Modo Emp.
	aSX2 := {	'ZZ1',		'Artista',				'C',	'C',		'C'}
	
	//Campos
	//				01				02			03								04			05		06					07								08						09		10			11		12				13			14			15			16		17			18				19			20			21
	//				Campo			Filial?	Tamanho						Decimais	Tipo	Titulo				Descrição						Máscara				Nível	Vld.Usr	Usado	Ini.Padr.		Cons.F3	Visual		Contexto	Browse	Obrigat	Lista.Op		Mod.Edi	Ini.Brow	Pasta
	aAdd(aSX3,{	'ZZ1_FILIAL',	.T.,		FWSizeFilial(),				0,			'C',	"Filial",			"Filial do Sistema",			"",						1,		"",			.F.,	"",				"",			"",			"",			"N",	.T.,		"",				"",			"",			""})
	aAdd(aSX3,{	'ZZ1_COD',		.F.,		06,								0,			'C',	"Codigo",			"Codigo Artista",				"@!",					1,		"",			.T.,	"",				"",			"A",		"R",		"S",	.T.,		"",				"",			"",			""})
	aAdd(aSX3,{	'ZZ1_DESC',	.F.,		50,								0,			'C',	"Descricao",		"Descricao / Nome",			"@!",					1,		"",			.T.,	"",				"",			"A",		"R",		"S",	.T.,		"",				"",			"",			""})
	
	//Índices
	//				01			02			03							04				05				06			07
	//				Índice		Ordem		Chave						Descrição		Propriedade	NickName	Mostr.Pesq
	aAdd(aSIX,{	"ZZ1",		"1",		"ZZ1_FILIAL+ZZ1_COD",	"Codigo",		"U",			"",			"S"})
		
	//Criando os dados
	u_zCriaTab(aSX2, aSX3, aSIX)
Return

/*---------------------------------------------------------------------*
 | Func:  fAtuZZ2                                                      |
 | Autor: Daniel Atilio                                                |
 | Data:  23/04/2016                                                   |
 | Desc:  Função que cria a tabela ZZ2                                 |
 *---------------------------------------------------------------------*/

Static Function fAtuZZ2()
	Local aSX2 := {}
	Local aSX3 := {}
	Local aSIX := {}
	
	//Tabela
	//			01			02						03		04			05
	//			Chave		Descrição				Modo	Modo Un.	Modo Emp.
	aSX2 := {	'ZZ2',		'CDs',					'C',	'C',		'C'}
	
	//Campos
	//				01				02			03								04			05		06					07								08						09		10			11		12				13			14			15			16		17			18				19			20			21
	//				Campo			Filial?	Tamanho						Decimais	Tipo	Titulo				Descrição						Máscara				Nível	Vld.Usr	Usado	Ini.Padr.		Cons.F3	Visual		Contexto	Browse	Obrigat	Lista.Op		Mod.Edi	Ini.Brow	Pasta
	aAdd(aSX3,{	'ZZ2_FILIAL',	.T.,		FWSizeFilial(),				0,			'C',	"Filial",			"Filial do Sistema",			"",						1,		"",			.F.,	"",				"",			"",			"",			"N",	.T.,		"",				"",			"",			""})
	aAdd(aSX3,{	'ZZ2_CODART',	.F.,		06,								0,			'C',	"Cod. Artista",	"Codigo Artista",				"@!",					1,		"",			.T.,	"",				"",			"A",		"R",		"S",	.T.,		"",				"",			"",			""})
	aAdd(aSX3,{	'ZZ2_CODCD',	.F.,		06,								0,			'C',	"Cod. CD",			"Codigo CD",					"@!",					1,		"",			.T.,	"",				"",			"A",		"R",		"S",	.T.,		"",				"",			"",			""})
	aAdd(aSX3,{	'ZZ2_DESC',	.F.,		50,								0,			'C',	"Descricao",		"Descricao / Nome",			"@!",					1,		"",			.T.,	"",				"",			"A",		"R",		"S",	.T.,		"",				"",			"",			""})
	aAdd(aSX3,{	'ZZ2_PRECO',	.F.,		06,								2,			'N',	"Preco",			"Preco",						"@E 999.99",			1,		"",			.T.,	"",				"",			"A",		"R",		"S",	.T.,		"",				"",			"",			""})
	
	//Índices
	//				01			02			03										04									05				06			07
	//				Índice		Ordem		Chave									Descrição							Propriedade	NickName	Mostr.Pesq
	aAdd(aSIX,{	"ZZ2",		"1",		"ZZ2_FILIAL+ZZ2_CODCD",				"Codigo CD",						"U",			"",			"S"})
	aAdd(aSIX,{	"ZZ2",		"2",		"ZZ2_FILIAL+ZZ2_CODART+ZZ2_CODCD",	"Codigo Artista + Codigo CD",	"U",			"",			"S"})
		
	//Criando os dados
	u_zCriaTab(aSX2, aSX3, aSIX)
Return

/*---------------------------------------------------------------------*
 | Func:  fAtuZZ3                                                      |
 | Autor: Daniel Atilio                                                |
 | Data:  23/04/2016                                                   |
 | Desc:  Função que cria a tabela ZZ3                                 |
 *---------------------------------------------------------------------*/

Static Function fAtuZZ3()
	Local aSX2 := {}
	Local aSX3 := {}
	Local aSIX := {}
	
	//Tabela
	//			01			02						03		04			05
	//			Chave		Descrição				Modo	Modo Un.	Modo Emp.
	aSX2 := {	'ZZ3',		'Musicas do CD',		'C',	'C',		'C'}
	
	//Campos
	//				01				02			03								04			05		06					07								08						09		10			11		12				13			14			15			16		17			18				19			20			21
	//				Campo			Filial?	Tamanho						Decimais	Tipo	Titulo				Descrição						Máscara				Nível	Vld.Usr	Usado	Ini.Padr.		Cons.F3	Visual		Contexto	Browse	Obrigat	Lista.Op		Mod.Edi	Ini.Brow	Pasta
	aAdd(aSX3,{	'ZZ3_FILIAL',	.T.,		FWSizeFilial(),				0,			'C',	"Filial",			"Filial do Sistema",			"",						1,		"",			.F.,	"",				"",			"",			"",			"N",	.T.,		"",				"",			"",			""})
	aAdd(aSX3,{	'ZZ3_CODART',	.F.,		06,								0,			'C',	"Cod. Artista",	"Codigo Artista",				"@!",					1,		"",			.T.,	"",				"",			"A",		"R",		"S",	.T.,		"",				"",			"",			""})
	aAdd(aSX3,{	'ZZ3_CODCD',	.F.,		06,								0,			'C',	"Cod. CD",			"Codigo CD",					"@!",					1,		"",			.T.,	"",				"",			"A",		"R",		"S",	.T.,		"",				"",			"",			""})
	aAdd(aSX3,{	'ZZ3_CODMUS',	.F.,		06,								0,			'C',	"Cod. Musica",	"Codigo Musica",				"@!",					1,		"",			.T.,	"",				"",			"A",		"R",		"S",	.T.,		"",				"",			"",			""})
	aAdd(aSX3,{	'ZZ3_DESC',	.F.,		50,								0,			'C',	"Descricao",		"Descricao / Nome",			"@!",					1,		"",			.T.,	"",				"",			"A",		"R",		"S",	.T.,		"",				"",			"",			""})
	
	//Índices
	//				01			02			03													04													05				06			07
	//				Índice		Ordem		Chave												Descrição											Propriedade	NickName	Mostr.Pesq
	aAdd(aSIX,{	"ZZ3",		"1",		"ZZ3_FILIAL+ZZ3_CODCD+ZZ3_CODMUS",				"Codigo CD + Codigo Musica",					"U",			"",			"S"})
	aAdd(aSIX,{	"ZZ3",		"2",		"ZZ3_FILIAL+ZZ3_CODART+ZZ3_CODCD+ZZ3_CODMUS",	"Codigo Artista + Codigo CD + Codigo Musica",	"U",			"",			"S"})
		
	//Criando os dados
	u_zCriaTab(aSX2, aSX3, aSIX)
Return

/*---------------------------------------------------------------------*
 | Func:  fAtuZZ4                                                      |
 | Autor: Daniel Atilio                                                |
 | Data:  23/04/2016                                                   |
 | Desc:  Função que cria a tabela ZZ4                                 |
 *---------------------------------------------------------------------*/

Static Function fAtuZZ4()
	Local aSX2 := {}
	Local aSX3 := {}
	Local aSIX := {}
	
	//Tabela
	//			01			02						03		04			05
	//			Chave		Descrição				Modo	Modo Un.	Modo Emp.
	aSX2 := {	'ZZ4',		'Vendas dos CDs',		'C',	'C',		'C'}
	
	//Campos
	//				01				02			03								04			05		06					07								08						09		10			11		12				13			14			15			16		17			18				19			20			21
	//				Campo			Filial?	Tamanho						Decimais	Tipo	Titulo				Descrição						Máscara				Nível	Vld.Usr	Usado	Ini.Padr.		Cons.F3	Visual		Contexto	Browse	Obrigat	Lista.Op		Mod.Edi	Ini.Brow	Pasta
	aAdd(aSX3,{	'ZZ4_FILIAL',	.T.,		FWSizeFilial(),				0,			'C',	"Filial",			"Filial do Sistema",			"",						1,		"",			.F.,	"",				"",			"",			"",			"N",	.T.,		"",				"",			"",			""})
	aAdd(aSX3,{	'ZZ4_CODVEN',	.F.,		06,								0,			'C',	"Codigo",			"Codigo Venda",				"@!",					1,		"",			.T.,	"",				"",			"A",		"R",		"S",	.T.,		"",				"",			"",			""})
	aAdd(aSX3,{	'ZZ4_DESC',	.F.,		50,								0,			'C',	"Descricao",		"Descricao / Nome",			"@!",					1,		"",			.T.,	"",				"",			"A",		"R",		"S",	.T.,		"",				"",			"",			""})
	aAdd(aSX3,{	'ZZ4_CODCD',	.F.,		06,								0,			'C',	"Codigo CD",		"Codigo do CD",				"@!",					1,		"",			.T.,	"",				"",			"A",		"R",		"S",	.T.,		"",				"",			"",			""})
	aAdd(aSX3,{	'ZZ2_QUANT',	.F.,		03,								0,			'N',	"Quantidade",		"Quantidade",					"@E 999",				1,		"",			.T.,	"",				"",			"A",		"R",		"S",	.T.,		"",				"",			"",			""})
	aAdd(aSX3,{	'ZZ2_PRECO',	.F.,		06,								2,			'N',	"Preco",			"Preco",						"@E 999.99",			1,		"",			.T.,	"",				"",			"A",		"R",		"S",	.T.,		"",				"",			"",			""})
	aAdd(aSX3,{	'ZZ2_TOTAL',	.F.,		08,								2,			'N',	"Total",			"Total",						"@E 99,999.99",		1,		"",			.T.,	"",				"",			"A",		"R",		"S",	.T.,		"",				"",			"",			""})
	
	//Índices
	//				01			02			03							04				05				06			07
	//				Índice		Ordem		Chave						Descrição		Propriedade	NickName	Mostr.Pesq
	aAdd(aSIX,{	"ZZ4",		"1",		"ZZ4_FILIAL+ZZ4_CODVEN",	"Codigo",		"U",			"",			"S"})
		
	//Criando os dados
	u_zCriaTab(aSX2, aSX3, aSIX)
Return

Se quiser fazer o download desse código ou do conteúdo mostrado na vídeo aula, acesse nosso GitHub pelo link github.com/dan-atilio/AdvPL (Exemplos > Vídeo Aulas > 017 – MVC).

Link que contém o fonte para criação das tabelas: Clique Aqui

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.

2 Responses

  1. Edson Vidal disse:

    Olá Daniel tudo bem ?,

    Primeiramente parabéns pela qualidade das aulas, estou aprendendo muito com elas.

    Gostaria de saber se há previsão para a publicação de novos videos de serie MVC, no final da aula 017 fiquei com a impressão de que a sequencia, será um projeto com MVC, seria isso mesmo ?.

    • Dan_Atilio disse:

      Boa tarde Edson, tudo bem?
      Muito obrigado.
      Sim, a sequência serão novas aulas em MVC, por exemplo, a Aula 018 é um cadastro simples em MVC, é acabei ficando enrolado com uns projetos, e não tive tempo de montar, mas irei postar sim.
      Um grande abraço.
      Se tiver sugestões, pode entrar em contato.

Deixe uma resposta

Terminal de Informação