Exemplo CRUD WINDEV Mobile - com planos, oop, passagem de parametros, menu e login do sistema
https://www.youtube.com/watch?v=tLlaslkyqIQ
tem essa aula para explicar sobre o assunto
vou montar um CRUD para o Lino
logo mando aqui o exemplo
para todos
//Cadastro e Acesso de login
IF EDT_T003_nome = "" OR EDT_T003_Senha = "" THEN
RETURN
ELSE
HReset(t003_usuarios)
IF HReadSeek(t003_usuarios,t003_chave_composta,[EDT_T003_nome,EDT_T003_Senha],hIdentical) = True THEN //BUSCA COM CHAVE COMPOSTA
OpenMobileWindow(WIN_Menu,EDT_T003_nome)
ELSE
Info("Usuário ou senha estão errados ou não existe o cadastro")
//1 : Sim
//2 : Não
SWITCH Dialog("Deseja cadastrar esse usuario e senha?")
// Sim
CASE 1
//cadastrar
t003_usuarios.t003_nome = EDT_T003_nome
t003_usuarios.t003_senha = EDT_T003_Senha
HAdd(t003_usuarios)
// Não
CASE 2
END
END
END
// estou fazendo com planes e com janelas table form
para vc ter os dois exemplos
e um table pai x filho
pai x filhos
para vc entender como relacionar as tabelas
vai pro repositorio o exemplo dai quem quiser melhorar o exemplo ou colocar recursos é só ir me mandando as novas versoes
PROCEDURE Evento_Selecionar()
nx is int = TableInfoXY(TABLE_T000_config,tiLineNumber,MouseXPos(),MouseYPos())
IF nx > 0 THEN
gn_id = TABLE_T000_config[nx].COL_T000_config_ID
IF gn_id > 0 THEN
ExecuteProcess(BTN_Alterar,trtClick)
END
ENDPROCEDURE Evento_Selecionar()
nx is int = TableInfoXY(TABLE_T000_config,tiLineNumber,MouseXPos(),MouseYPos())
IF nx > 0 THEN
gn_id = TABLE_T000_config[nx].COL_T000_config_ID
IF gn_id > 0 THEN
ExecuteProcess(BTN_Alterar,trtClick)
END
END
--------------
PROCEDURE Evento_Incluir()
Reset(GR_Campos)
HReset(t000_config)
gn_acao = 1
MyWindow..Plane = 2
-----------------
PROCEDURE Evento_Alterar()
IF gn_id > 0 THEN
Reset(GR_Campos)
HReset(t000_config)
IF HReadSeek(t000_config,t000_config_ID,gn_id,hIdentical) = True THEN
gn_acao = 2
FileToScreen()
END
END
-------------------------
PROCEDURE Evento_Excluir()
IF gn_id > 0 THEN
Reset(GR_Campos)
HReset(t000_config)
IF HReadSeek(t000_config,t000_config_ID,gn_id,hIdentical) = True THEN
gn_acao = 3
HDelete(t000_config)
ToastDisplay("Excluido com sucesso")
TableDisplay(TABLE_T000_config,taInit)
END
END
plane 1
plano 2
PROCEDURE Evento_Gravar()
ScreenToFile()
IF gn_acao = 1 THEN
HAdd(t000_config)
ELSE IF gn_acao = 2 THEN
HModify(t000_config)
END
-----------------
PROCEDURE Evento_Cancelar()
Reset(GR_Campos)
MyWindow..Plane = 1
-------------
cria um grupo dos campos
GR_Campos com o botao direito laçando eles
e da um nome
no caso GR_Campos
assim nao tem que zerar campo a campo
zera o grupo e pronto
e o hreset eu uso para matar o ponteiro e nao ter nenhum registro em foco antigo e matar registros ja gravados, evita sobreposição acidenteal de dados
---------------
Assim estando em procedure local posso
selecionar e arrastar - drag-in-drop para outra janela e só fazer os ajustes
ou
Poderia fazer uma Classe OOP central e global e usar indirection e fazer um só codigo
vai do gosto
vou fazer os modelos com Table Form que é o mais antigo de fazer usando passagem de paramentros,
outro exemplo com planes sem usar parametros pois ja esta tudo disponivel nam emsma janela mas em camadas diferentes
e o OOP
ate o final da tarde concluo o exemplo dai podem usar como base para seus projetos
PROCEDURE Evento_Gravar()
ScreenToFile()
IF gn_acao = 1 THEN
HAdd(t000_config)
ELSE IF gn_acao = 2 THEN
HModify(t000_config)
END
TableDisplay(TABLE_T000_config,taInit)
MyWindow..Plane = 1
--------------
o tabledisplay é um refresh na table grid
O QUE VAI NO BOTAO INCLUIR:
Classe_OOP_CRUD.Evento_Incluir("GR_CAMPOS","t002_empresas",MyWindow..Name)
apenas uma linha
Simplificando o processo
de manuteção
uma classe central faz tudo
passa os objetos por parametro
e usa o indirection para ajustar os nomes
-----------------
PROCEDURE GLOBAL Evento_Selecionar(Janela, tablegrid, Col_Campo_ID, Botao_Alterar)
indirection is string = Janela +"."+ tablegrid
nx is int = TableInfoXY(indirection,tiLineNumber,MouseXPos(),MouseYPos())
IF nx > 0 THEN
indirection = Janela +"."+ tablegrid+"[nx]."+Col_Campo_ID
gn_id = {indirection}
IF gn_id > 0 THEN
indirection = Janela +"."+ Botao_Alterar
ExecuteProcess({indirection},trtClick)
END
END
--------------------
indirection deve ser montado antes da { }
nao pode montar a string dentro das { } de indirection