ThinTemplates Parte 4 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
ThinFormationNoNavigation ThinFormationNoNavigation 5
ThinFormationNoNavigation 6
ThinFormationNoNavigation 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) 7
ThinFormationNoNavigation Tarefas Definições dos Preprocessadores Definição da Temp-table de Comunicação Instância dos DBOs Disposição dos widgets nas Páginas Criação do Método openqueries Criação do Método saveparentfields Triggers de Botões Padrão 8
ThinFormationNoNavigation Definições dos Preprocessadores &GLOBAL-DEFINE Program hinformationnonavigation &GLOBAL-DEFINE Version 1.00.00.000 &GLOBAL-DEFINE DelTarget YES &GLOBAL-DEFINE AddTarget YES &GLOBAL-DEFINE DelAllTarget YES &GLOBAL-DEFINE AddAllTarget YES 9
ThinFormationNoNavigation &GLOBAL-DEFINE UpdateTarget 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 10
ThinFormationNoNavigation &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 11
ThinFormationNoNavigation 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 12
ThinFormationNoNavigation Definição da Temp-table de Comunicação Deve-se criar a temp-table de comunicação com o DBO. 13
ThinFormationNoNavigation 14
ThinFormationNoNavigation 15
ThinFormationNoNavigation 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. 16
ThinFormationNoNavigation 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; 17
ThinFormationNoNavigation DBOTargetProgram: Nome físico do programa DBO destino (formação). 18
ThinFormationNoNavigation 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. 19
ThinFormationNoNavigation Para os widgets da temp-table de comunicação, deve-se utilizar o botão a seguir: 20
ThinFormationNoNavigation 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; 21
ThinFormationNoNavigation 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. 22
ThinFormationNoNavigation 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 formationnonavigation/openqueriestarget.i; Para atualizar os dados do browser Origem utiliza o include formationnonavigation/openqueriessource.i; Traz somente os 40 (quarenta) primeiros registros associados aos browsers. 23
ThinFormationNoNavigation formationnonavigation/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. 24
ThinFormationNoNavigation formationnonavigation/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 25
ThinFormationNoNavigation PROCEDURE openqueries: {FormationNoNavigation/OpenQueriesTarget.i &Parent="Order" &Query="Order-Num"} {FormationNoNavigation/OpenQueriesSource.i &Query="Item-Num" &OpenAlways="no"} RETURN "OK":U. END PROCEDURE. 26
ThinFormationNoNavigation Método saveparentfields É responsável por atualizar a tabela de formação com base nos campos da tabela pai e tabela origem. 27
ThinFormationNoNavigation 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. 28
ThinFormationNoNavigation 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. 29
Técnicas Técnicas 30
Override de Métodos A técnica consiste em executar 2 (dois) métodos, sendo chamados no ponto inicial e final de um método básico. Nomenclatura específica para a definição dos métodos de override. <before/after><nome-do-método-básico> 31
Override de Métodos PROCEDURE beforedisplayfields: /*----------------------------------------------- ----- Purpose: Override do método displayfields (before) Parameters: Notes: ------------------------------------------------- --*/ RETURN "OK":U. END PROCEDURE. 32
Override de Métodos PROCEDURE afterdisplayfields: /*----------------------------------------------- ----- Purpose: Override do método displayfields (after) Parameters: Notes: ------------------------------------------------- --*/ RETURN "OK":U. END PROCEDURE. 33
Pesquisas de Chaves Estrangeiras Quando for necessário implementar pesquisas de campos de chave estrangeira deve-se obedecer as seguintes regras: Deve ser incluso ao lado do campo que representa a chave estrangeira, 1 (um) fill-in para conter a descrição desta; Nas triggers de MOUSE-SELECT-DBLCLICK e F5 devem ser feito uso do include method/zoomfields.i; Setar o cursor de pesquisa (image/lupa.cur) para o campo que representa a chave estrangeira. 34
Pesquisas de Chaves Estrangeiras method/zoomfields.i Parâmetro ProgramZoom FieldZoomN FieldScreenN Descrição Nome do programa de Pesquisa a ser executado. Indica o nome do campo que deve ser retornado pelo programa de Pesquisa, N indica um número que pode variar de 1 até 10. Indica o nome do campo (variável) que deve receber o valor retornado pelo programa de pesquisa, N indica um número que pode variar de 1 até 10. 35
Pesquisas de Chaves Estrangeiras Parâmetro FrameN FieldHandleN Descrição Indica o nome da frame na qual está o campo (variável) que deve receber o valor retornado pelo programa de pesquisa, N indica um número que pode variar de 1 até 10 Indica a variável handle que contém o handle do campo que deve receber o valor retornado pelo programa de pesquisa, N indica um número que pode variar de 1 até 10, não se deve utilizar este parâmetro em conjunto com os parâmetros FieldZoomN, FieldScreenN e FrameN 36
Pesquisas de Chaves Estrangeiras Parâmetro RunMethod EnableImplant Descrição Indica a linha de comando, que contém a chamada a um método do programa de pesquisa A variável hprogramzoom contém o handle do programa e pesquisa Os valores YES e NO indicam se o botão Implantar será habilitado ou não. 37
Pesquisas de Chaves Estrangeiras OR F5 OF ttcustomer.sales-rep IN FRAME fpage2 DO: {method/zoomfields.i &ProgramZoom="C:/program/SalesRepZoom.w" &FieldZoom1="Sales-Rep" &FieldScreen1="ttCustomer.Sales-Rep" &Frame1="fPage2" &FieldZoom2="Rep-Name" &FieldScreen2="fiRepName" &Frame2="fPage2" &RunMethod="RUN setavariable IN hprogramzoom (INPUT 'Representante')." &EnableImplant="NO"} END. 38
Pesquisas de Chaves Estrangeiras Na sessão Main Block, deve-se setar o cursor do mouse para lupa; /*- Seta cursor do mouse para lupa, quando estiver posicionado sobre o fill-in -*/ ttcustomer.sales-rep:load-mouse- POINTER("image/lupa.cur":U) IN FRAME fpage2. 39
Pesquisas de Chaves Estrangeiras em Browses Quando for necessário implementar pesquisas de campos de chave estrangeira em Browses deve-se obedecer as seguintes regras: Deve ser incluso ao lado do campo que representa a chave estrangeira, 1 (uma) variável para conter a descrição desta, seguindo as regras de implementação de widgets do template; Nas triggers de MOUSE-SELECT-DBLCLICK e F5 devem ser feito uso do include method/zoomfields.i. 40
Pesquisas de Chaves Estrangeiras em Browses 41
Pesquisas de Chaves Estrangeiras em Browses method/zoomfields.i Parâmetro ProgramZoom FieldZoomN FieldScreenN Descrição Nome do programa de Pesquisa a ser executado Indica o nome do campo que deve ser retornado pelo programa de Pesquisa, N indica um número que pode variar de 1 até 10 Indica o nome do campo (variável) que deve receber o valor retornado pelo programa de pesquisa, N indica um número que pode variar de 1 até 10 42
Pesquisas de Chaves Estrangeiras em Browses Parâmetro BrowseN FieldHandleN Descrição Indica o nome do browse no qual está o campo (variável) que deve receber o valor retornado pelo programa de pesquisa, N indica um número que pode variar de 1 até 10 Indica a variável handle que contém o handle do campo que deve receber o valor retornado pelo programa de pesquisa, N indica um número que pode variar de 1 até 10, não se deve utilizar este parâmetro em conjunto com os parâmetros FieldZoomN, FieldScreenN e BrowseN 43
Pesquisas de Chaves Estrangeiras em Browses Parâmetro RunMethod EnableImplant Descrição Indica a linha de comando, que contém a chamada a um método do programa de pesquisa A variável hprogramzoom contém o handle do programa e pesquisa. Os valores YES e NO indicam se o botão Implantar será habilitado ou não. 44
Pesquisas de Chaves Estrangeiras em Browses OR F5 OF ttcustomer.sales-rep IN BRWSE brupd1 DO: {method/zoomfields.i &ProgramZoom="C:/program/SalesRepZoom.w" &FieldZoom1="Sales-Rep" &FieldScreen1="ttCustomer.Sales-Rep" &Browse1="brUpd1" &FieldZoom2="Rep-Name" &FieldScreen2="cRepName" &Browse2="brUpd1" &RunMethod="RUN setavariable IN hprogramzoom (INPUT 'Representante')." &EnableImplant="NO"} END. 45
Pesquisas de Chaves Estrangeiras em Browses Para utilizar um programa de Zoom construído em SmartObjects devemos seguir os seguintes passos : Deve ser incluso ao lado do campo que representa a chave estrangeira, 1 (um) fill-in para conter a descrição desta, seguindo as regras de implementação de widgets do template; 46
Pesquisas de Chaves Estrangeiras com SmartZoom Definir variáveis que são utilizadas pela tecnologia smartobjects; DEFINE NEW GLOBAL SHARED VARIABLE adm-broker-hdl AS HANDLE NO-UNDO. DEFINE VARIABLE wh-pesquisa AS HANDLE NO-UNDO. Nas triggers de MOUSE-SELECT-DBLCLICK e F5 devem ser feito uso do include include/zoomvar.i; Setar o cursor de pesquisa (image/lupa.cur) para o campo que representa a chave estrangeira. 47
Pesquisas de Chaves Estrangeiras com SmartZoom include/zoomvar.i Parâmetro prog-zoom Campo Descrição Nome do programa de Pesquisa a ser executado. Indica o nome do campo que deve ser retornado pelo programa de Pesquisa. Caso seja utilizado para mais de um campo, deve-se informar, a partir do segundo campo, um número seqüencial. 48
Pesquisas de Chaves Estrangeiras com SmartZoom Parâmetro Campozoom Descrição Indica o nome do campo no SmartBrowser do zoom de onde o valor é buscado, não deve ser informado o nome da tabela. Caso seja utilizado para mais de um campo, deve-se informar, a partir do segundo campo, um número seqüencial. 49
Pesquisas de Chaves Estrangeiras com SmartZoom Parâmetro Frame Descrição Indica o nome da frame na qual está o campo (variável) que deve receber o valor retornado pelo programa de pesquisa. Este parâmetro é opcional em SmartObjects, mas deve ser utilizado em ThinTemplates. Caso seja utilizado para mais de um campo, deve-se informar, a partir do segundo campo, um número seqüencial. 50
Pesquisas de Chaves Estrangeiras com SmartZoom Parâmetro Parametros Descrição Indica a linha de comando, que contém a chamada a um método do programa de pesquisa A variável wh-pesquisa contém o handle do programa e pesquisa 51
Pesquisas de Chaves Estrangeiras com SmartZoom OR F5 OF ttcustomer.sales-rep IN FRAME fpage2 DO: {include/zoomvar.i &prog-zoom= "C:/program/SalesRepZoom.w" &campo="ttcustomer.sales-rep" &campozoom="sales-rep" &frame="fpage2"} END. 52
Pesquisas de Chaves Estrangeiras com SmartZoom Na sessão Main Block, deve-se setar o cursor do mouse para lupa; /*- Seta cursor do mouse para lupa, quando estiver posicionado sobre o fill-in -*/ ttcustomer.sales-rep:load-mouse- POINTER("image/lupa.cur":U) IN FRAME fpage2. 53
Referências para Chaves Estrangeiras Para implementarmos referências para chave estrangeira deve-se obedecer as seguintes regras: Deve ser incluso ao lado do campo que representa a chave estrangeira, 1 (um) fill-in para conter a descrição desta, seguindo as regras de implementação de widgets do template; 54
Referências para Chaves Estrangeiras Instância do programa DBO que contém acesso à tabela que contém a descrição do campo que representa a chave estrangeira. Na trigger de LEAVE deve ser feito uso do include method/referencefields.i; Override do método de displayfields (after); Eliminar instância do programa DBO através de override do método de destroyinterface (after). 55
Referências para Chaves Estrangeiras A instância do programa DBO, que contém acesso à tabela que contém a descrição do campo que representa a chave estrangeira, deve ser feita no método initializedbos. {btb/btb008za.i1 <DBOProgram> YES} {btb/btb008za.i2 <DBOProgram> '' <VariableHandle>} RUN openquerystatic IN THIS-PROCEDURE (INPUT "<Query>":U) NO-ERROR. 56
Referências para Chaves Estrangeiras Parâmetro DBOProgram VariableHandle Query Descrição Nome físico do programa DBO Identifica o nome da variável handle que conterá o handle do programa DBO Nome da query a ser utilizada para a abertura de query inicial do programa DBO {btb/btb008za.i1 C:/TMP/DBOSales-Rep.p YES} {btb/btb008za.i2 C:/TMP/DBOSales-Rep.p '' hdbosales-rep} RUN openquerystatic IN THIS-PROCEDURE (INPUT "Sales- Rep":U) NO-ERROR. 57
Referências para Chaves Estrangeiras method/referencefields.i Parâmetro HandleDBOLeave KeyValueN Descrição Indica a variável handle que contém o handle do programa DBO que contém acesso à tabela que contém a descrição do campo que representa a chave estrangeira Indica o valor da chave a ser utilizada pelo método gotokey, N indica um número que pode variar de 1 até 10 58
Referências para Chaves Estrangeiras Parâmetro FieldNameN FieldScreenN FrameN Descrição Indica o nome do campo a ser retornado pelo programa DBO, N indica um número que pode variar de 1 até 10 Indica o nome do campo (variável) que deve receber o valor retornado pelo programa DBO, N indica um número que pode variar de 1 até 10 Indica o nome da frame na qual está o campo (variável) que deve receber o valor retornado pelo programa DBO, N indica um número que pode variar de 1 até 10 59
Referências para Chaves Estrangeiras Parâmetro ExcludeVars Descrição Indica se as variáveis utilizadas pelo include devem ser ou não definidas ON LEAVE OF ttcustomer.sales-rep IN FRAME fpage2 DO: {method/referencefields.i &HandleDBOLeave="hDBOSalesRep" &KeyValue1="ttCustomer.Sales-Rep:SCREEN-VALUE IN FRAME fpage2" &FieldName1="Rep-Name" &FieldScreen1="fiRepName" &Frame1="fPage2"} END. 60
Referências para Chaves Estrangeiras Override do método de displayfields (after): PROCEDURE afterdisplayfields: /*----------------------------------------------------- ----- Purpose: Override do método displayfields (after) Parameters: Notes: ------------------------------------------------------- ---*/ APPLY "LEAVE":U TO ttcustomer.sales-rep IN FRAME fpage2. RETURN "OK":U. END PROCEDURE. 61
Referências para Chaves Estrangeiras Override do método de destroyinterface (after) RUN PROCEDURE afterdestroyinterface: /*----------------------------------------------------- ---- Purpose: Override do método destroyinterface (after) Parameters: Notes: ------------------------------------------------------- ---*/ IF VALID-HANDLE(hDBOSalesRep) RUN destroy IN hdbosalesrep. RETURN "OK":U. END PROCEDURE.. 62
Referências para Chaves Estrangeiras em Browses Para implementarmos referências para chave estrangeira em browses deve-se obedecer as seguintes regras: Definir uma variável para conter a descrição do campo que representa a chave estrangeira; DEFINE VARIABLE crep-name AS CHARACTER NO-UNDO. 63
Referências para Chaves Estrangeiras em Browses Definir uma função para retornar a descrição do campo que representa a chave estrangeira, utilizando o include method/referencefields.i; Instânciar o programa DBO que contém acesso à tabela que contém a descrição do campo que representa a chave estrangeira; Incluir a variável na lista de campos exibidos pelo browse, fazendo uso da função recém criada através do operador @, através do botão de campos calculados; Eliminar instância do programa DBO através de override do método de destroyinterface (after). 64
Referências para Chaves Estrangeiras em Browses method/referencefields.i Parâmetro HandleDBOLeave KeyValueN Descrição Indica a variável handle que contém o handle do programa DBO que contém acesso à tabela que contém a descrição do campo que representa a chave estrangeira. Indica o valor da chave a ser utilizada pelo método gotokey, N indica um número que pode variar de 1 até 10. 65
Referências para Chaves Estrangeiras em Browses Parâmetro FieldNameN VariableN ExcludeVars Descrição Indica o nome do campo a ser retornado pelo programa DBO, N indica um número que pode variar de 1 até 10 Indica o nome da variável que deve receber o valor retornado pelo programa DBO, N indica um número que pode variar de 1 até 10 Indica se as variáveis utilizadas pelo include devem ser ou não ser definidas 66
Referências para Chaves Estrangeiras em Browses FUNCTION fnrep-name RETURNS CHARACTER (INPUT pcsales-rep AS CHARACTER) : DEFINE VARIABLE crep-nameaux AS CHARACTER NO-UNDO. {method/referencefields.i &HandleDBOLeave="hDBOSalesRep" &KeyValue1="pcSales-Rep" &FieldName1="Rep-Name" &Variable1="cRep-NameAux"} RETURN crep-nameaux. END FUNCTION. 67
Referências para Chaves Estrangeiras em Browses A instância do programa DBO, que contém acesso à tabela que contém a descrição do campo que representa a chave estrangeira, deve ser feita no método initializedbos. {btb/btb008za.i1 <DBOProgram> YES} {btb/btb008za.i2 <DBOProgram> '' <VariableHandle>} RUN openquerystatic IN THIS-PROCEDURE (INPUT "<Query>":U) NO-ERROR. 68
Referências para Chaves Estrangeiras em Browses Parâmetro DBOProgram VariableHandle Query Descrição Nome físico do programa DBO Identifica o nome da variável handle que conterá o handle do programa DBO Nome da query a ser utilizada para a abertura de query inicial do programa DBO {btb/btb008za.i1 C:/TMP/DBOSales-Rep.p YES} {btb/btb008za.i2 C:/TMP/DBOSales-Rep.p '' hdbosales-rep} RUN openquerystatic IN THIS-PROCEDURE (INPUT "Sales- Rep":U) NO-ERROR. 69
Referências para Chaves Estrangeiras em Browses 70
Referências para Chaves Estrangeiras em Browses Override do método de destroyinterface (after) RUN PROCEDURE afterdestroyinterface: /*----------------------------------------------------- ---- Purpose: Override do método destroyinterface (after) Parameters: Notes: ------------------------------------------------------- ---*/ IF VALID-HANDLE(hDBOSalesRep) RUN destroy IN hdbosalesrep. RETURN "OK":U. END PROCEDURE.. 71
Campos Indicadores (combo-box, selection-list ou radio-set) Em algumas situações temos listas de informações que não são gravadas diretamente no banco de dados, apenas sua referência; Descrição Valor no banco Feminino Masculino F M 72
Campos Indicadores (combo-box, selection-list ou radio-set) Para esses casos definimos o widget que apresenta a lista como um Campo Indicador Passos: Deve ser incluso 1 (um) widget que irá conter a lista de opções (combo-box, selection-list ou radio-set), caso seja um radio-set ou list-box deve-se incluí-lo dentro de um retângulo com label; além disso devem ser seguidas as regras de implementação de widgets do template; 73
Campos Indicadores (combo-box, selection-list ou radio-set) Instância do programa DBO que contém acesso à tabela de origem das informações da lista, caso necessário; {btb/btb008za.i1 <DBOProgram> YES} {btb/btb008za.i2 <DBOProgram> '' <VariableHandle>} RUN openquerystatic IN THIS-PROCEDURE (INPUT "<Query>":U) NO-ERROR. 74
Campos Indicadores (combo-box, selection-list ou radio-set) Parâmetro DBOProgram VariableHandle Query Descrição Nome físico do programa DBO Identifica o nome da variável handle que conterá o handle do programa DBO Nome da query a ser utilizada para a abertura de query inicial do programa DBO {btb/btb008za.i1 C:/TMP/Programs/DBOState.p YES} {btb/btb008za.i2 C:/TMP/Programs/DBOState.p '' hdbostate} RUN openquerystatic IN THIS-PROCEDURE (INPUT "State":U) NO-ERROR. 75
Campos Indicadores (combo-box, selection-list ou radio-set) Override do método de displayfields (after); PROCEDURE afterdisplayfields: /*----------------------------------------------------- ----- Purpose: Override do método displayfields (after) Parameters: Notes: ------------------------------------------------------- ---*/ IF AVAILABLE ttcustomer THEN ASSIGN rsterms:screen-value IN FRAME fpage2 = ttcustomer.terms. RETURN "OK":U. END PROCEDURE. 76
Campos Indicadores (combo-box, selection-list ou radio-set) Override do método de savefields (after); PROCEDURE aftersavefields: /*----------------------------------------------------- ----- Purpose: Override do método savefields (after) Parameters: Notes: ------------------------------------------------------- ---*/ ASSIGN ttcustomer.terms = rsterms. RETURN "OK":U. END PROCEDURE. 77
Exibir Mensagens de Erro 78
Exibir Mensagens de Erro Passos para exibição de mensagens: Instanciar o Utilitário, através do include method/showmessage.i1; {method/showmessage.i1} Popular a temp-table RowErrors, normalmente através da execução do método getrowerrors do programa DBO; RUN getrowerrors IN <DBOHandle> (OUTPUT TABLE RowErrors). 79
Exibir Mensagens de Erro Transferir e exibir os dados da temp-table RowErrors para o utilitário, através do include method/showmessage.i2; {method/showmessage.i2} Caso seja necessário que o Utilitário funcione como uma janela modal, deve-se utilizar o parâmetro &Modal com valor YES, conforme modelo a seguir: {method/showmessage.i2 &Modal="YES"} 80
Exibir Mensagens de Erro Eliminar a instância do Utilitário; caso seja utilizado um thintemplate deve-se fazer o override do método de destroyinterface (after). PROCEDURE afterdestroyinteface: /*----------------------------------------------------- ----- Purpose: Override do método destroyinterface (after) Parameters: Notes: ------------------------------------------------------- --*/ {method/showmessage.i3} RETURN "OK":U. END PROCEDURE. 81
Reposicionamento Automático do Browser de Zoom Observação: Somente implementar a técnica nas variáveis INICIAL de faixa, cujo tipo de dado for CARACTER ou INTEIRO. Editar o programa de zoom e selecionar a variável inicial de faixa (no exemplo c-inicial); 82
Reposicionamento Automático do Browser de Zoom 83
Reposicionamento Automático do Browser de Zoom Criar um gatilho para o evento ANY-KEY destas variáveis. Include AnyKey.i &Variavel: deve conter o nome da variável inicial de faixa &PageNumber: receberá o número da página 84
Reposicionamento Automático do Browser de Zoom Salvar e fechar o Programa de Zoom. 85
Utilização de OCX Quando for necessária a utilização de OCX com thintemplates é necessário que todas as FRAMEs existentes no programa tenham a opção NO-BOX selecionada. 86
Utilização de OCX 87
Override de eventos do browse no template MasterDetail e Zoom Técnica utilizada quando for necessário customizar eventos do browse sem interferir na execução das DPCs. Passos: Definir um preprocessador com o nome do evento que deseja customizar, definindo seu valor como YES. Os eventos disponíveis são: cursor-down, end, off-end, pagedown, value-changed, mouse-select-dblclick, cursor-up, home, off-home e page-up; 88
Override de eventos do browse no template MasterDetail e Zoom Pré-Processador <evento>n Descrição Onde <evento> é o nome do evento que será customizado no filho N, N indica o número da página, podendo variar de 1 até 8 Criar as triggers dos eventos e implementar a chamada da include para a execução das DPC s correspondente ao evento customizado; 89
Override de eventos do browse no template MasterDetail e Zoom {masterdetail/cursordown.i &PageNumber="1"} {masterdetail/end.i &PageNumber="1"} {masterdetail/offend.i &PageNumber="1"} {masterdetail/pagedown.i &PageNumber="1"} {masterdetail/valuechanged.i &PageNumber="1"} {masterdetail/dblclick.i &PageNumber="1"} {masterdetail/cursorup.i &PageNumber="1"} {masterdetail/home.i &PageNumber="1"} {masterdetail/offhome.i &PageNumber="1"} {masterdetail/pageup.i &PageNumber="1"} 90
Override de eventos do browse no template MasterDetail e Zoom A customização pode ser implementada antes ou depois da execução das DPC s. Definitions &global-define VALUE-CHANGED1 yes ON VALUE-CHANGED OF brson1 IN FRAME fpage1 DO: {masterdetail/valuechanged.i &PageNumber="1"} END. 91
Recursos Avançados do thinfolder Lista de recursos avançados do ThinFolder: Método SetImage SetFolder GetCurrentFolder SetEnabled InsertFolder DeleteFolder Descrição Coloca uma imagem na aba do folder, em vez de um label Posiciona uma página do thinfolder Retorna a página corrente do Folder Permite habilitar/desabilitar uma página do thinfolder Inclui dinamicamente uma nova página no thinfolder Elimina dinamicamente uma página do thinfolder 92
Recursos Avançados do thinfolder Posicionando uma Página do Folder RUN SetFolder IN hfolder (INPUT 2). Considerações: hfolder : variável handle que representa o thinfolder. Primeiro parâmetro: identifica qual página a ser posicionada no Folder. 93
Recursos Avançados do thinfolder Retornando a Página Corrente do Folder RUN GetCurrentFolder IN hfolder (OUTPUT <VAR>). Considerações: hfolder : variável handle que representa o thinfolder. <VAR> : variável do tipo inteiro que recebe o valor referente a página corrente do folder. 94
Recursos Avançados do thinfolder Habilitando/Desabilitando Páginas RUN setenabled IN hfolder (INPUT 2, INPUT FALSE). RUN setenabled IN hfolder (INPUT 1, INPUT TRUE). Considerações: hfolder: variável handle que representa o thinfolder. Primeiro parâmetro: identifica a página a ser habilitada/desabilitada. Segundo parâmetro: indica se a página será habilitada (TRUE) ou desabilitada (FALSE). 95
Recursos Avançados do thinfolder Colocando uma Imagem na Aba de uma Página: RUN setimage IN hfolder (INPUT 1, INPUT image/im-pag1, INPUT image/ii-pag1 ). Considerações: hfolder: variável handle que representa o thinfolder. Primeiro parâmetro: identifica a página a ter a aba alterada para imagem. Segundo parâmetro: indica a imagem que será utilizada quando a página estiver selecionada. Terceiro parâmetro: indica a imagem que será utilizada quando a página não estiver selecionada. 96
Recursos Avançados do thinfolder Eliminando Dinamicamente uma Página RUN deletefolder IN hfolder (INPUT 3). Considerações: hfolder : variável handle que representa o thinfolder. Primeiro parâmetro: identifica a página a ser eliminada. 97
Recursos Avançados do thinfolder Incluindo Dinamicamente uma Página RUN insertfolder IN hfolder (INPUT?, INPUT FRAME fpage0:handle, INPUT FRAME fpagex:handle, INPUT "Pag. X"). 98
Recursos Avançados do thinfolder Considerações hfolder: variável handle que representa o thinfolder. Primeiro parâmetro: identifica a posição onde a nova página será incluída. Segundo parâmetro: handle identificando a frame pai (principal) do programa. Terceiro parâmetro: handle identificando a frame a ser colocada na página. 99
Recursos Avançados do thinfolder Para que esse recurso possa ser usado, o folder já deve ter sido inicializado anteriormente com páginas estáticas. PROCEDURE BeforeInitializeInterface : /*------------------------------------------------------- Purpose: Parameters: <none> Notes: -------------------------------------------------------*/ assign frame fpage1:box = no frame fpage3:box = no. END PROCEDURE. 100
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. 101