DDK GUI Parte 4 Tecnologia 1
Agenda 1 Parte Nomenclatura Estilos Cadastro Simples Cadastro Simples Alteração Cadastro Simples Inclusão Cadastro Complexo Cadastro Complexo Alteração Pai x Filho Atualiza Filho Manutenção de Filhos 2
Agenda Pai x Filho Atualiza Ambos Manutenção de Pais Consulta Simples Consulta Complexa Consulta Relacionamento Relatórios / Cálculos / Fechamentos Parâmetros Únicos Parâmetros Múltiplos Formação Formação sem Navegação 3
Agenda Importação Exportação Pesquisa Vá Para Digitação Rápida Painéis Funções Relatórios Relacionados Funções Consultas Relacionadas Menu de Barra 4
Agenda Parte 2 Construção SmartQuery SmartViewer Padrão SmartViewer Sem Campos de Tabela SmartViewer Só com Campos Chave Parte 3 CustomBrowser Inclui/Modifica CustomBrowser Zoom Wizard Vá Para Pesquisa 5
Agenda Cadastro Simples Parte 4 Cadastro Simples Alteração Cadastro Simples Inclusão Cadastro Complexo Cadastro Inclui/Modifica Filho Cadastro Pai x Filho Atualiza Filho Cadastro Inclui/Modifica Pai Cadastro Pai x Filho Atualiza Ambos Parte 5 Consulta Simples 6
Agenda Consulta Complexa Consulta Relacionamentos Parâmetros Únicos Formação Parte 6 Relatórios Importação Exportação CustomBrowser Digitação Digitação Rápida 7
Agenda Parte 7 Includes e Utilitários Padrão UT_FIELD.I UT-RTLBL.I UT-RUN.I UT-MSGS.P IND01-10.I, IND11-50.I E IND51500.I UT-TABLE.I UT-LITER.I UT-LIMIT.P 8
Agenda UT-GLOB.I I-FREEAC.I UT-DIR.P BTB917ZX.P BTB917ZY.P BTB917ZZ.P UT-VRBIN.P UT-FINFO.P UT-CMDLN.P 9
Agenda UT-OSVER.I I-COUNTDS.I UT-WIN.I UT-TRACE.P Parte 8 Validações Validações de Tela Validações Triggers de Dicionário Mensagens Regras para Criação de Mensagens 10
Agenda Mensagens em Outros Idiomas Procedures Reutilizáveis Portabilidade de RCODES Customizações API - Application Program Interface UPC - User Program Call 11
Cadastro Simples Alteração Pré-requisitos SmartQuery (CustomQuery Wizard); SmartViewer (Custom Viewer com Auto-field); Programa Vá Para; Programa de Pesquisa. 12
Cadastro Simples Alteração 1. Em Arquivo Novo, selecionar o estilo Window CadastroSimples Alteração; 13
Cadastro Simples Alteração 2. Instanciar a SmartQuery na página 0 da Window Cadastro Simples e aceitar as sugestões de SmartLinks do Wizard; 14
Cadastro Simples Alteração 3. Acessar os atributos de instância da SmartQuery e informar, no atributo "Programa Pesquisa, o nome do programa de pesquisa da tabela e, no atributo "Programa Vá para, o nome do programa de Vá para da tabela; 15
Cadastro Simples Alteração 4. Criar um SmartLink do tipo STATE, tendo como Source: p- navega e como Target: SmartQuery; 5. Criar um SmartLink do tipo STATE, tendo Source: p-exihel e como Target: SmartQuery; 6. Instanciar a SmartViewer na página 0 da SmartWindow e aceitar as sugestões de SmartLink do Wizard; 16
Cadastro Simples Alteração 7. Redimensionar a SmartWindow de acordo com os objetos que foram colocados nela. Ter o cuidado para que a SmartViewer fique centralizada na SmartWindow; 8. Salvar a SmartWindow com o nome definido para o Cadastro Simples Alteração; 17
Cadastro Simples Alteração Source h_p-cadsi2 h_p-cadsi2 h_p-exihel h_p-navega h_p-navega h_q-query Link_Type State TableIO State Navigation State Record Target h_p-exihel h_v-viewer h_q-query h_q-query h_q-query h_v-viewer 18
Cadastro Simples Inclusão Pré-requisitos SmartQuery (CustomQuery Wizard); SmartViewer (Custom Viewer com Auto-field); Programa Vá Para; Programa de Pesquisa. 19
Cadastro Simples Inclusão 1. Em Arquivo Novo, selecionar o estilo Window CadastroSimples Inclusão; Os demais passos são iguais ao Cadastro Simples Alteração. 20
Cadastro Complexo Pré-requisitos SmartQuery (CustomQuery Wizard); SmartViewer (Custom Viewer com Auto-field); Programa Vá Para; Programa de Pesquisa. 21
Cadastro Complexo 1. Em Arquivo Novo, selecionar o estilo Window CadastroComplexo; 22
Cadastro Complexo 2. Instanciar a SmartQuery na página 0 e aceitar as sugestões de SmartLinks do Wizard; 23
Cadastro Complexo 3. Acessar os atributos de instância da SmartQuery e informar, no atributo "Programa Pesquisa, o nome do programa de pesquisa da tabela e, no atributo "Programa Vá para, o nome do programa de Vá para da tabela; 24
Cadastro Complexo 4. Criar um SmartLink do tipo STATE, tendo como Source: p- navega e como Target: SmartQuery; 5. Criar um SmartLink do tipo STATE, tendo Source: p-exihel e como Target: SmartQuery; 6. Instanciar a SmartViewer na página 0 da SmartWindow, acima do folder, e aceitar as sugestões de SmartLink do Wizard; 25
Cadastro Complexo 26
Cadastro Complexo 7. Repetir os seguintes passos para as demais SmartViewers que devem estar colocadas nas páginas do folder: 1. Instanciar a SmartViewer em determinada página do folder e aceitar as sugestões de SmartLink do Wizard; 2. Criar um SmartLink de GROUP-ASSIGN, tendo como Source: SmartViewer da página 0 e como Target: SmartViewer recém instanciada no folder; 27
Cadastro Complexo 28
Cadastro Complexo 8. Acessar as propriedades do folder e renomear os labels das páginas; 9. Salvar a SmartWindow com o nome definido para o Cadastro Complexo. 29
Cadastro Complexo Source h_folder h_p-cadsim h_p-cadsim h_p-navega h_q-query h_q-query Link_Type PAGE State TableIO Navigation Record Record Target THIS-PROCEDURE h_p-exihel h_q-query h_q-query h_v-viewer1 h_v-viewer2 30
Cadastro Complexo Source h_q-query h_v-viewer1 h_v-viewer1 h_p-exihel h_p-navega Link_Type Record Group-Assign Group-Assign State State Target h_v-viewer3 h_v-viewer2 h_v-viewer3 h_q-query h_q-query 31
Cadastro Complexo Laboratório Tabela: Campos Viewer1: Campos Viewer2: Customer Customer.Cust-Num; Customer.Name Customer.Address Customer.Address2 Customer.Phone Customer.City Customer.State Customer.Postal-Code Customer.Country 32
Cadastro Complexo Campos Viewer3: Customer.Sales-Rep Customer.Credit-Limit Customer.Discount Customer.Balance 33
Cadastro Inclui/Modifica Filho Pré-requisitos SmartQuery (CustomQuery Wizard); SmartViewer (Custom Viewer com Auto-field). 34
Cadastro Inclui/Modifica Filho 1. Em Arquivo Novo, selecionar o estilo Window Inclui/Modifica Filho; 35
Cadastro Inclui/Modifica Filho 2. Se os campos a serem inclusos/modificados couberem em uma única viewer, o cadastro deve ser do tipo Simples, devendo-se eliminar o folder da SmartWindow; 36
Cadastro Inclui/Modifica Filho 3. Se os campos a serem inclusos/modificados não couberem em uma única viewer, estes devem ser divididos em mais viewers que devem ser colocadas nas páginas do folder, formando um cadastro do tipo Complexo; 37
Cadastro Inclui/Modifica Filho 4. Verificar se já existe uma SmartQuery para a tabela em que se deseja construir o Cadastro Inclui/Modifica Filho. Caso não exista, criar uma nova utilizando o estilo CustomQuery Wizard; 5. Instanciar a SmartQuery na página 0 (zero) da Window; 6. Para cada viewer a ser utilizada deve-se seguir os seguintes passos: 38
Cadastro Inclui/Modifica Filho 1. Verificar se já existe uma SmartViewer com os atributos da tabela a serem editados. Caso não exista, criar uma nova SmartViewer utilizando o estilo CustomViewer com Auto- Field; 2. Instanciar a SmartViewer na SmartWindow ou na página correspondente do folder no caso de um cadastro complexo, e aceitar as sugestões de SmartLinks do Wizard; 39
Cadastro Inclui/Modifica Filho 3. Criar um SmartLink de TABLEIO, tendo como Source: THIS-PROCEDURE e como Target: SmartViewer recém instanciada. 40
Cadastro Inclui/Modifica Filho 7. Se o cadastro for do tipo complexo: 1. Criar links de group-assign entre a viewer principal (viewer que conterá a chave da tabela) e as demais viewers; 2. Incluir a seguinte linha após o Dispatch padrão no Local- Initialize: {include/i-inifld.i} 41
Cadastro Inclui/Modifica Filho 8. Deve-se atribuir a página 1 como sendo a página inicial do programa. Para isso, é necessário: 1. Acessar o Procedure Properties na janela do App Builder; 2. Entrar em Propertie Pages; 3. Em Startup on Page atribuir o valor 1; 42
Cadastro Inclui/Modifica Filho 43
Cadastro Inclui/Modifica Filho 8. Na Local-Initialize da window, devem ser substituídas as ocorrências de "<viewer_principal>", pelo nome da viewer que contém o(s) campo(s) chave(s) da tabela. run pi-atualiza-parent in h_v06pd001 (input v-rowparent). 44
Cadastro Inclui/Modifica Filho 9. Nas triggers de Choose dos botões de 'Ok' e 'Salvar', substituir as ocorrências de "<handle da viewer principal>" pelo handle da viewer que contém o campo chave da tabela; {include/okfil.i h_v06pd001} 45
Cadastro Inclui/Modifica Filho 10. Na procedure pi-reposiciona da window, substituir a ocorrência "<query-name>" pelo nome da query utilizada no cadastro; RUN pi-reposiciona-query IN h-q06pd001 (input v-row-table). 46
Cadastro Inclui/Modifica Filho 11. Na SmartViewer que possuir a chave da tabela, deve ser criada uma local-create-record e após o run dispatch deve ser inserida a seguinte lógica: find <tabela pai> where rowid (<tabela pai>) = v-rowparent no-lock no-error. if available <tabela pai> then do: assign <tabela filho>.<chave pai> = <tabela pai>.<chave pai>. end. 47
Cadastro Inclui/Modifica Filho <tabela pai>: deve ser substituído pelo nome da tabela pai utilizada no cadastro. A tabela pai deve ser a mesma utilizada na query do Cadastro PaiXFilho que deve chamar este programa; <tabela filho>: deve ser substituído pelo nome da tabela que deve estar sendo utilizada no cadastro; <chave pai>: deve ser substituído pelo nome do campo chave da tabela pai que estabelece relacionamento com a tabela que deve estar sendo utilizada no cadastro; 48
Cadastro Inclui/Modifica Filho RUN dispatch IN THIS-PROCEDURE ( INPUT 'create-record':u ). /* Code placed here will execute AFTER standard behavior. */ find order where rowid (order) = v-row-parent no-error. if available order then assign order-line.order-num = order.order-num. 49
Cadastro Inclui/Modifica Filho 12. Salvar a SmartWindow com o nome definido para o Cadastro Inclui/Modifica Filho. 50
Cadastro Inclui/Modifica Filho Lista de Links (Uma Viewer): h_q-query Source THIS-PROCEDURE TableIO Record Link_Type h_viewer h_viewer Target 51
Cadastro Inclui/Modifica Filho Lista de Links (Mais de uma Viewer): Source h_q-query THIS-PROCEDURE h_viewer1 h_viewer1 h_q-query h_q-query Link_Type Record TableIO GROUP-ASSIGN GROUP-ASSIGN Record Record Target h_viewer1 h_viewer1 h_viewer2 h_viewer3 h_viewer2 h_viewer3 52
Cadastro Inclui/Modifica Filho Laboratório Tabela: Campos Viewer1: Ref-Call Ref-Call.Call-Num Ref-Call.Cust-Num Ref-Call.Call-Date Ref-Call.Sales-Rep Ref-Call.Parent 53
Cadastro Pai x Filho Atualiza Filho Pré-requisitos SmartQuery para a tabela pai (CustomQuery Wizard); SmartViewer para a tabela pai (Custom Viewer com Autofield); SmartBrowser para a tabela filho (CustowBrowser Inclui/Modifica); Programa de atualização para a tabela filho (Cadastro Inclui/Modifica Filho); Programa Vá Para para a tabela pai; Programa de Pesquisa para a tabela pai. 54
Cadastro Pai x Filho Atualiza Filho 1. Em Arquivo Novo, selecionar o estilo Window Cadastro PaixFilho - Filho; 55
Cadastro Pai x Filho Atualiza Filho 2. Instanciar a SmartQuery na página 0 e aceitar as sugestões de SmartLinks do Wizard; 56
Cadastro Pai x Filho Atualiza Filho 3. Acessar os atributos de instância da SmartQuery e informar no atributo "Programa Pesquisa" o nome do programa de pesquisa da tabela e no atributo "Programa Vá para" o nome do programa de Vá para da tabela; 57
Cadastro Pai x Filho Atualiza Filho 4. Criar um SmartLink do tipo STATE, tendo como Source: p- navega e como Target: SmartQuery; 5. Criar um SmartLink do tipo STATE, tendo Source: p-exihel e como Target: SmartQuery; 6. Instanciar a SmartViewer na página 0 da SmartWindow e aceitar as sugestões de SmartLink do Wizard; 58
Cadastro Pai x Filho Atualiza Filho 59
Cadastro Pai x Filho Atualiza Filho 7. Repetir os seguintes passos para os SmartBrowsers que devem estar colocadas nas páginas do folder: 1. Verificar se já existe um SmartBrowser para a tabela filho. Caso não exista, criar um novo utilizando o estilo CustomBrowser Inclui/Modifica; 2. Colocar o SmartBrowser na página correspondente do folder, aceitando os links indicados pelo Wizard; 60
Cadastro Pai x Filho Atualiza Filho 61
Cadastro Pai x Filho Atualiza Filho 3. Acessar os atributos de instância do SmartBrowser e informar o nome do programa de atualização da tabela filha. Se este programa não existir, deve ser criado utilizando-se o template Cadastro Inclui/Modifica Filho; 62
Cadastro Pai x Filho Atualiza Filho 63
Cadastro Pai x Filho Atualiza Filho 4. Criar um SmartLink de Record, tendo como Source: SmartQuery e como Target: SmartBrowser recém instanciado no folder; 5. Caso seja necessário incluir botões de Seleção e/ou Parâmetros para a tabela do SmartBrowser, deve-se incluir os botões abaixo do browse. 64
Cadastro Pai x Filho Atualiza Filho 8. Ter o cuidado para que a SmartViewer fique centralizada na SmartWindow; 9. Salvar a SmartWindow com o nome definido para o Cadastro Pai x Filho. 65
Cadastro Pai x Filho Atualiza Filho Source h_folder h_p-exihel h_p-navega h_p-navega h_q-query h_q-query h_p-exihel Link_Type Page State Navigation State Record Record State Target THIS-PROCEDURE THIS-PROCEDURE h_q-query h_q-query h_viewer h_browser1 h_q-query 66
Cadastro Pai x Filho Atualiza Filho Laboratório Tabela: Viewer: Browser: Tabela: Campos: Customer Customer.Cust-Num Customer.Name Ref-Call X Customer Ref-Call.Call-Num Ref-Call.Call-Date Ref-Call.Sales-Rep Ref-Call.Parent 67
Cadastro Inclui/Modifica Pai Pré-requisitos SmartQuery para a tabela pai (CustomQuery Wizard); SmartViewer para a tabela pai (Custom Viewer com Autofield). 68
Cadastro Inclui/Modifica Pai 1. Em Arquivo Novo, selecionar o estilo Window Inclui/Modifica Pai; 69
Cadastro Inclui/Modifica Pai 2. Se os campos a serem inclusos/modificados couberem em uma única viewer, o cadastro deve ser do tipo Simples, devendo-se eliminar o folder da SmartWindow; 3. Se os campos a serem inclusos/modificados não couberem em uma única viewer, estes devem ser divididos em mais viewers, que devem ser colocadas nas páginas do folder, formando um cadastro do tipo Complexo; 70
Cadastro Inclui/Modifica Pai 4. Verificar se já existe uma SmartQuery para a tabela em que se deseja construir o Cadastro Inclui/Modifica Pai. Caso não exista, criar uma nova utilizando o estilo CustomQuery Wizard; 5. Instanciar a SmartQuery na página 0 (zero) da Window; 6. Para cada viewer a ser utilizada, deve-se seguir os seguintes passos: 71
Cadastro Inclui/Modifica Pai 1. Verificar se já existe uma SmartViewer com os atributos da tabela a serem editados. Caso não exista, criar uma nova SmartViewer utilizando o estilo CustomViewer com Auto- Field; 2. Instanciar a SmartViewer na SmartWindow ou na página correspondente do folder no caso de um cadastro complexo, e aceitar as sugestões de SmartLinks do Wizard; 72
Cadastro Inclui/Modifica Pai 3. Criar um SmartLink de TABLEIO, tendo como Source: THIS-PROCEDURE e como Target: SmartViewer recém instanciada; 7. Se o cadastro for do tipo complexo: 1. Criar links do group-assign entre a viewer principal (viewer que deve conter a chave da tabela) e as demais viewers ; 73
Cadastro Inclui/Modifica Pai 2. Incluir a seguinte linha após o Dispatch padrão na Local- Initialize: {include/i-inifld.i} 8. Deve-se atribuir a página 1 como sendo a página inicial do programa. Para isso é necessário: 1. Acessar a Procedure Properties na janela do App Builder; 74
Cadastro Inclui/Modifica Pai 2. Entrar em Propertie Pages; 3. Em Startup on Page atribuir o valor 1; 75
Cadastro Inclui/Modifica Pai 76
Cadastro Inclui/Modifica Pai 9. Nas triggers de Choose dos botões de 'Ok' e 'Salvar', substituir as ocorrências de "<handle da viewer principal>" pelo handle da viewer que contém o campo chave da tabela; {include/okpai.i h_v07pd002} 77
Cadastro Inclui/Modifica Pai 10. Na procedure pi-reposiciona da window, substituir a ocorrência "<query-name>" pelo nome da query utilizada no cadastro; RUN pi-reposiciona-query IN h_q07pd001 (input v-rowtable). 78
Cadastro Inclui/Modifica Pai Lista de Links (Uma Viewer): h_q-query Source THIS-PROCEDURE TableIO Record Link_Type h_viewer h_viewer Target 79
Cadastro Inclui/Modifica Pai Lista de Links (Mais de uma Viewer): Source h_q-query THIS-PROCEDURE h_viewer1 h_viewer1 h_q-query h_q-query Link_Type Record TableIO GROUP-ASSIGN GROUP-ASSIGN Record Record Target h_viewer1 h_viewer1 h_viewer2 h_viewer3 h_viewer2 h_viewer3 80
Cadastro Pai x Filho Atualiza Ambos Pré-requisitos SmartQuery para a tabela pai (CustomQuery Wizard); SmartViewer para a tabela pai (Custom Viewer com Autofield); Programa de atualização para a tabela pai (Cadastro Inclui/Modifica Pai ); Programa de atualização para a tabela filho (Cadastro Inclui/Modifica Filho); SmartBrowser para a tabela filho (CustowBrowser Inclui/Modifica); Programa Vá Para para a tabela pai; Programa de Pesquisa para a tabela pai. 81
Cadastro Pai x Filho Atualiza Ambos 1. Em Arquivo Novo, selecionar o estilo Window Cadastro PaixFilho - Ambos; 82
Cadastro Pai x Filho Atualiza Ambos 2. Verificar se já existe uma SmartQuery para a tabela pai. Caso não exista, criar uma nova utilizando o estilo CustomQuery Wizard; 3. Instanciar a SmartQuery na página 0 da SmartWindow e aceitar as sugestões de SmartLink do Wizard; 4. Verificar se já existe um programa de Cadastro Inclui/Modifica Pai para manutenção da tabela Pai e, caso não exista, deve ser criado, para isso utilizar o template Cadastro Inclui/Modifica Pai; 83
Cadastro Pai x Filho Atualiza Ambos 5. Verificar se já existe um programa "Vá para" e um programa de pesquisa para a tabela pai. Caso não existam, eles devem ser criados; 6. Acessar os atributos de instância da SmartQuery e informar o nome do programa de pesquisa da tabela pai, o nome do programa de "Vá Para" da tabela pai e o nome do programa de Inclui/Modifica/Copia da tabela pai; 84
Cadastro Pai x Filho Atualiza Ambos 85
Cadastro Pai x Filho Atualiza Ambos 7. Criar um SmartLink do tipo STATE, tendo como Source o Painel p-navega e como Target a SmartQuery; 8. Criar um SmartLink do tipo STATE, tendo como Source o Painel p-cadpai e como Target a SmartQuery; 9. Criar um SmartLink do tipo STATE, tendo como Source o Painel p-exihel e como Target a SmartQuery; 86
Cadastro Pai x Filho Atualiza Ambos 10. Verificar se já existe uma SmartViewer com os atributos da tabela pai, que estão expostos na página 0 da SmartWindow, ou seja, acima do folder. Caso não exista, criar uma nova SmartViewer, utilizando o estilo CustomViewer com Auto- Field; 11. Instanciar a SmartViewer na página 0 da SmartWindow e aceitar as sugestões da SmartLink do Wizard; 87
Cadastro Pai x Filho Atualiza Ambos 12. Repetir os seguintes passos para os SmartBrowsers que devem estar colocadas nas páginas do folder: 1. Verificar se já existe um SmartBrowser para a tabela filho. Caso não exista, criar um novo utilizando o estilo CustomBrowser Inclui/Modifica; 2. Colocar o SmartBrowser na página correspondente do folder, aceitando os links indicados pelo Wizard; 88
Cadastro Pai x Filho Atualiza Ambos 3. Acessar os atributos de instância do SmartBrowser e informar o nome do programa de atualização da tabela filha. Se este programa não existir, deve ser criado utilizando-se o template Cadastro Inclui/Modifica Filho; 89
Cadastro Pai x Filho Atualiza Ambos 90
Cadastro Pai x Filho Atualiza Ambos 10. Ter o cuidado para que a SmartViewer fique centralizada na SmartWindow; 11. Caso seja necessário incluir botões de Seleção e/ou Parâmetros para a tabela do SmartBrowser, deve-se incluir os botões abaixo do browse; 12. Salvar a SmartWindow com o nome definido para o Cadastro Pai x Filho. 91
Cadastro Pai x Filho Atualiza Ambos Source h_folder p-cadpai p-cadpai h_p_exihel h_p-navega h_q-query h_q-query h_q-query Link_Type Page TableIO State State Navigation Record Record Record Target THIS-PROCEDURE h_viewer h_q-query h_q-query h_q-query h_viewer h_browse1 h_browse2 92
Obrigada Obrigada! universidade@datasul.com.br http://universidade.datasul.com.br Este material é de propriedade da DATASUL S.A., sendo proibida a sua reprodução em qualquer meio, total ou parcial, sem aprovação por escrito. Todos os direitos estão reservados. A informação contida aqui é confidencial e não pode ser utilizada fora da empresa ou das franquias que fazem parte da nossa rede, não podendo ser divulgada para clientes, parceiros ou outra empresa ou indivíduo sem o prévio consentimento de um diretor da DATASUL S.A. As opiniões expressas aqui estão sujeitas a modificação sem aviso prévio. 93