ThinTemplates Parte 3 Tecnologia 1
Agenda Parte 1 Conceitos Características ThinMaintenance ThinMasterDetail Parte 2 ThinMaintenanceNoNavigation ThinZoom 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
ThinWindow ThinWindow 5
ThinWindow 6
ThinWindow 7
ThinWindow Características Pode ser utilizado tanto como Janela Mestre ou Janela Detalhe, usando para isto uma ou mais páginas; 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). 8
ThinWindow Tarefas Definições dos Preprocessadores Definições das Páginas do Folder Disposição dos widgets nas Páginas 9
ThinWindow Definições dos Preprocessadores &GLOBAL-DEFINE Program thinmaintenance &GLOBAL-DEFINE Version 1.00.00.000 &GLOBAL-DEFINE WindowType Detail &GLOBAL-DEFINE Folder YES &GLOBAL-DEFINE InitialPage 1 &GLOBAL-DEFINE FolderLabels Local Default &GLOBAL-DEFINE page0widgets btok bthelp &GLOBAL-DEFINE page1widgets 10
ThinWindow 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. 11
ThinWindow 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. 12
ThinWindow 13
ThinWindows Disposição dos Widgets Quando for necessário fazer a inclusão de widgets deve-se primeiramente selecionar o frame de trabalho; 14
ThinWindows 15
ThinWindows 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; 16
ThinWindows Para widgets dos tipos editores ou list-box ou radio-set, suas alturas devem ser definidas pelo próprio desenvolvedor; 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. 17
ThinReport ThinReport 18
ThinReport 19
ThinReport Características É uma janela do tipo detalhe, isto é, sem menu de barra e moldura, simulando uma caixa de diálogo; O botão 'Executar' tem como função executar toda a parametrização realizada nos Folders; O botão 'Fechar' do frame sai da tela; O botão 'Ajuda' é responsável por chamar o help do programa; 20
ThinReport Seleção: tudo que é faixa; Classificação: Radio-set com as opções; Parâmetros: com exceção da faixa, as outras informações que o usuário digita; Digitação: browse updatable. O gerenciamento das páginas do folder é feito pelo programa objects/thinfolder.w; Uma das opções de saída do relatório é o formato RTF (Rich Text Format). 21
ThinReport 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). 22
ThinReport Tarefas Definições dos Preprocessadores Definições das Páginas do Folder Disposição dos widgets nas Páginas Preparação do Programa de Interface Página de Layout Página de Seleção Página de Classificação Página de Parâmetros 23
ThinReport Página de Digitação Página de Impressão Página de Log Gravação e Validação dos Registros Programa de Lógica (rp.p) 24
ThinReport Definições dos Preprocessadores &GLOBAL-DEFINE Program thinreport &GLOBAL-DEFINE Version 1.00.00.000 &GLOBAL-DEFINE VersionLayout &GLOBAL-DEFINE Folder YES &GLOBAL-DEFINE InitialPage 1 &GLOBAL-DEFINE FolderLabels Seleção,Classificação, Parâmetro, Digitação,Impressão 25
ThinReport &GLOBAL-DEFINE PGLAY &GLOBAL-DEFINE PGSEL &GLOBAL-DEFINE PGCLA &GLOBAL-DEFINE PGPAR &GLOBAL-DEFINE PGDIG &GLOBAL-DEFINE PGIMP &GLOBAL-DEFINE PGLOG NO YES YES YES YES YES NO &GLOBAL-DEFINE RTF YES 26
ThinReport &GLOBAL-DEFINE page0widgets btok ~ btcancel ~ bthelp2 &GLOBAL-DEFINE page1widgets &GLOBAL-DEFINE page2widgets &GLOBAL-DEFINE page3widgets rsclassif &GLOBAL-DEFINE page4widgets lparameter ~ btinputfile 27
ThinReport &GLOBAL-DEFINE page5widgets brdigita ~ btadd ~ btupdate ~ btdelete ~ btsave ~ btopen &GLOBAL-DEFINE page6widgets rsdestiny ~ btconfigimpr ~ btfile ~ rsexecution &GLOBAL-DEFINE page7widgets &GLOBAL-DEFINE page8widgets 28
ThinReport &GLOBAL-DEFINE page0text &GLOBAL-DEFINE page1text &GLOBAL-DEFINE page2text &GLOBAL-DEFINE page3text &GLOBAL-DEFINE page4text &GLOBAL-DEFINE page5text &GLOBAL-DEFINE page6text &GLOBAL-DEFINE page7text &GLOBAL-DEFINE page8text text-entrada text-destino text-modo 29
ThinReport &GLOBAL-DEFINE page1fields &GLOBAL-DEFINE page2fields &GLOBAL-DEFINE page3fields &GLOBAL-DEFINE page4fields &GLOBAL-DEFINE page5fields &GLOBAL-DEFINE page6fields &GLOBAL-DEFINE page7fields &GLOBAL-DEFINE page8fields cinifield cendfield cinputfile cfile 30
ThinReport Definições das Páginas do Folder O template inicialmente possui 7 (sete) páginas: fpage0 Principal fpage1 - Layout fpage2 Seleção fpage3 - Classificação fpage4 Parâmetro fpage5 - Digitação fpage6 Impressão fpage7 - Log 31
ThinReport A Frame principal fpage0 pode ter somente sua altura alterada, obedecendo: Posicionamento da linha acrescido da altura dos frames das páginas. 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); 32
ThinReport A largura não deve ser alterada (84.43); A altura é definida através da quantidade de widgets em linha acrescido de 0.25 33
ThinReport 34
ThinReport Disposição dos Widgets Quando for necessário fazer a inclusão de widgets deve-se primeiramente selecionar o frame de trabalho; 35
ThinReport 36
ThinReport 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; 37
ThinReport Para widgets dos tipos editores ou list-box ou radio-set, suas alturas devem ser definidas pelo próprio desenvolvedor; 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. 38
ThinReport Preparação do Programa de Interface Verificar quais páginas é necessário ao programa; Eliminar as frames das páginas desnecessárias; Em 'Definitions' informar NO para os pré-processadores referentes as páginas que não serão utilizadas. 39
ThinReport &GLOBAL-DEFINE PGLAY &GLOBAL-DEFINE PGSEL &GLOBAL-DEFINE PGCLA &GLOBAL-DEFINE PGPAR &GLOBAL-DEFINE PGDIG &GLOBAL-DEFINE PGIMP &GLOBAL-DEFINE PGLOG NO YES YES YES YES YES NO 40
ThinReport Para utilizar a opção de saída do relatório para o formato RTF informar em Definitions o valor do respectivo préprocessador para YES. &GLOBAL-DEFINE RTF YES 41
ThinReport Página de Layout Esta página é obrigatória para os programas de Importação e Exportação; E necessário só é possível alterar a Frame para NO-BOX; Criar um arquivo que contenha o layout de importação, nos padrões do Produto Datasul-EMS.Este arquivo tem o seguinte nome e path: LAYOUT/LOXX9999.001. 42
ThinReport Página de Seleção Criar como 'Database Fields' e convertê-los para variáveis para obter automaticamente os labels, formatos e tamanhos do dicionário de dados; Corrigir os 'initial values' das variáveis de inicial e final. 43
ThinReport Página de Classificação Redefinir o 'list-items' do radio-set rs-classif, com as opções de classificação de seu relatório; Se necessário adicionar mais opções de classificação. 44
ThinReport Página de Parâmetros Esta página é obrigatória para programas de Importação e Exportação; Colocar as variáveis necessárias na representação desejada; 45
ThinReport Página de Digitação Em 'Definitions', corrigir a definição da temp-table de digitação tt-digita inserindo os campos necessários; Em 'Section Editor', para o objeto browse br-digita adaptar os seguintes gatilhos para a nova definição da temp-table ttdigita e outras necessidades: 46
ThinReport 'Display': define os campos da temp-table a serem apresentados e quais devem ficar habilitados; 'Row-entry': determina valores iniciais para os campos da temp-table na inclusão de novas linhas, exceto quando se trata da primeira linha do browse; 'Row-leave': salva as alterações feitas pelo usuário. 47
ThinReport Ainda em 'Section Editor', para os botões btadd e btupdate, adaptar os seus gatilhos de 'Choose', na linha que aplica um evento 'Entry', sobre o primeiro campo habilitado no browse; Todas as validações do browse brdigita devem ser feitas na procedure piexecute 48
ThinReport Página de Impressão Esta página somente deve ser utilizada para programas de Relatório. 49
ThinReport Página de Log Esta página é obrigatória para programas de Importação e Exportação. Para programas de Exportação, retirar o campo rsall, o retângulo e o texto Imprime. 50
ThinReport Gravação e Validação dos Registros Em 'Definitions' implementar os campos de parâmetros e seleção na definição da temp-table tt-param; Na procedure 'piexecute', colocar as validações necessárias às opções do usuário para execução do relatório; 51
ThinReport if input frame f-pg-par i-nr-nivel > 19 then do: run SetFolder IN hfolder (INPUT 2). run utp/ut-msgs.p (input "show", input 73, input " "). apply 'entry' to i-nr-nivel in frame f-pgpar. return error. end. 52
ThinReport Na procedure 'piexecute', colocar a lógica de gravação dos parâmetros e seleção na temp-table tt-param; Substituir na chamada do include {report/i-rprun.i} a literal 'XXP/XX9999RP.P' pelo programa que deve imprimir o relatório. 53
ThinReport Programa de Lógica (rp.p) Programa sem interface que contém a lógica de negócio; Todas as validações ou informações com necessidade de intervenção do usuário devem ser tratadas pelo programa.w que o chama. 54
ThinReport Passos: Copiar a definição das temp-tables tt-param e tt-digita do programa de interface (.W) para o programa que deve gerar o relatório (rp.p); Utilizar um stream padrão definido como STR-RP, para impressão do relatório; Deve-se passar o parâmetro &stream com o nome da stream para os includes i-rpcab.i, i-rpcb80, i-rpc256.i, i-rpout.i e i- rpclo.i; Para programas de Importação e Exportação definir outro stream para a entrada/saída dos dados; 55
ThinReport Nas seleções, ao invés de utilizar a palavra "à", para dar idéia de faixa, substituí-la pelos caracteres " < > " semelhantes as imagens utilizadas na tela de seleção, e que não necessitam ser traduzidos; Em todos os forms/frames de impressão deve-se colocar a cláusula stream-io; Para utilizar a funcionalidade de impressão para arquivo RTF definir o préprocessador conforme abaixo: &GLOBAL-DEFINE RTF YES &SCOPED-DEFINE pagesize N 56
ThinReport A definição da temp-table tt-param deve ser idêntica a definição da mesma no programa de interface. Condicionar o VIEW das frames de cabeçalho/rodapé no início do programa, para que quando o destino for para RTF as mesmas não sejam apresentadas. Segue exemplo abaixo: IF tt-param.destino <> 4 THEN DO: VIEW STREAM str-rp FRAME f-cabec. VIEW STREAM str-rp FRAME f-rodape. END. 57
ThinFormation ThinFormation 58
ThinFormation 59
ThinFormation Características Algumas das funções são realizadas na própria tela base do programa; 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) 60
ThinFormation Tarefas Definições dos Preprocessadores Definição da Temp-table de Comunicação Queries para os Browses Instância dos DBOs Disposição dos widgets nas Páginas Criação do Método openqueries Criação do Método saveparentfields 61
ThinFormation Triggers de Botões Padrão Criação do Método gotorecord 62
ThinFormation Definições dos Preprocessadores &GLOBAL-DEFINE Program thinformation &GLOBAL-DEFINE Version 1.00.00.000 &GLOBAL-DEFINE First YES &GLOBAL-DEFINE Prev YES &GLOBAL-DEFINE Next YES &GLOBAL-DEFINE Last YES &GLOBAL-DEFINE GoTo YES &GLOBAL-DEFINE Search YES 63
ThinFormation &GLOBAL-DEFINE UpdateTarget &GLOBAL-DEFINE DelTarget &GLOBAL-DEFINE AddTarget &GLOBAL-DEFINE DelAllTarget &GLOBAL-DEFINE AddAllTarget YES YES YES YES YES &GLOBAL-DEFINE ttparent &GLOBAL-DEFINE hdboparent &GLOBAL-DEFINE DBOParentTable ttorder hdboorder Order &GLOBAL-DEFINE tttarget &GLOBAL-DEFINE hdbotarget &GLOBAL-DEFINE DBOTargetTable ttorder-line hdboorder-line Order-Line 64
ThinFormation &GLOBAL-DEFINE ttsource &GLOBAL-DEFINE hdbosource &GLOBAL-DEFINE DBOSourceTable ttitem hdboitem Item &GLOBAL-DEFINE page0fields ttorder.order-num ~ ttorder.order-date ~ ttorder.sales-rep &GLOBAL-DEFINE sourcebrowse brsource &GLOBAL-DEFINE targetbrowse brtarget 65
ThinFormation Para retirar os botões de Consultas Relacionadas e Relatórios Relacionados, o desenvolvedor deve incluir o preprocessor padrão referente ao botão que deseja retirar. &GLOBAL-DEFINE ExcludeBtQueryJoins &GLOBAL-DEFINE ExcludeBtReportsJoins YES YES 66
ThinFormation Para definir o número de registros que devem ser retornados para o browse, deve-se utilizar o preprocessor padrão a seguir: Preprocessador NumRowsReturnedSource NumRowsReturnedTarget Descrição Número de registros que devem ser retornados no browse Source Número de registros que devem ser retornados no browse Target 67
ThinFormation Definição da Temp-table de Comunicação Deve-se criar a temp-table de comunicação com o DBO. 68
ThinFormation 69
ThinFormation 70
ThinFormation Queries para os Browses As queries dos browsers devem ser geradas com um FOR EACH simples na TEMP-TABLE de comunicação da interface. 71
ThinFormation 72
ThinFormation Instância do DBO As criações das instâncias do DBOs (DBO Pai, DBO Origem e DBO Destino) devem ser feitas manualmente, utilizando ou não o recurso de RPC. Definir as restrições iniciais e a abertura da query do DBO Pai, caso necessário. A instância dos DBOs é feita no método initializedbos. 73
ThinFormation Parâmetros: DBOParentProgram : Nome físico do programa DBO pai (principal); Description : Identifica o nome da constraint a ser utilizada inicialmente para o DBO pai (principal); Query: Identifica o nome da query a ser utilizada para realizar a abertura inicial do DBO pai; DBOSourceProgram : Nome físico do programa DBO origem 74
ThinFormation DBOTargetProgram : Nome físico do programa DBO destino (formação) 75
ThinFormation PROCEDURE initializedbos: /*--- Verifica se o DBO da tabela Pai já está inicializado ---*/ IF NOT VALID-HANDLE({&hDBOParent}) THEN DO: {btb/btb008za.i1 C:/Programs/DBOOrder.p} {btb/btb008za.i2 C:/Programs/DBOOrder.p '' {&hdboparent}} END. RUN openquerystatic IN {&hdboparent} (INPUT "OrderNum":U). /*--- Verifica se o DBO da tabela Origem já está inicializado ---*/ IF NOT VALID-HANDLE({&hDBOSource}) THEN DO: {btb/btb008za.i1 C:/Programs/DBOItem.p } {btb/btb008za.i2 C:/Programs/DBOItem.p '' {&hdbosource}} END. /*---Verifica se o DBO da tabela Formação já está inicializado ---*/ IF NOT VALID-HANDLE({&hDBOTarget}) THEN DO: {btb/btb008za.i1 C:/Programs/DBOOrder-Line.p } {btb/btb008za.i2 C:/Programs/DBOOrder-Line.p '' {&hdbotarget}} END. RETURN "OK":U. END PROCEDURE. 76
ThinFormation Para os widgets da temp-table de comunicação, deve-se utilizar o botão a seguir: 77
ThinFormation 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; 78
ThinFormation 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 da temp-table Pai, devem ser dispostos no retângulo rtparent; 79
ThinFormation Método OpenQueries É responsável por realizar a ligação entre o DBO Pai e o DBO destino (formação) e abrir a query do DBO Origem; Para atualizar os dados do browser Destino utiliza o include formation/openqueriestarget.i; Para atualizar os dados do browser Origem utiliza o include formation/openqueriessource.i; 80
ThinFormation Traz somente os 40 (quarenta) primeiros registros associados aos browsers. 81
ThinFormation formation/openqueriestarget.i Parâmetro Parent Query Descrição Nome da tabela pai, utilizado para designar o método linkto<parent> Identifica o nome da query a ser utilizada para realizar a abertura do DBO Destino 82
ThinFormation formation/openqueriessource.i Parâmetro Query ConstraintParameters OpenAlways Descrição Identifica o nome da query a ser utilizada para realizar a abertura do DBO Origem Parâmetros a serem utilizados para o método setconstraint{&description} O valor YES indica que o browse Origem deve ser atualizado a cada vez que for efetuada navegação na tabela Pai 83
ThinFormation PROCEDURE openqueries: {Formation/OpenQueriesTarget.i &Parent="Order" &Query="Order-Num"} {Formation/OpenQueriesSource.i &Query="Item-Num" &OpenAlways="no"} RETURN "OK":U. END PROCEDURE. 84
ThinFormation Método saveparentfields É responsável por atualizar a tabela de formação com base nos campos da tabela pai e tabela origem. 85
ThinFormation PROCEDURE saveparentfields: {&tttarget}.order-num = {&ttparent}.order- assign num {&tttarget}.item-num = {&ttsource}.item-num {&tttarget}.qty = 1 {&tttarget}.price = {&ttsource}.price. RETURN "OK":U. END PROCEDURE. 86
ThinFormation Triggers dos Botões Padrão Botão btupdatetarget Parâmetro ProgramTarget Descrição Nome do programa a ser executado para realizar a alteração de registro da tabela formação. ON CHOOSE OF btudpatetarget IN FRAME fpage1 DO: {masterdetail/updatetarget.i &ProgramTarget="C:/Programs/MaintenanceNoNavigationOrder.w"} END. 87
ThinFormation Triggers dos Botões Padrão Botão btsearch Parâmetro ProgramZoom Descrição Nome do programa a ser executado para realizar a pesquisa de registros. ON CHOOSE OF btsearch IN FRAME fpage0 /* Search */ OR CHOOSE OF MENU-ITEM misearch IN MENU mbmain DO: {method/zoomreposition.i &ProgramZoom="C:/Programs/Zoom.w "} END. 88
ThinFormation Método gotorecord É responsável pela função de Vá Para da tabela pai, disparada pelo botão btgoto e pelo menu migoto. 89
ThinFormation Parâmetros Parâmetro <c d i> <campo N> <Tabela> Descrição Indica o tipo de variável (c = character, d = decimal, i = integer). Nomes dos campos a serem inclusos na frame de Vá Para. Nome da tabela a ser utilizado para definir o título da frame de Vá Para. 90
ThinFormation PROCEDURE gotorecord: DEFINE VARIABLE icust-num LIKE ttcustomer.cust-num NO-UNDO. DEFINE FRAME fgotorecord icust-num AT ROW 1.21 COL 15 COLON-ALIGNED btgotook AT ROW 2.63 COL 2.14 btgotocancel AT ROW 2.63 COL 13 rtgotobutton AT ROW 2.38 COL 1 SPACE(0.28) WITH VIEW-AS DIALOG-BOX KEEP-TAB-ORDER SIDE-LABELS NO- UNDERLINE THREE-D SCROLLABLE FONT 1 TITLE "Vá Para Customer" DEFAULT-BUTTON btgotook CANCEL-BUTTON btgotocancel. 91
ThinFormation ON "CHOOSE":U OF btgotook IN FRAME fgotorecord DO: ASSIGN icustnum. RUN gotokey IN {&hdbotable} (INPUT icustnum). IF RETURN-VALUE = "NOK":U THEN DO: RUN utp/ut-msgs.p (INPUT "SHOW":U, INPUT 2, INPUT "Customer"). RETURN NO-APPLY. END. END. ENABLE icust-num btgotook btgotocancel WITH FRAME fgotorecord. 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