DDK GUI Parte 2 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
Construção Construção 12
SmartQuery Passos 1. Em Arquivo Novo, selecionar o estilo Custom Query Wizard; 13
SmartQuery 2. Se necessário, especificar uma tabela externa. 14
SmartQuery Uma tabela externa complementa os critérios join para uma query. Por exemplo, uma query em 'Order OF Customer' exige uma tabela Customer externa. A tabela externa está preenchida por outra procedure object--tipicamente um SmartBrowser ou SmartViewer. 1. Clicar em Add External Tables 2. Dentro do Table Selector, selecione a tabela externa. 15
SmartQuery 3. Especificar as tabelas para a query. Deve-se marcar a opção INDEXED_REPOSITION. Detalhes: Não pode ter classificação (cláusula BY); Não pode conter pré-seleção (cláusula preselect) Deve ser sobre apenas uma tabela, não podendo haver join entre tabelas (each,each). 16
SmartQuery 17
SmartQuery 4. Remover as Chaves Estrangeiras criadas pelo Wizard. 18
SmartQuery 5. Finalizar o Wizard 6. Salvar a SmartQuery com o nome definido, de acordo com os Padrões de Nomenclatura; 19
SmartQuery Laboratório Tabela: Customer 20
SmartViewer De acordo com os objetos a serem instanciados na viewer, seguir a técnica correspondente: Padrão; Sem campos de tabela; Só com campos chave; 21
SmartViewer Padrão É aquela que possui ao menos um campo não chave de tabela. É necessário para uma Viewer Padrão possuir ao menos um campo de tabela habilitado. Esse campo não pode ser chave de tabela. 22
SmartViewer Sem campos de tabela É aquela que possui apenas objetos (widgets) não vinculados a uma base de dados, ou seja, são variáveis dispostas na tela de modo que o usuário possa alterar os seus valores em tempo de execução. 23
SmartViewer Só com campos chave É aquela que não possui campos não chave dispostos na tela. Esta viewer poderá conter variáveis dispostas para entrada de dados pelo usuário; 24
SmartViewer - Padrão 1. Em Arquivo Novo, selecionar o estilo Custom Viewer com AutoField; 25
SmartViewer - Padrão 2. Na dialog que se abrirá logo após a seleção do template, selecionar a(s) tabela(s) a serem utilizadas na viewer; 3. Na janela, após a seleção da(s) tabela(s), selecionar os campos a serem utilizados; 26
SmartViewer - Padrão 27
SmartViewer - Padrão 4. A seguir pode ou não ser apresentada uma mensagem questionando se a viewer deve suportar chaves estrangeiras. Caso aconteça, clicar em Cancel; 28
SmartViewer - Padrão 5. Se a viewer for utilizada em um cadastro do tipo simples, no início da procedure local-assign-records, é necessário substituir a linha contendo: {include/i-valid.i} por estas a seguir: if not frame {&frame-name}:validate() then return 'ADM-ERROR':U. 29
SmartViewer - Padrão 30
SmartViewer - Padrão 6. Alterar a altura de todos os atributos de tipo fill-in para 0.88; 7. Para os atributos que formam a chave de acesso da tabela, caso forem postos na tela: 1. Tornar os atributos desabilitados, através de propriedades, desmarcando o toggle-box 'Enable'; 2. Em propriedades e Advanced, marcar o toggle-box '{&ADM-CREATE-FIELDS}'; 3. Colocar o primeiro atributo na linha 1.17; 31
SmartViewer - Padrão 4. Caso exista mais de um atributo chave: 1. Colocá-los em espaçamento 1, ou seja, na linha 2.17, 3.17, etc.; 2. Alterar a altura do retângulo rt-key para o número de atributos chave + 0.25, ou seja, 2.25, 3.23, etc.; 3. Alterar a linha inicial do retângulo rt-mold para a altura do rt-key + 1.25; 32
SmartViewer - Padrão 8. Se não forem colocados atributos chave: 1. Eliminar o retângulo rt-key; 2. Mover o retângulo rt-mold para a linha 1; 9. Para os atributos que não formam a chave de acesso da tabela, caso forem postos na tela: 1. Colocar o primeiro atributo na linha de rt-mold + 0.17 (Exemplo: 2.67); 2. Colocar os demais atributos com um espaçamento de 1 (Exemplo: 3.67, 4.67); 3. Alterar a altura do retângulo rt-mold de modo a apenas caber os atributos dentro; 33
SmartViewer - Padrão 10. Colocar na SmartViewer outros objetos, como, por exemplo, combo-box, que não estão associados aos campos no banco de dados; 11. Para os objetos não associados ao banco de dados e que devem ser atualizados pelo usuário, acessar as 'Property' e: 1. Tornar o objeto desabilitado (em propriedades, desmarcar o toggle-box 'Enable'); 34
SmartViewer - Padrão 2. Em propriedades e Advanced, marcar o toggle-box '{&ADM-MODIFY-FIELDS}'; 3. Customizar a procedure LOCAL-INITIALIZE para que as inicializações dos objetos sejam feitas. Essas inicializações das variáveis podem ser, atribuição de labels (para tradução automática), atribuição de itens para combo-boxes e radio-sets, etc., e devem ser feitas antes do dispatch padrão; 35
SmartViewer - Padrão /* Code placed here will execute PRIOR to standard behavior. */ {utp/ut-liter.i Preço * R} assign fill-in_price:label in frame {&frame-name} = return-value cb-country:list-items in frame {&frame-name} = {pdinc/i01pd001.i 03}. /* Dispatch standard ADM method.*/ RUN dispatch IN THIS-PROCEDURE ( INPUT 'initialize':u ). /* Code placed here will execute AFTER standard behavior. */ 36
SmartViewer - Padrão 4. Na procedure LOCAL-ENABLE-FIELDS comentar a linha que contém a ocorrência:"if-adm-new-record=yes then"; 5. A procedure LOCAL-DISPLAY-FIELDS deve ser customizada para que o valor da variável seja exibido, para isso, antes do dispatch padrão deve-se atribuir à variável o valor a ser exibido. 37
SmartViewer - Padrão /* Code placed here will execute PRIOR to standard behavior. */ if avail order-line then assign fill-in_price = Order-Line.Price. Else assign fill-in_price = 0. /* Dispatch standard ADM method. */ /* RUN dispatch IN THIS-PROCEDURE (INPUT 'displayfields':u).*/ /* Code placed here will execute AFTER standard behavior. */ 38
SmartViewer - Padrão 12. Quanto à largura da SmartViewer: 1. Se a SmartViewer for usada dentro de um folder de Cadastro Inclui/Modifica Filho, alterar a largura de rtkey e rt-mold para 76,72; 2. Se a SmartViewer for usada dentro do Cadastro Inclui/Modifica Filho sem folder, alterar a largura de rtkey e rt-mold para 79,29; 39
SmartViewer - Padrão 3. Se for usada dentro de outro folder que não seja em um Cadastro Inclui/Modifica Filho, alterar a largura de rt-key e rt-mold para 85.72; 14. Acessar as propriedades da frame da SmartViewer, clicar em 'Tab Order' e no combo-box 'Tabbing Options' escolher a opção 'Left-to-Right By Columns'; 40
SmartViewer - Padrão 15. Salvar a SmartViewer, com o nome definido de acordo com os Padrões de Nomenclatura; 41
SmartViewer - Sem Campos de Tabela 1. Em Arquivo Novo, selecionar o estilo Custom Viewer com AutoField; 42
SmartViewer Sem Campos de Tabela 2. Cancelar a tela de seleção de tabelas exibida após a escolha da template. 3. Se a viewer for utilizada em um cadastro do tipo simples, no início da local-assign-records é necessário substituir a linha: {include/i-valid.i} por estas a seguir: if not frame {&frame-name}:validate() then return 'ADM-ERROR':U. 43
SmartViewer Sem Campos de Tabela 44
SmartViewer Sem Campos de Tabela 4. Definir no Method-Library, que a include i-auxtab.i, deve ser a primeira da lista; 45
SmartViewer Sem Campos de Tabela 46
SmartViewer Sem Campos de Tabela 5. Definir ao menos uma tabela externa; 6. Inserir os objetos (fill-in s, combo-boxes, radio-sets, retângulos, etc) na viewer. Esses objetos não podem ser campos de tabelas; 7. Desabilitar todos os objetos da tela que não devam ser mostrados habilitados; 47
SmartViewer Sem Campos de Tabela 8. Atenção: O controle de habilitação/desabilitação de campos deve ser feito pelo usuário. Para isso, deve-se colocar os campos nos pré-processadores de acordo com a tabela abaixo: 48
SmartViewer Sem Campos de Tabela Tipo de Objetos Chaves (variáveis que representam chaves) Outras Variáveis Preprocessador Adm-create-fields Adm-modify-fields Adm-assign-fields Finalidade Habilitados somente na criação de um novo registro. Habilitados nas operações de ADD, COPY e MODIFY. 49
SmartViewer Sem Campos de Tabela 9. Customizar a procedure LOCAL-INITIALIZE para que as inicializações dos objetos sejam feitas. Essas inicializações das variáveis podem ser, atribuição de labels (preparação para tradução), atribuição de itens para combo-boxes e radio-sets, etc.; 50
SmartViewer Sem Campos de Tabela 51
SmartViewer Sem Campos de Tabela 10. Customizar a procedure LOCAL-DISPLAY-FIELDS, sendo que é nessa procedure que os valores dos objetos serão exibidos: 1. Comentar o dispatch padrão; 2. Inserir os comandos para que os valores dos objetos sejam exibidos. 52
SmartViewer Sem Campos de Tabela 53
SmartViewer Sem Campos de Tabela 11. Customizar a procedure LOCAL-ENABLE-FIELDS, sendo que é nessa procedure que os objetos são habilitados: 1. Comentar o dispatch padrão; 2. Comentar a linha em que consta a seguinte sentença: if adm-new-record then. 3. Caso seja uma viewer principal, incluir: RUN notify ('enable-fields, GROUP-ASSIGN-TARGET':U). 54
SmartViewer Sem Campos de Tabela 55
SmartViewer Sem Campos de Tabela 12. Customizar a procedure LOCAL-DISABLE-FIELDS, sendo que é nessa procedure que os objetos são desabilitados: 1. Comentar o dispatch padrão; 2. Inserir as seguintes linhas: &if defined(adm-create-fields) &then disable {&ADM-CREATE-FIELDS} with frame {&framename}. &endif 3. Caso seja uma viewer principal, colocar: RUN notify ('disable-fields, GROUP-ASSIGN-TARGET':U). 56
SmartViewer Sem Campos de Tabela 57
SmartViewer Sem Campos de Tabela 13. Customizar a procedure LOCAL-ASSIGN-STANTEMENT, sendo que é nessa procedure que os objetos terão seus valores salvos: 1. Comentar o dispatch padrão; 2. Inserir a lógica de gravação dos valores das variáveis. 58
SmartViewer Sem Campos de Tabela 59
SmartViewer Sem Campos de Tabela 14. Alterar a altura de todos os atributos para 0.88; 15. Para os atributos que representam a chave de acesso a tabelas, caso forem postos na tela: 1. Colocar o primeiro atributo na linha 1.17; 2. Caso existam mais atributos que represente uma chave: 1. Colocá-los com espaçamento 1, ou seja, na linha 2.17, 3.17, etc.; 60
SmartViewer Sem Campos de Tabela 2. Alterar a altura do retângulo rt-key para o número de atributos chave + 0.25, ou seja, 2.25, 3.23, etc.; 3. Alterar a linha inicial do retângulo rt-mold para a altura do rt-key + 1.25; 16. Se não forem colocados atributos que representem chaves: 1. Eliminar o retângulo rt-key; 2. Mover o retângulo rt-mold para a linha 1; 61
SmartViewer Sem Campos de Tabela 17. Para os atributos que não formam a chave de acesso da tabela, caso forem postos na tela: 1. Colocar o primeiro atributo na linha de rt-mold + 0.17 (Exemplo: 2.67); 2. Colocar os demais atributos com um espaçamento de 1 (Exemplo: 3.67, 4.67); 3. Alterar a altura do retângulo rt-mold de modo a apenas caber os atributos dentro do mesmo; 18. Se não forem colocados atributos não chave, retirar o retângulo rt-mold; 62
SmartViewer Sem Campos de Tabela 19. Quanto à largura da SmartViewer: 1. Se a SmartViewer for usada dentro de um folder de Cadastro Inclui/Modifica, alterar a largura de rt-key e rtmold para 76,72; 2. Se a SmartViewer for usada dentro do Cadastro Inclui/Modifica sem folder, alterar a largura de rt-key e rtmold para 79,29; 3. Se for usada dentro de outro folder que não seja em um Cadastro Inclui/Modifica, alterar a largura de rt-key e rtmold para 85.72; 63
SmartViewer Sem Campos de Tabela 20. Acessar as propriedades da frame da SmartViewer, clicar em 'Tab Order' e, no combo-box 'Tabbing Option, escolher a opção 'Left-to-Right By Columns'; 21. Salvar a SmartViewer, com o nome definido, de acordo com os Padrões de Nomenclatura. 64
SmartViewer - Só com Campos Chave 1. Em Arquivo Novo, selecionar o estilo Custom Viewer com AutoField; 65
SmartViewer Só com Campos Chave 2. No dialog que se abrirá logo após a seleção do template, selecionar a(s) tabela(s) a serem utilizadas na viewer; 3. Na janela, após a seleção da(s) tabela(s), selecionar os campos a serem utilizados; 4. A seguir, pode ou não ser apresentada uma mensagem questionando se a viewer deve suportar chaves estrangeiras. Caso aconteça, clicar em Cancel; 5. Definir, no Method-Library, que a include i-auxtab.i, deve ser a primeira da lista; 66
SmartViewer Só com Campos Chave 67
SmartViewer Só com Campos Chave 6. Desabilitar todos os campos da tela; 7. Colocar os campos nos pré-processadores, de acordo com a tabela abaixo: Preprocessador Adm-create-fields Adm-assign-fields Adm-modify-fields Finalidade Habilitados somente na criação de um novo registro Exemplo: operações de ADD e COPY Devem ser marcados os objetos que serão habilitados para a alteração de uma ocorrência na tabela. Observe que índices de tabelas não podem ser alterados. 68
SmartViewer Só com Campos Chave 8. Customizar a procedure LOCAL-INITIALIZE para que as inicializações dos objetos sejam feitas. Essas inicializações podem ser atribuição de labels (preparação para tradução), atribuição de itens para combo-boxes e radio-sets, etc.; 69
SmartViewer Só com Campos Chave 70
SmartViewer Só com Campos Chave 9. Caso existam, na viewer, objetos não vinculados ao banco de dados (variáveis), customizar a procedure LOCAL-DISPLAY- FIELDS para que seus valores sejam exibidos. 71
SmartViewer Só com Campos Chave 72
SmartViewer Só com Campos Chave 10. Customizar a procedure LOCAL-ENABLE-FIELDS: 1. Comentar o dispatch padrão; 2. Comentar a linha em que apareça a sentença: if adm-new-record = yes then; 3. Caso seja uma viewer principal, incluir: RUN notify ('enable-fields, GROUP-ASSIGN-TARGET':U). 73
SmartViewer Só com Campos Chave 74
SmartViewer Só com Campos Chave 11. Caso existam, na viewer, objetos não vinculados ao banco de dados (variáveis), customizar a procedure LOCAL-ASSIGN- RECORD para que seus valores sejam salvos. 75
SmartViewer Só com Campos Chave 76
SmartViewer Só com Campos Chave 12. Criar e customizar a procedure LOCAL-ASSIGN-STATEMENT; 1. Inserir o seguinte código após o dispatch padrão: do with frame {&frame-name} on error undo, return "ADM-ERROR": &if defined(adm-create-fields) &then if ADM-NEW-RECORD then assign {&ADM-CREATE- FIELDS}. &endif &if defined(adm-modify-fields) &then assign {&ADM-MODIFY-FIELDS}. &endif end. 77
SmartViewer Só com Campos Chave 78
SmartViewer Só com Campos Chave 13. Alterar a altura de todos os atributos para 0.88; 14. Para os atributos que formam a chave de acesso da tabela: 1. Colocar o primeiro atributo na linha 1.17; 2. Caso exista mais de um atributo chave: 1. Colocá-lo com espaçamento 1, ou seja, na linha 2.17, 3.17, etc.; 79
SmartViewer Só com Campos Chave 2. Alterar a altura do retângulo rt-key para o número de atributos chave + 0.25, ou seja, 2.25, 3.23, etc.; 3. Alterar a linha inicial do retângulo rt-mold para altura do rt-key + 1.25; 15. Para os atributos que não formam a chave de acesso da tabela, caso forem postos na tela: 1. Colocar o primeiro atributo na linha de rt-mold + 0.17 (Exemplo: 2.67); 2. Colocar os demais atributos com um espaçamento de 1 (Exemplo: 3.67, 4.67); 80
SmartViewer Só com Campos Chave 16. Colocar na SmartViewer outros objetos, como por exemplo combo-box, que não estão associados ao banco de dados; 17. Se não forem colocados atributos não chave, retirar o retângulo rt-mold. Obs.: Apesar da viewer só com campos chave não conter outros campos, poderá conter variáveis; 81
SmartViewer Só com Campos Chave 18. Para os objetos não associados ao banco de dados e que devem ser atualizados pelo usuário, acessar as 'Property' e: 1. Tornar o objeto desabilitado (em propriedades, desmarcar o toggle-box 'Enable'); 2. Em propriedades e Advanced, marcar o toggle-box '{&ADM-MODIFY-FIELDS}'; 82
SmartViewer Só com Campos Chave 19. Quanto à largura da SmartViewer: 1. Se a SmartViewer for usada dentro de um folder de Cadastro Inclui/Modifica, alterar a largura de rt-key e rtmold para 76,72; 2. Se a SmartViewer for usada dentro do Cadastro Inclui/Modifica sem folder, alterar a largura de rt-key e rtmold para 79,29; 3. Se for usada dentro de outro folder que não seja em um Cadastro Inclui/Modifica, alterar a largura de rt-key e rtmold para 85.72; 83
SmartViewer Só com Campos Chave 20. Acessar as propriedades da frame da SmartViewer, clicar em 'Tab Order' e, no combo-box 'Tabbing Option, escolher a opção 'Left-to-Right By Columns'; 21. Salvar a SmartViewer, com o nome definido de acordo com os Padrões de Nomenclatura; 84
SmartViewer Laboratório Tabela: Campos: Customer Customer.Cust-Num; Customer.Name Customer.Address Customer.Phone Customer.City Customer.State Customer.Country 85
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. 86