ThinTemplates Parte 2 Tecnologia 1
Agenda Parte 1 Conceitos Características ThinMaintenance ThinMasterDetail Parte 2 ThinMaintenanceNoNavigation Parte 3 ThinWindow ThinReport 2
Agenda ThinFormation Parte 4 ThinFormationNoNavigation Técnicas Override de Métodos Pesquisas de Chaves Estrangeiras Pesquisas de Chaves Estrangeiras em Browses Pesquisas de Chaves Estrangeiras com SmartZoom Referências para Chaves Estrangeiras Referências para Chaves Estrangeiras em Browses 3
Agenda Campos Indicadores Exibir Mensagens de Erro Reposicionamento Automático do Browser de Zoom Utilização de OCX Override de eventos do browse no template MasterDetail e Zoom Recursos Avançados do thinfolder 4
ThinMaintenanceNoNavigation ThinMaintenanceNoNavigation 5
ThinMaintenanceNoNavigation 6
ThinMaintenanceNoNavigation Características Realiza a manutenção de um único registro, seja este passado como parâmetro ou não; Realiza a manutenção de registro de tabelas filho, associada a tabela pai; O gerenciamento das páginas do folder é feito pelo programa objects/thinfolder.w Faz uso do sistema de tradução de.r, bastando para tanto identificar as strings que não devem ser traduzidas com :U (Exemplo: CHOOSE :U) 7
ThinMaintenanceNoNavigation Tarefas Definições dos Preprocessadores Definição da Temp-table de Comunicação Parâmetros para Execução Método saveparentsfields Definições das Páginas do Folder Disposição dos widgets nas Páginas 8
ThinMaintenanceNoNavigation Definições dos Preprocessadores &GLOBAL-DEFINE Program thinmaintenancenonavigation &GLOBAL-DEFINE Version 1.00.00.000 &GLOBAL-DEFINE Folder YES &GLOBAL-DEFINE InitialPage 1 &GLOBAL-DEFINE FolderLabels Others &GLOBAL-DEFINE tttable &GLOBAL-DEFINE hdbotable &GLOBAL-DEFINE DBOTable ttorder hdboorder Order 9
ThinMaintenanceNoNavigation &GLOBAL-DEFINE ttparent &GLOBAL-DEFINE DBOParent ttcustomer Customer &GLOBAL-DEFINE page0keyfields ttorder.order-num &GLOBAL-DEFINE page0parentfields ttcustomer.cust-num ~ ttcustomer.name &GLOBAL-DEFINE page1fields ttorder.order-date ~ ttorder.promise-date ~ ttorder.ship-date ~ ttorder.sales-rep ~ ttorder.po ~ ttorder.terms 10
ThinMaintenanceNoNavigation Para retirar o botão Salvar, o desenvolvedor deve incluir o preprocessor padrão ExcludeBtSave: &GLOBAL-DEFINE ExcludeBtSave YES 11
ThinMaintenanceNoNavigation Definição da Temp-table de Comunicação Deve-se criar a temp-table de comunicação com o DBO 12
ThinMaintenanceNoNavigation 13
ThinMaintenanceNoNavigation 14
ThinMaintenanceNoNavigation Parâmetros para Execução Deve-se definir os parâmetros conforme o template que está sendo utilizado para manutenção 15
ThinMaintenanceNoNavigation Parâmetros para tabela Pai: DEFINE INPUT PARAMETER prtable AS ROWID NO-UNDO. DEFINE INPUT PARAMETER pcaction AS CHARACTER NO-UNDO. DEFINE INPUT PARAMETER phcaller AS HANDLE NO-UNDO. 16
ThinMaintenanceNoNavigation Parâmetro prtable pcaction phcaller Descrição Rowid da tabela a ser manutenida pelo programa, caso seja uma inclusão ou cópia deve-se utilizar? como valor para o parâmetro Indica a ação a ser tomada pelo programa, podendo ter os valores: Add = Inclusão, Copy = Cópia e Update = Alteração Handle do programa executor 17
ThinMaintenanceNoNavigation Parâmetros para tabela Filho: DEFINE INPUT PARAMETER prtable AS ROWID NO-UNDO. DEFINE INPUT PARAMETER prparent AS ROWID NO-UNDO. DEFINE INPUT PARAMETER pcaction AS CHARACTER NO-UNDO. DEFINE INPUT PARAMETER phcaller AS HANDLE NO-UNDO. DEFINE INPUT PARAMETER pisonpagenumber AS INTEGER NO-UNDO. 18
ThinMaintenanceNoNavigation Parâmetro prtable prparent pcaction phcaller pisonpagenumber Descrição Rowid da tabela filho (principal) a ser manutenida pelo programa, caso seja uma inclusão ou cópia deve-se utilizar? como valor para o parâmetro Rowid da tabela pai (secundária) a ser utilizada pelo programa Indica a ação a ser tomada pelo programa, podendo ter os valores: Add = Inclusão, Copy = Cópia e Update = Alteração Handle do programa executor Número da página associado a tabela filho, no programa executor, utilizado posicionar o browse filho no registro atualizado ou criado 19
ThinMaintenanceNoNavigation Método saveparentfields Responsável pela atualização dos campos referentes a tabela pai que estão na tabela filho. Deve ser mantido no caso do programa ser utilizado para a manutenção de registro de tabela filho. 20
ThinMaintenanceNoNavigation PROCEDURE saveparentfields : ASSIGN ttorder.cust-num = ttcustomer.cust-num. RETURN "OK":U. END PROCEDURE. 21
ThinMaintenanceNoNavigation Definições das Páginas do Folder O template inicialmente possui 2 (duas) páginas Pode possuir no máximo 8 (oito) páginas Sem as páginas fpage0 e fpage1 não é possível a inicializar o folder em tempo de execução (EPC) 22
ThinMaintenanceNoNavigation A Frame principal fpage0 pode ter somente sua altura alterada, obedecendo: Posicionamento da linha acrescido da altura dos frames das páginas, mais 1.45. O posicionamento da barra de ferramentas e dos botões deve ser definido da forma a seguir: A linha na qual deve estar o widget rttoolbar fica a 0.63 antes do final da fpage0. Os botões devem estar na linha do rttoolbar acrecido de 0.23. 23
ThinMaintenanceNoNavigation Cada página está relacionada a uma widget frame fpage<pagenumber> Devem estar posicionados na coluna 3.50; A linha na qual devem estar posicionados fica a 1.45 abaixo do último widget da frame principal (fpage0); A largura não deve ser alterada (84.43); A altura é definida através da quantidade de widgets em linha acrescido de 0.25 24
ThinMaintenanceNoNavigation 25
ThinMaintenanceNoNavigation Disposição dos Widgets Quando for necessário fazer a inclusão de widgets deve-se primeiramente selecionar o frame de trabalho; 26
ThinMaintenanceNoNavigation 27
ThinMaintenanceNoNavigation Para os widgets da temp-table de comunicação, deve-se utilizar o botão a seguir: 28
ThinMaintenanceNoNavigation Alterar as propriedades dos widgtes inseridos: Devem estar dispostos em linha, e caso necessário em colunas; Para widgets do tipo fill-in, sua altura deve ser de 0.88; Para widgets dos tipos combo-box, suas alturas devem ser de 1.00; 29
ThinMaintenanceNoNavigation Para widgets dos tipos editores ou list-box ou radio-set, suas alturas devem ser definidas pelo próprio desenvolvedor; Para os widgets que fazem parte do índice único e suas descrições, devem ser dispostos no retângulo rtkeys; A linha na qual os widgets que estão na primeira linha do retângulo rtkeys, deve ser 1.17; os demais devem estar a distância de 1.00 do widget anterior. 30
ThinMaintenanceNoNavigation A linha na qual os widgets que estão na primeira linha dos frames das páginas, deve ser 1.17; os demais devem estar a distância de 1.00 do widget anterior. 31
32
33
Características Possui função para implementação de novos registros; Pode ser utilizado para pesquisa de chaves estrangeiras ou para reposicionamento; Cada uma das páginas é utilizada para identificar as diferentes classificações da tabela do programa; O gerenciamento das páginas do folder é feito pelo programa objects/thinfolder.w; 34
Faz uso do sistema de tradução de.r, bastando para tanto identificar as strings que não devem ser traduzidas com :U (Exemplo: CHOOSE :U) 35
Tarefas Definições dos Preprocessadores Definição da Temp-table de Comunicação Queries para os Browsers Faixas de Entrada Instância dos DBOs Definições das Páginas do Folder Disposição dos widgets nas Páginas 36
Criação do Método openqueries Criação do Método setconstraints Criação do Método returnfieldspage Triggers de Botões Padrão 37
Definições dos Preprocessadores &GLOBAL-DEFINE Program thinzoom &GLOBAL-DEFINE Version 1.00.00.000 &GLOBAL-DEFINE InitialPage 1 &GLOBAL-DEFINE FolderLabels Cust-Num,Name &GLOBAL-DEFINE Range YES 38
&GLOBAL-DEFINE FieldsRangePage1 sports.customer.cust-num &GLOBAL-DEFINE FieldsRangePage2 sports.customer.name &GLOBAL-DEFINE FieldsRangePage3 &GLOBAL-DEFINE FieldsRangePage4 &GLOBAL-DEFINE FieldsRangePage5 &GLOBAL-DEFINE FieldsRangePage6 &GLOBAL-DEFINE FieldsRangePage7 &GLOBAL-DEFINE FieldsRangePage8 39
&GLOBAL-DEFINE FieldsAnyKeyPage1 YES &GLOBAL-DEFINE FieldsAnyKeyPage2 NO &GLOBAL-DEFINE FieldsAnyKeyPage3 &GLOBAL-DEFINE FieldsAnyKeyPage4 &GLOBAL-DEFINE FieldsAnyKeyPage5 &GLOBAL-DEFINE FieldsAnyKeyPage6 &GLOBAL-DEFINE FieldsAnyKeyPage7 &GLOBAL-DEFINE FieldsAnyKeyPage8 40
&GLOBAL-DEFINE tttable1 &GLOBAL-DEFINE hdbotable1 hdbocustomer &GLOBAL-DEFINE DBOTable1 ttcustomer Customer &GLOBAL-DEFINE tttable2 ttcustomer2 &GLOBAL-DEFINE hdbotable2 hdbocustomer2 &GLOBAL-DEFINE DBOTable2 Customer &GLOBAL-DEFINE page1browse &GLOBAL-DEFINE page2browse brtable1 brtable2 41
Para definir o número de registros que devem ser retornados para o browse, deve-se utilizar o preprocessor padrão a seguir: Preprocessador NumRowsReturned Descrição Número de registros que devem ser retornados no browse &GLOBAL-DEFINE NumRowsReturned 25 42
Definição da Temp-table de Comunicação Deve-se criar a temp-table de comunicação com o DBO. 43
44
45
Queries para os Browses A query do browser deve ser gerada com um FOR EACH simples na TEMP-TABLE de comunicação da interface. Em cada página do Zoom. 46
47
Faixas de Entrada Definem os registros a serem exibidos nos browsers; Devem ser compatíveis com as restrições existentes no programa DBO; Pode ser feita de forma automática, basta o preenchimento dos pré-processadores Range, FieldsRangePageN e FieldsAnyKeyPageN; 48
Para criar as faixas manualmente deve-se seguir as seguintes regras: Incluir widgets compatíveis com as restrições existentes nos DBOs; Caso utilize-se fill-ins, devem possuir a altura 0.88, somente o primeiro deve possuir label e devem utilizar as imagens: image/im-fir.bmp e image/im-las.bmp para indicar a faixa inicial e final caso necessário; 49
Caso utilize-se combo-boxs, devem possuir a altura 0.88, somente o primeiro deve possuir label e devem utilizar as imagens: image/im-fir.bmp e image/im-las.bmp para indicar a faixa inicial e final caso necessário; 50
Incluir um botão chamado btcheck<pagenumber>, altura 1.00, largura 5.00, imagem image/im-chck1.bmp e que execute o método setconstraints passando como parâmetro o número da página correspondente ao botão. ON CHOOSE OF btcheck1 DO: RUN setconstraints IN THIS-PROCEDURE (INPUT 1). END 51
Instância do DBO As criações das instâncias do DBOs devem ser feitas manualmente, utilizando ou não o recurso de RPC. A instância dos DBOs é feita no método initializedbos. 52
Parâmetros: DBOProgram: Nome físico do programa DBO DBODescription: Identifica o nome da constraint a ser utilizada inicialmente para o DBO 53
PROCEDURE initializedbos: /*--- Verifica se o DBO já está inicializado ---*/ IF NOT VALID-HANDLE({&hDBOTable1}) THEN DO: {btb/btb008za.i1 C:/Programs/DBOCustomer.p YES} {btb/btb008za.i2 C:/Programs/DBOCustomer.p '' {&hdbotable1}} END. /*--- Abre query CustNum do DBO ---*/ RUN openquerystatic IN {&hdbotable1} (INPUT "CustNum":U) NO-ERROR. /*--- Verifica se o DBO já está inicializado ---*/ IF NOT VALID-HANDLE({&hDBOTable2}) THEN DO: {btb/btb008za.i1 C:/Programs/DBOCustomer.p YES} {btb/btb008za.i2 C:/Programs/DBOCustomer.p '' {&hdbotable2}} END. /*--- Abre query CustNum do DBO ---*/ RUN openquerystatic IN {&hdbotable2} (INPUT "Name":U) NO-ERROR. RETURN "OK":U. END PROCEDURE. 54
Definições das Páginas do Folder O template inicialmente possui 2 (duas) páginas Pode possuir no máximo 8 (oito) páginas A Frame principal fpage0 pode ter somente sua altura alterada, obedecendo: Posicionamento da linha acrescido da altura dos frames das páginas, mais 1.45. 55
Cada página está relacionada a uma widget frame fpage<pagenumber> Devem estar posicionados na coluna 3.50; Devem estar posicionados na linha 2.45 A largura não deve ser alterada (84.43); A altura, preferencialmente, deve ser mantida (10.63) 56
57
Disposição dos Widgets Quando for necessário fazer a inclusão de widgets deve-se primeiramente selecionar o frame de trabalho; 58
59
Para os widgets browsers, deve-se alterar algumas propriedades: A fonte deve ser 2; A largura deve ser 82.00; A altura deve ser 8.00; Não deve-se utilizar a opção INDEXED-REPOSITION; Na definição do browse, a opção Fields Returned deve conter o valor All Fields. 60
Método OpenQueries É responsável por realizar a abertura dos browsers com os dados dos DBOs. Para tanto é feito o uso do include zoom/openqueries.i para atualizar os dados dos browsers. Traz somente os 40 (quarenta) primeiros registros associados aos browsers. 61
Parâmetros Parâmetro Query PageNumber Descrição Identifica o nome da query a ser utilizada para realizar a abertura dos DBOs Número da página, utilizado para designar o nome de alguns widgets, tais como btimplant etc 62
PROCEDURE openqueries: {zoom/openqueries.i &Query="CustNum" &PageNumber="1"} {zoom/openqueries.i &Query="Name" &PageNumber="2"} RETURN "OK":U. END PROCEDURE. 63
Método setconstraints É responsável por realizar a abertura dos browsers, com as restrições indicadas pelo usuário final, com os dados dos DBOs. Para tanto é feito o uso dos métodos setconstraint<description> existentes no DBOs 64
PROCEDURE setconstraints: DEFINE INPUT PARAMETER ppagenumber AS INTEGER NO-UNDO. /*--- Seta constraints conforme número da página ---*/ CASE ppagenumber: WHEN 1 THEN /*--- Seta Constraints para o DBOTable1 ---*/ RUN setconstraintcustnum IN {&hdbotable1} (INPUT fninirangeintpage(input 1, INPUT 1), INPUT fnendrangeintpage(input 1, INPUT 1)). WHEN 2 THEN /*--- Seta Constraints para o DBOTable2 ---*/ RUN setconstraintname IN {&hdbotable2} (INPUT fninirangecharpage(input 2, INPUT 1), INPUT fnendrangecharpage(input 2, INPUT 1)). END CASE. ASSIGN iconstraintpagenumber = ppagenumber. /*--- Atualiza browse ---*/ RUN openqueries IN THIS-PROCEDURE. RETURN "OK":U. END PROCEDURE. 65
Quando utilizamos faixas automáticas deve-se utilizar as funções a seguir: Função FnIniRangeCharPage Decrição Retorna valor de tela, do campo da faixa inicial, no formato caracter; Recebe como parâmetro o número da página e o número da posição do campo na faixa automática. 66
Função FnEndRangeCharPage FnIniRangeIntPage Decrição Retorna valor de tela, do campo da faixa final, no formato caracter; Recebe como parâmetro o número da página e o número da posição do campo na faixa automática. Retorna valor de tela, do campo da faixa inicial, no formato inteiro; Recebe como parâmetro o número da página e o número da posição do campo na faixa automática. 67
Função FnEndRangeIntPage FnIniRangeDatePage Decrição Retorna valor de tela, do campo da faixa final, no formato inteiro; Recebe como parâmetro o número da página e o número da posição do campo na faixa automática. Retorna valor de tela, do campo da faixa inicial, no formato data; Recebe como parâmetro o número da página e o número da posição do campo na faixa automática. 68
Função FnEndRangeDatePage FnIniRangeDecPage Decrição Retorna valor de tela, do campo da faixa final, no formato data; Recebe como parâmetro o número da página e o número da posição do campo na faixa automática. Retorna valor de tela, do campo da faixa inicial, no formato decimal; Recebe como parâmetro o número da página e o número da posição do campo na faixa automática. 69
Função FnEndRangeDecPage Decrição Retorna valor de tela, do campo da faixa final, no formato decimal; Recebe como parâmetro o número da página e o número da posição do campo na faixa automática. 70
Método returnfields<pagenumber> É responsável por retornar os valores dos campos do registro selecionado pelo usuário final. pcfield Preprocessador pcfieldvalue Descrição Indica o nome do campo que deseja-se retornar o valor Valor do campo em formato caracter 71
PROCEDURE returnfieldspage1: DEFINE INPUT PARAMETER pcfield AS CHARACTER NO- UNDO. DEFINE OUTPUT PARAMETER pcfieldvalue AS CHARACTER NO- UNDO. IF AVAILABLE ttcustomer THEN DO: CASE pcfield: WHEN "Cust-Num":U THEN ASSIGN pcfieldvalue = STRING(ttCustomer.Cust- Num). WHEN "Name":U THEN ASSIGN pcfieldvalue = STRING(ttCustomer.Name). WHEN "Credit-Limit":U THEN ASSIGN pcfieldvalue = STRING(ttCustomer.Credit- Limit). END CASE. END. RETURN "OK":U. END PROCEDURE. 72
Triggers dos Botões Padrão Botão btimplant<pagenumber> Parâmetro ProgramImplant PageNumber Descrição Nome do programa de implantação a ser executado para realizar a inclusão de novos registro. Indica o número da página associado ao botão. 73
ON CHOOSE OF btimplant IN FRAME fpage1 DO: {zoom/implant.i &ProgramImplant="C:/Programs/CustomerMaintenance.w " &PageNumber="1"} END. 74
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. 75