CENTURA TEAM DEVELOPER MÓDULO BÁSICO Versão 2.0
Centura Team Developer – Módulo Básico
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
pág 2
Centura Team Developer – Módulo Básico
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
pág 3
Centura Team Developer – Módulo Básico
Conteúdo 1. Histórico 2. Nosso Foco 3. O Ambiente de Desenvolvimento O Outline O Customizer A Paleta de Controles O Database Explorer O Assistente de Código Explorando os menus 4. A Linguagem SAL O Programa Fonte Os Comandos da Linguagem SAL Operadores Matemáticos Variáveis Os Tipos de Dados A Declaração de Variáveis As Variáveis do Sistema Os Vetores Constantes As Funções Os Objetos do Centura Menus Mensagens do Centura 5. Construindo uma Aplicação O Banco de Dados As Telas A tela de O MDI Principal Manutenção de Empresas Manutenção de Contatos 6. Dynalib Conceito Implementando Dynalibs 7. Geração do Executável 8. O Report Builder Fundamentos do Report Builder. Áreas do Report Builder O Editor de Fórmulas A Comunicação entre o Centura Builder e o Report Builder 9. Programação Orientada a Objetos. Conceito Implementando OOP no Centura. 10. Team Object Manager
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
pág 4
Centura Team Developer – Módulo Básico
pág 5
Marcas Registradas Todos os termos mencionados neste material são de propriedade dos seus respectivos fornecedores. Microsoft Windows95 e Microsoft SQL-Server são marcas registradas da Microsoft Corporation. SQLWindows, Centura Team Developer, Centura Builder, Report Builder, Team Object Manager, Dynalib e QuickObjects são marcas registradas da Centura Software Corporation. Oracle é marca registrada da Oracle Corporation. Informix é marca registrada da Informix Corporation. LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
Centura Team Developer – Módulo Básico
pág 6
1. Histórico Em 1988 a GUPTA apresentou a primeira versão do SQLWindows ao mercado destinado ao desenvolvimento de aplicações baseadas na arquitetura Cliente/Servidor para o ambiente Microsoft Windows. Uma linguagem fácil de usar e rica em recursos, foi o pioneiro na sua categoria. Em 1996 a Gupta Corporation ou por uma série de mudanças estruturais e ou a responder pelo nome Centura Software Corporation e a versão do SQLWindows para 16 bits evoluiu para o ambiente 32bits recebendo o nome de Centura Team Developer, ou simplesmente SQLWindows/32. Atualmente o Centura Team Developer está na sua versão 1.5, em outubro de 1998, chegou ao Brasil trazendo uma série de recursos importantes, ganhou novas ferramentas e uma série de melhorias que consolidam a ferramenta como um dos grandes ambientes de desenvolvimento de aplicações corporativas para o ambiente cliente/servidor e também para internet.
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
Centura Team Developer – Módulo Básico
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
pág 7
Centura Team Developer – Módulo Básico
pág 8
2. Nosso Objetivo Apresentar o Centura Team Developer ao desenvolvedor, explicar os conceitos da linguagem, mostrar os comandos e funções SAL, os objetos, apresentar o Report Builder, o Team Object Manager. Enfim, deu ma forma geral , deixar o desenvolvedor familiarizado com o ambiente, pronto para começar a desenvolver aplicações.
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
Centura Team Developer – Módulo Básico
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
pág 9
Centura Team Developer – Módulo Básico
pág 10
3. O Ambiente de Desenvolvimento 3.. O Ambiente de Desenvolvimento O Outline Customizer Paleta de Controles O Database Explorer Assistente de Código Explorando os menus O Ambiente de Desenvolvimento Apresentamos agora o ambiente de desenvolvimento do Centura Team Developer, onde o programador constrói a aplicação. No Centura Team Developer o ambiente de desenvolvimento é chamado de Centura Builder. No Centura Builder o programador define as telas da aplicação, os seus objetos, codifica a aplicação e define a estrutura do banco de dados.
Figura 3.1- O Ambiente de desenvolvimento, Centura Builder. Outline O Outline é o código fonte propriamente dito. É no Outline que ficam armazenadas as instruções da linguagem SAL. O Outline do Centura Builder é uma poderosa maneira de se organizar o código fonte pois cada item tem o seu lugar apropriado no Outline. Não sendo permitido a utilização de um objeto num local não apropriado para ele. A definição de variável tem seu local definido , a definição das funções , classes e todos os demais elementos que compõem o programa Centura.
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
Centura Team Developer – Módulo Básico
pág 11
À primeira vista, o Outline contém as seguintes sections principais : Libraries
Figura 3.2 – A seção Libraries. Nesta seção são definidas os nomes dos arquivos referentes as bibliotecas que o aplicativo fará uso. O Centura Builder diferencia o fonte através de cores para indicar o fonte incluído e o fonte normal. Estas cores podem ser configuradas pelo programador através do menu Tools / Preferences. As bibliotecas no Centura podem ser de dois tipos : Outros programas fontes em Centura. A partir do momento em que esta biblioteca é incluída todo o conteúdo deste arquivo a a estar ‘visível’ no arquivo ‘hospedeiro’. Todos os objetos, funções e até mesmo as bibliotecas que foram incluídas. Arquivos fonte Centura já compilados, as Dynalibs. No caso das Dynalibs apenas estarão disponíveis no arquivo ‘hospedeiro’ os objetos top level (janelas) e as funções globais. Uma das grandes vantagens na utilização das Dynalibs se dá no momento da compilação e na carga do programa, uma vez que a Dynalib já está compilada.
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
Centura Team Developer – Módulo Básico
pág 12
Global Declarations
Figura 3.3 – As seções subordinadas à Global Declarations. Na seção Global Declarations ficam todas as declarações que serão visualizadas por toda a aplicação. As seções subordinadas à Global Declarations são : Windows Defaults Aqui ficam todas as definições das características iniciais dos objetos visuais. Características como estilo, cor , tipo e tamanho da fonte e cor do fundo são definidas na seção Windows Defaults. Formats A definição dos formatos para os campos. Os formatos podem ser : Date/Time – formatos para campos de data e hora. Input – Define a forma como será feita a entrada dos dados. Number - formatos para campos numéricos. External Functions O Centura a a utilização de qualquer função definida por outro fornecedor de software. A definição dessas funções vindas de DLLs ou de outros programas executáveis é feita na seção External Functions. Funções escritas em outras linguagens e disponibilizadas em DLLs devem ser definidas conforme o exemplo abaixo, onde a função SWinFindWindow do próprio Centura é definida :
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
Centura Team Developer – Módulo Básico
pág 13
Figura 3.4 – A declaração de uma função externa. Observe que no Centura , o parâmetro Export Ordinal pode ser sempre 0 (zero). Na seção Returns deve ser definido o tipo do valor que a função retorna. Assim como na seção Parameters deve ser definido o tipo de cada um dos parâmetros que a função precisa para funcionar corretamente. Constants
Figura 3.5 – A declaração de algumas constantes. As constantes do programa devem ser definidas na seção Constants, e podem ser dos tipos de dados Boolean, Date/Time, Number e String. Utilize as seções System e para melhor istrar suas constantes. Resources Os recursos visuais da aplicação definidos nesta seção am a fazer parte do executável final gerado pelo Centura Builder. Ou seja, cursores, figuras tipo bitmap e ícones são incluídos no executável, facilitando a distribuição do aplicativo.
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
Centura Team Developer – Módulo Básico
pág 14
Variables
Figura 3.6 – A declaração de algumas variáveis. Na seção variables são definidas as variáveis que serão visíveis em toda a aplicação. As variáveis podem ser dos tipos de dado Boolean, Date/Time, File Handle, Long String, Number, Sql Handle, String, Window Handle e dos tipos definidos pelo programador. ( Para um estudo detalhado dos tipos de dados disponíveis no Centura consulte o capítulo 4 - A Linguagem SAL ) Internal Functions Funções internas são funções escritas na própria linguagem SAL. As funções definidas na seção Internal Functions são visíveis em todo o aplicativo, por todos os módulos (funções , objetos , classes etc). Posteriormente também é possível fazer a geração de DLLs das funções internas. Named Menus Named Menus são definições de estruturas de menus que serão posteriormente utilizados na aplicação. Os menus definidos na seção Named Menus são visíveis em todo o aplicativo. Podendo ser utilizado a qualquer momento por qualquer módulo da aplicação. Class Definitions Na seção Class Definitions são definidas todas as Classes Definidas pelo Usuário. Para cada objeto visual existe uma classe correspondente. Basicamente os tipos das classes disponíveis são : Background Text Class, Check Box Class, Child Table Class, Column Class, Combo Box Class, Custom Control Class, Data Field Class, Dialog Box Class, Form Window Class, Frame Class, Functional Class, General Window Class, Group Box Class, Horizontal Scroll Bar Class, Line Class, List Box Class, MDI Window Class, Multiline Field Class, Option Button Class, Picture Class, Pushbutton Class, radio Button Class, Table Window Class e Vertical Scroll Bar Class. Applications Actions Nesta seção são codificadas as ações mais genéricas para a aplicação. Por exemplo o início e término da aplicação e o tratamento de erros genéricos
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
Centura Team Developer – Módulo Básico
pág 15
Customizer
Figura 3.7 – O Customizer, de um form window e de uma child table. O Customizer é o componente que permite ao desenvolvedor visualizar e alterar todas as características dos objetos da aplicação. Cada objeto possui suas próprias características, algumas podem ser alteradas através do customizer. Características como o nome do objeto, seu título, cor, tipo e tamanho da fonte, informações sobre tipo de dado armazenado no objeto, máscara de formatação e de entrada de dados entre outras. É possível ter o ao customizer de duas formas : Através do Outline. Basta clicar uma vez com o botão esquerdo do mouse no ícone localizado à esquerda de cada um dos objetos. O objeto que não possuir este ícone não possui características íveis de alteração pelo Customizer. Através da Visualização dos Objetos. Estando em Preview Mode, basta clicar duas vezes sobre o objeto desejado para que o customizer seja mostrado. É importante observar que mesmo estando o programa sendo executado, Run-Time Mode, é possível visualizar as características dos objetos, obviamente, não é permitido alterar nenhuma característica em Run-Time.
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
Centura Team Developer – Módulo Básico
pág 16
Paleta de Controles
Figura 3.8 – Os Controles disponíveis do Centura Builder. Todos os objetos visuais do Centura Builder que estão disponíveis para que o desenvolvedor utilize nem sua aplicação, estão disponíveis na Paleta de Controles. Para acionar a Paleta de Controles pode-se pressionar juntas as teclas Alt 4. A Paleta de Controles é bastante flexível, permitindo ao desenvolvedor configurá-la da forma que for mais agradável, tornando o desenvolvimento extremamente confortável. Cada ícone mostrado na Paleta de Controles representa um tipo de objeto no Centura Builder. Quando um tipo de objeto é escolhido na Paleta de Controles, as diversas classes desse objeto são mostradas numa lista na própria Paleta de Controles. Então basta escolher uma das classes e clicar na janela de layout para que um objeto do tipo e classe escolhidos seja inserido na aplicação. Os tipos de objetos disponíveis na Paleta de Controles são : BackGround Text, Group Box, Frame, Line, Data Field, Multiline Field, Child Table Window, Column, Custom Control, Pushbutton, Radio Button, Check Box, Option Button, List Box, Combo Box, Graphic, Picture, Vertical e Horizontal ScrollBar, Objeto OLE 2.0 e QuickObjects.
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
Centura Team Developer – Módulo Básico
pág 17
O Database Explorer
Figura 3.9 – O Database Explorer. Através do próprio ambiente de desenvolvimento do Centura Builder é possível criar tabelas, visões e índices, fazer consultas e gerar relatórios sem que seja necessário nenhum conhecimento de SQL. Através da interface amigável do Database Explorer é possível realizar todas estas tarefas típicas de desenvolvimento de sistemas e ainda incluir , alterar e excluir dados nas tabelas. Assim como todas as ferramentas da Centura, o Database Explorer trabalha com todos os tipos de bancos de dados padrões de mercado de forma transparente. O Assistente de Código A principal função do Assistente de Código do Centura Builder é fazer com que o programador digite o mínimo possível durante o desenvolvimento da aplicação. Saber utilizar o Assistente de Código é de extrema importância para obter maior produtividade no desenvolvimento. O Assistente de Código é um form que é sempre mostrado por cima de todas as outras janelas do Centura Builder podendo ser posicionado em qualquer local da tela e ter suas dimensões alteradas. Para acioná-lo basta clicar Alt-2. O Assistente de Código é sensitivo à posição do cursor no outline, ou seja, dependendo do local onde o cursor estiver posicionado no outline o Assistente de Código mostra os possíveis valores que podem ser adicionados ao outline. Além disso o Assistente de Código agrupa as informações por categorias conforme mostrado na figura 3.10.
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
Centura Team Developer – Módulo Básico
pág 18
Figura 3.10 – O Assistente de Código O Assistente de Código classifica as informações que podem ser adicionadas ao outline podendo ser Comandos SAL, Mensagens, Funções SAL, Funções do Usuário, Funções do Objeto, Funções definidas em Objetos do Usuário, Variáveis, Variáveis do Sistema, Constantes, Nomes dos Objetos da Aplicação, Resources, Parâmetros e Classes Base. A grande utilidade do Assistente de Código é melhorar a produtividade no desenvolvimento evitando erros de digitação pois não há como escrever o nome de uma função errado, errar a quantidade e tipos de dados dos parâmetros, usar uma variável não definida ou não permitida naquele local uma vez que o programador não as escreve efetivamente, elas são mostradas no Assistente de Código e com um clique são automaticamente transportadas para o código fonte. Caso o programador precise fazer referencia a um determinado objeto não é necessário saber exatamente o seu nome, basta escolhê-lo no Assistente de Código. Explorando os menus
Figura 3.11 – O menu File. LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
Centura Team Developer – Módulo Básico
pág 19
O Menu File New – Inicia uma nova aplicação Centura, e aberto um modelo de aplicação inicial, vazio. Open – Permite abrir uma aplicação já existente. Save – Salva a aplicação com o nome atual. Save As – Salva a aplicação atual com um novo nome, solicitado numa caixa de diálogo. Page Setting – Permite o às configurações de impressão do Outline. Tipo e tamanho da fonte, títulos do cabeçalho e rodapé e margens. Print – Imprime o Outline de acordo com as configurações feitas no item anterior.
Figura 3.12 – O menu Edit. O Menu Edit Undo , Cut , Copy , Paste e Delete – De acordo com suas funções padrão do Windows95. Insert line – Insere uma linha no Outline a partir do local selecionado. Comment Items – Marca como comentário o item selecionado. Uncomment Itens – Tira a marca de comentário do item selecionado. Outline Expand One Level – Expande o outline um nível a partir do nível selecionado. Collapse - Comprime o outline um nível a partir do nível selecionado. Expand All Levels - Expande o outline inteiro. Isso pode demandar tempo. Collapse Outline - Comprime o outline inteiro. Promote – Promove o item selecionado um nível, na hierarquia do outline. Demote – Rebaixa o item selecionado um nível, na hierarquia do outline. Move Up – Move o item selecionado uma linha para cima no outline. Move Down – Move o item selecionado uma linha para baixo no outline. Find – Efetua busca no outline por um determinado texto. Find Again – Repete a última busca realizada no outline. Replace - Efetua busca no outline por um determinado texto, e substitui por outro texto configurado. Properties – Aciona o Customizer trazendo as propriedades do objeto selecionado.
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
Centura Team Developer – Módulo Básico
pág 20
Figura 3.13 – O menu Project. O Menu Project Check Out – Ativa o TOM para extrair algum componente do repositório. Check In – Ativa o TOM para incluir o componente atual no repositório. Compile – Compila a aplicação. Next Error – Visualiza o próximo erro de compilação. Previous Error – Visualiza o erro de compilação anterior. Execute – Executa a aplicação atual. Build Settings – Configura as propriedades de geração do executável, dynalib, dll etc. Build : newapp.exe – Efetivamente gera o executável, dynalib, dll etc.
Figura 3.14 – O menu Component. O Menu Component New - Adiciona ao outline um novo objeto DialogBox, FormWindow, MDI Window ou TableWindow. Wizards – Ativa os Assistentes do Centura. QuickObject Editor – Ativa o Editor de QuickObjects do Centura. Menu Editor – Ativa o Assistente de Definições de Menus. OLE Class Editor – Ativa o editor de classes OLE. Libraries Go To Item – Carrega numa nova janela do Centura a biblioteca selecionada. Show Item Information – Mostra o nome da biblioteca ao qual o fonte selecionado pertence Refresh – Atualiza as bibliotecas utilizadas na aplicação. Merge – Transforma todos as bibliotecas incluídas em um único programa fonte. View Large Icons – Mostra os componentes no formato de ícones grandes. Small Icons – Mostra os componentes no formato de ícones pequenos. List – Mostra os componentes no formato de lista. Details – Mostra os detalhes dos componentes.
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
Centura Team Developer – Módulo Básico
pág 21
Figura 3.15 – O menu Layout. O Menu Layout Preview Window – Mostra a janela como ela aparecerá em tempo de execução. Bring to Front – Traz para cima o item selecionado. Send to Back – Envia para baixo o item selecionado. Align to Grid – Alinha os objetos selecionados à grade. Align Edges – Opções para se configurar o alinhamento dos objetos visuais. Space Evenly – Opções para se configurar o espaço entre os objetos visuais. Make Same Size – Opções para se configurar o tamanho dos objetos visuais. Grid – Liga / Desliga a utilização da grade. Tab Order – Configura a ordem de tabulação dos objetos visuais. Show Sample Text – Mostra nos campos textos de exemplo para se ter idéia da aparência da aplicação final. Show Design Scroll Bars – Mostra as barras de scroll em tempo de design nas laterais dos forms. Show Hidden Windows – Mostra os objetos cofigurados para estarem invisíveis.
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
Centura Team Developer – Módulo Básico
pág 22
Figura 3.16 – O menu Debug. O Menu Debug Go – Executa a aplicação. Stop Debugging – Pára a execução da aplicação saindo do modo de execução. Break – Interrompe a execução da aplicação na linha que está sendo executada, e permite entrar em modo Debug. Step into – a por dentro na execução do próximo comando Step Over – a por fora na execução do próximo comando. Breakpoints Toggle – Ativa ou Desativa o breakpoint. Clear All – Limpa todos os breakpoints. Disable All – Desabilita todos os breakpoints configurados. Enable All – Habilita todos os breakpoints configurados. No Animate – Não mostra as linhas de código durante a execução. Slow Animate – Mostra as linhas de código durante a execução em modo lento. O Intervalo de segundos é configurado na caixa de diálogo Preferences. Fast Animate - Mostra as linhas de código durante a execução em modo rápido.
Figura 3.17 – O menu Database. O Menu Database Open Database Explorer – Executa o Database Explorer.
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
Centura Team Developer – Módulo Básico
pág 23
New – Permite a criação de nova Tabela, Índice, Store Procedure, Store Procedure Package e Banco de Dados SQL Script Table – Comandos para edição, manutenção, e filtro nos dados da tabela selecionada. Stored Procedure Query – Comandos para a criação de nova consulta ou abrir uma consulta já existente. Add to list – Adiciona um novo Banco de Dados à relação já existente. Disconnect – Desconecta do banco de dados. View System Tables – Visualiza as tabelas do sistema. (Catálogo) Close Database Explorer – Encerra a execução do Database Explorer.
Figura 3.18 – O menu Tools O Menu Tools Tools... – Configura as ferramentas mostradas no menu Tools. ToolBars... – Configura as barras de ferramentas mostradas no Centura Builder Preferences... – Ativa a janela de Propriedades do Centura Builder onde é possível configurar o path default, o intervalo de tempo utilizado no Debug Slow Animate, os valores para o Grid, os tipos e cores das fontes utilizadas no Centura Builder para representar comentários no programa fonte, itens incluídos. Output – Visualiza a janela de Output, nela são mostrados os erros e avisos ocorridos na compilação. Coding Assistant – Visualiza o Assistente de Código. Controls – Visualiza a Paleta de Controles. Variables – Em modo de Debug, mostra a janela de variáveis. Stack Messages Quick Watch Report Builder – Executa o gerador de relatórios Report Builder. Team Object Manager – Executa o gerenciador de projetos Team Object Manager. Browse All Classes – Executa o browser gráfico das classes. Diff / Merge Tool – Executa o aplicativo Diff/Merge que identifica diferenças entre dois fontes. SQLTalk – Executa o SQLTalk.
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
Centura Team Developer – Módulo Básico
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
pág 24
Centura Team Developer – Módulo Básico
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
pág 25
Centura Team Developer – Módulo Básico
pág 26
4. A Linguagem SAL 4.. A Linguagem SAL 1.. O Programa fonte 1.. APL, APP, APT, APD e APC 2.. Os Comandos da Linguagem SAL 3.. Operadores Matemáticos 4.. Variáveis 1.. Tipos de Dados 2.. Declaração de Variáveis 3.. Variáveis do Sistema 4.. Vetores 5.. Constantes 6.. As Funções 7.. Os Objetos do Centura 8.. Menus 9.. Mensagens do Centura A Linguagem SAL Toda a programação em Centura é feita através da linguagem SAL ( Scalable Application Language ), uma linguagem poderosa e de fácil entendimento. Um programa fonte em linguagem SAL é composto de comandos e funções SAL e comandos SQL. O Programa fonte Um programa Centura pode ter as seguintes extensões padrões : APL – Tipo de arquivo que identifica Bibliotecas, utilizado para armazenar rotinas genéricas. APP – Tipo de arquivo que identifica Aplicações em formato binário do Centura, um formato proprietário. Uma aplicação que esteja gravada neste formato só pode ser visualizada através do próprio Centura Builder. APT – Tipo de arquivo que identifica Aplicações em formato texto padrão. Uma aplicação que esteja gravada neste formato pode ser visualizada através do Centura Builder e também através de um editor de textos padrão TXT. Embora não é recomendado qualquer alteração no fonte através de uma interface diferente do Centura Builder. APD - Tipo de arquivo que identifica Aplicações compiladas em Dynalibs. Dynalibs são utilizadas para o compartilhamento de funções e variáveis globais, janelas top level e suas funções e janelas MDI e suas funções e objetos child. APC - Tipo de arquivo que identifica Aplicações compiladas com o Object Compiler. O resultado desta compilação é uma DLL com todas as funções internas. Essa DLL é padrão e pode ser utilizada por qualquer outra linguagem feita para o Windows95. Os Comandos da Linguagem SAL A linguagem SAL oferece aos desenvolvedores os comandos Break, Call, Else, If, Loop, Return, Select Case, Set, While. Que são explicados em detalhes abaixo. Break Este comando é utilizado para encerrar o processamento dos comandos Loop, While e Select Case. O fluxo de execução do programa é ado para o bloco de comandos imediatamente seguinte.
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
Centura Team Developer – Módulo Básico
pág 27
Call O comando Call é utilizado para chamar uma função. If Else Else If O comando If é usado para executar uma operação dependendo de alguma condição. Ele possui a seguinte sintaxe : If < expressão1 > ........... Else If < expressão2 > ........... Else ........... O Centura avalia a primeira expressão no If, se for obtido um valor TRUE ( Verdadeiro ) , então o código subordinado ao comando If é executado. Se a expressão retornar FALSE, então o Centura procura pelo próximo Else ou Else If se existirem. Else If é utilizado quando se faz necessário testar mais de uma condição. Se a expressão presente no Else If retornar TRUE, o Centura então executa o código subordinado ao comando Else If. Se a Expressão retornar FALSE o Centura continua a procurar por mais algum comando Else If, caso não encontre nenhum Else If e encontre um comando Else, o Centura então executa o código subordinado ao comando Else. Se não for encontrado nenhum comando Else, o Centura simplesmente continua a execução do programa. O Centura utiliza a hierarquia presente no Outline para determinar o bloco de comandos subordinados e que será executado. Isso elimina a necessidade de utilizar os delimitadores BEGIN ... END presentes em outras linguagens. Alguns exemplos : If nCodigo = 999 ............. Else If nCodigo = 888 ............ Else ............ Set sNome = “José” A utilização do operador de igualdade (=) não se faz obrigatória em alguns casos. Similar a linguagem C, ao ser avaliada uma expressão, e esta retornar um valor 0 (zero), o Centura interpreta como FALSE. Qualquer valor diferente de zero é interpretado pelo Centura como um valor TRUE. Observe o próximo exemplo: Set nValor = 3 If nValor [ este código é executado pois 3 é diferente de FALSE ] If nValor = TRUE [ este código não é executado pois 3 é diferente de TRUE ] No primeiro If o comando subordinado é executado pois nenhuma comparação direta com a constante TRUE é efetuada. No segundo If a comparação é feita, o código não é executado pois nValor é diferente de TRUE.
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
Centura Team Developer – Módulo Básico
pág 28
Obs : Podem ser feitas avaliações de variáveis sem a utilização de operadores, como no exemplo acima, apenas com variáveis ou expressões que retornem um tipo de dado Lógico. Ao deixar de utilizar o sinal de igualdade (=) em expressões ou variáveis que retornem outros tipos de dados, o entendimento do código ficará comprometido dificultando a sua leitura e depuração. Return O comando Return pode ser utilizado para finalizar o processamento de uma função ou mensagem e retornar um status para o ponto da aplicação de onde foi chamado. Return pode ser utilizado em qualquer ponto do código. Select Case O comando Select Case é outro comando de avaliação de condições em SAL. A estrutura If ... Else é normalmente utilizada quando existem dois possíveis resultados. Algumas vezes a estrutura If ... Else é utilizada para mais que dois resultados, mas o comando Select Case se mostra mais conveniente nesses casos. A sintaxe do comando Select Case é a seguinte : Select Case < expressão > Case < valor > .......... Break Case < valor > .......... Break Default .......... Break O tipo de dado retornado pela expressão avaliada pelo Select Case deve ser numérico inteiro. Não pode ser avaliado uma expressão de outro tipo de dado como data/hora , string ou número com decimais. O valor utilizado em cada comando Case deve ser um valor ou uma expressão numérica inteira. Quando for necessário avaliar expressões de algum tipo de dado diferente de número inteiro deve ser utilizado o comando If ... Else para isso. O Centura avalia a expressão inteira e localiza o primeiro Case que satisfaça a condição da expressão. Quando encontra, executa o código subordinado ao Case encontrado e continua a procurar por mais algum Case que satisfaça a condição. O código subordinado à cláusula Default é executado quando o Centura não encontra nenhum Case que satisfaça a condição. A cláusula Default não é obrigatória, mas quando utilizada deve ser a última do comando Select Case. O comando Break é usado para informar ao Centura que encerre a execução do bloco de comandos. Ao encontrar um Break num comando Case o Centura encerra a execução de todo o bloco do comando Case. Se um Break for omitido num bloco Case, o Centura irá continuar executando o conteúdo de todos os outros Cases que satisfaçam a condição, até o fim. A omissão do comando Break, quando utilizado corretamente, pode trazer benefícios, observe o exemplo: ! Considere que PERMISS_GERENTE , PERMISS_CONSULTA PERMISS_SUPERVISOR são constantes numéricas inteiras. LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
e
Centura Team Developer – Módulo Básico
pág 29
Select Case ( nPermissao ) Case PERMISS_CONSULTA Call SalMessageBox( "Consulta", "Case", MB_Ok ) Break Case PERMISS_GERENTE Case PERMISS_SUPERVISOR Call SalMessageBox( "Supervisor ou Gerente", "Case", MB_Ok ) Break Default Call SalMessageBox( "Desconhecido", "Case", MB_Ok ) Break Os comandos Case PERMISS_GERENTE e PERMISS_SUPERVISOR precisam executar o mesmo código. Aos invés de repetir todo o bloco de código para cada um, eles são colocados uma acima do outro. Já que não existe nenhum Break no Case PERMISS_GERENTE, a execução prossegue ao próximo Case e termina quando o Centura encontrar o Break subordinado ao Case PERMISS_SUPERVISOR. Set O comando Set é usado para associar um valor a algum objeto ou variável. O valor associado pode ser um valor ou uma expressão : Set < variavel / objeto > = < valor / expressão > Alguns exemplos : Set sNome = “José” Set nValor = nValor1 * nValor2 Set sCidadeEstado = sCidade || “ – “ || sEstado While e Loop Os comandos While e Loop são duas estruturas de laço do Centura While < expressão > ... Break Loop [ nome_loop ] ... Break [ nome_loop ] Todo o código subordinado ao comando While ou ao comando Loop são parte do laço. O While é um laço onde a condição é avaliada na entrada do laço, antes deste ser executado a primeira vez, a expressão precisa ser avaliada e deve ser TRUE ( diferente de zero ). O laço continua até que uma destes duas condições se satisfaçam : A expressão seja avaliada FALSE. Um comando Break seja encontrado. O Loop é um laço mais “flexível”, o código no laço é executado pelo menos uma vez e termina quando o Centura encontrar um comando Break. Caso o Centura não encontre um comando Break, o programa fatalmente irá travar, e um resultado não desejado poderá ocorrer. LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
Centura Team Developer – Módulo Básico
pág 30
Pode ser utilizado o comando Loop e While para montar laços “aninhados” ( nested loops ). Neste caso torna-se extremamente útil “nomear” os laços. Observe o código : Loop LoopExterno ......... If Condicao Break LoopExterno Loop LoopInterno ......... If Condicao Break LoopInterno Else If Condicao Break LoopExterno
Operadores Matemáticos O Centura a os operadores matemáticos que são padrão entre a maioria das linguagens, conforme a tabela abaixo : Operador + * / = != > < >= <= ** AND OR NOT & | ||
Descrição Adição Subtração Multiplicação Divisão Igualdade Não igual a Maior que Menor que Maior que ou Igual a Menor que ou Igual a Exponenciação AND lógico OR lógico Negação Bitwise AND Bitwise OR Concatenação
Variáveis Um tipo de dado refere-se ao tipo do dado que um campo ou uma variável pode armazenar. Isto é muito importante pois determina o montante de Memória de o Randômico ( RAM ) que será reservado para isso. O Centura a os tipos de dados definidos SQL de acordo como o padrão ANSI 92. Isto permite a compatibilidade com uma variedade de outros produtos, incluindo servidores de bancos de dados e outras ferramentas de desenvolvimento. Uma variável significa um local da memória que armazenará um determinado pedaço de informação. Algumas considerações sobre as variáveis devem ser observadas: O tipo de dado que LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
Centura Team Developer – Módulo Básico
pág 31
pode ser armazenado numa variável. O escopo da variável. Escopo refere-se a ibilidade que geralmente é Local ou Global. Uma variável Local é visível apenas na função, objeto, ou janela que a mesma foi definida. Uma variável normalmente não pode ser ada de fora do local definido. Uma variável local geralmente desaparece quando o objeto que a criou é fechado. Isto também libera a memória que havia sido ocupada. Uma variável global tem um alcance maior do que a variável local ( alcance em toda a aplicação e não apenas no form onde foi definida ) , mas há dois pontos fracos. O primeiro é que a memória ocupada pela variável não é liberada, mesmo se a variável não estiver sendo utilizada, enquanto a aplicação estiver sendo executada. O segundo é bem mais grave, uma variável global pode ser ada de qualquer local da aplicação e ter seu valor alterado sem controle. Tipos de Dados A tabela abaixo apresenta os tipos de dados ados pelo Centura. Tipo de dado Boolean Date/Time File Handle Long String Number SQL Handle String Window Handle
Descrição Deverá ser usado apenas quando for importante identificar um dos dois estados. ( on/off, yes/no, verdadeiro ou falso ) Um valor que inclui uma Data e a Hora em seu formato Usado para apontar para um arquivo. String maior que 254 bytes Um número Usado para apontar para um servidor de banco de dados. Uma string. Usado para apontar para uma instância de um objeto sendo executado.
A declaração das variáveis As variáveis são declaradas na seção Variables que é encontrada na Global Declarations, nas instâncias dos objetos Top Level, nas definições das classes dos Objetos e nas funções. A Centura Software Corporation sugere, em seu manual, que o desenvolvedor siga alguns padrões na definição das suas variáveis para facilitar a sua utilização e identificação. No código abaixo estão definidas uma variável para cada tipo de dado do Centura. Observe os prefixos utilizados em cada nome de variável: Window Variables Boolean: bOk Date/Time: dtDataAtual File Handle: fhConfig Long String: lsObs Number: nCodigo Sql Handle: hSqlConexao String: sDescricao Window Handle: hWndObjeto Obs : No Centura o tamanho máximo permitido para os nomes de variáveis é de 32 caracteres. É permitido o uso das letras, números e do sinal _ (underscore). No Centura os nomes das variáveis e dos objetos são case-sensitive. Portanto sNome é uma variável e sNOME é outra.
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
Centura Team Developer – Módulo Básico
pág 32
Variáveis do Sistema O Centura possui algumas variáveis internas, chamadas de variáveis do Sistema. São variáveis que não se faz necessário defini-las antes de utilizar. São variáveis especiais. A tabela abaixo apresenta algumas variáveis do sistema e suas descrições : Variáveis - MyValue - hWndForm - hWndItem - hWndMDI - hWndNull - wParam - lParam - nArgCount - strArgArray SqlDatabase - Sql Sql
Descrição O valor do objeto atual. O Window Handle do objeto TopLevel atual. O Window Handle do objeto atual. O Window Handle do objeto MDI atual. Eqüivale a um valor tipo Window Handle nulo. Parâmetro de mensagem Parâmetro de mensagem Conta quantos argumentos foram ados como parâmetro quando a aplicação inicia. Vetor com os argumentos ados por parâmetro na linha de comando para a aplicação. Indica o nome do banco de dados a ser utilizado. Indica o nome do usuário do banco de dados. Indica a senha do usuário do banco de dados.
Vetores O Centura a vetores multidimensionais de cada um dos seus tipos de dados nativos e dos tipos de dados definidos pelo usuário. Os vetores podem Ter suas dimensões predeterminadas na sua definição ou podem ser dinâmicos, tendo como limite a memória disponível. A sintaxe para a definição de um vetor é mostrada abaixo : Variables Boolean: abStatus [10] Number: anMeses [1:12] String: asNomes [*] O primeiro vetor declarado, abStatus, é um vetor que poderá armazenar apenas valores 1 (TRUE) ou 0 (FALSE). Poderá ter no máximo 10 elementos, entre 0 e 9. O segundo vetor declarado, anMeses, é um vetor que poderá armazenar qualquer valor numérico válido e poderá ter no máximo 12 elementos, entre 1 e 12. O terceiro vetor, asNomes, poderá armazenar apenas valores string válidos. Este vetor é dinâmico, portanto o seu número de elementos não tem limite. Constantes Constantes, assim como as variáveis, podem armazenar valores. A principal diferença é que constantes armazenam informações (como nome, salário) , e não ponteiros internos (como file handles ou window handles). As constantes devem ser definidas em tempo de programação, e não mudam seus valores. Constantes são declaradas no outline na seção chamada Constants que é uma seção subordinada a seção Global Declarations. Global Declarations Constants System String: NOME = "José de Almeida" LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
Centura Team Developer – Módulo Básico
pág 33
Date/Time: NASCIMENTO= 1970-11-02 Number: PERMISS_CONSULTA = 1 Number: PERMISS_SUPERVISOR = 2 Number: PERMISS_GERENTE = 3 As Funções O Centura apresenta um conjunto de funções que são embutidas à linguagem SAL. Estas funções realizam uma variedade enorme de tarefas que ajudam o desenvolvedor a construir poderosas aplicações. O Centura oferece algumas funções que são específicas do ambiente do Windows e outras funções que são específicas do próprio ambiente do Centura Team Developer. As funções SAL do Centura estão divididas em algumas macro categorias mostradas abaixo : Vetores Cores Depuração Drag-And-Drop Formatação e Validação Mensagens Impressão String Gerenciamento de Janelas
Números Datas Caixas de Diálogos Edição MDI Imagens Scroll Bar Sistema Combo Box e List Box
O Centura disponibiliza uma quantidade enorme de funções, por esse motivo, mostraremos a seguir apenas as funções utilizadas com maior freqüência. Poderíamos inclusive chamar esta relação de Funções Básicas do Centura. Um estudo mais profundo merece ser feito abrangendo as demais funções do Centura. SalColorSet ( ) SalFmtFormatDateTime ( ) SalListAdd ( ) SalListClear ( ) SalListPopulate ( ) SalListQueryCount ( ) SalListQuerySelection ( ) SalListQueryTextX ( ) SalClearField ( ) SalMessageBox ( ) SalWaitCursor ( ) SalCreateWindow ( ) SalDestroyWindow ( ) SalDisableWindow ( ) SalEnableWindow ( ) SalGetItemName ( )
SalStatusSetText ( ) SalNumberToStr ( ) SalDateCurrent ( ) SalDateDay ( ) SalDateMonth ( ) SalDateYear ( ) SalIsNull ( ) SalIsValidDateTime ( ) SalSendMsg ( ) SalSendMsgToChildren ( ) SalStrLeft ( ) SalStrLength ( ) SalStrMidX ( ) SalStrTrimX ( ) SalStrUpperX ( )
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
Centura Team Developer – Módulo Básico
pág 34
SalColorSet Esta função permite ao programa SAL alterar a cor de um objeto. Sintaxe: bOk = SalColorSet ( hWnd , nPonteiro , nCor ) Onde : hWnd é o handle do objeto que terá sua cor alterada. nPonteiro identifica que parte do objeto terá sua cor alterada. Use uma das contantes COLOR_Index* . nCor é o número da cor desejada. Use uma das constantes COLOR_*. Exemplo Call SalColorSet( hWndItem , COLOR_IndexWindowText , COLOR_Red ) SalFmtFormatDateTime Esta função é usada para formatar um campo do tipo DateTime. Sintaxe: strFormatada = SalFmtFormatDateTime ( dtData , sFormato ) Onde : dtData é o campo que terá seu formato alterado. sFormato contém a mascara de formatação a ser aplicada. Exemplo Set dtNovaData = SalFmtFormatDateTime ( dtData , ‘dd/MM/YYYY’ ) SalListAdd Esta função é usada para adicionar valores em combo box e list box. Utilizada na inicialização personalizada destes objetos. Sintaxe: nInserido = SalListAdd ( hWndLista , sTexto ) Onde : hWndLista é o handle ou o nome da lista. sTexto é o texto que será adicionado ao objeto. Exemplo Set nInserido = SalListAdd ( cmbEstado , ‘PE’ ) SalListClear Esta função é usada para limpar o conteúdo de um combo box ou list box. Sintaxe: bOk = SalListClear ( hWndLista ) Onde : hWndLista é o handle ou o nome da lista. Exemplo Set bOk = SalListClear ( cmbEstado ) SalListPopulate Esta função é usada para preencher um combo box ou list box com o resultado de um SELECT realizado numa tabela do banco de dados. Sintaxe: bOk = SalListPopulate ( hWndLista , hSqlHandle, sCmdSelect ) LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
Centura Team Developer – Módulo Básico
pág 35
Onde : hWndLista é o handle ou o nome da lista. hSqlHandle é o handle Sql de uma conexão com o banco de dados. sCmdSelect é o comando select. Exemplo Set bOk = SalListPopulate ( cmbEstado , hSql_1 , “Select UF From T_UF” ) SalListQueryCount Esta função é usada para contar o número de elementos num combo box ou list box. Sintaxe: nNumElementos = SalListQueryCount ( hWndLista ) Onde : hWndLista é o handle ou o nome da lista. Exemplo Set nNumElementos = SalListQueryCount ( cmbEstado ) SalListQuerySelection Esta função retorna o número do elemento atualmente selecionado num combo box ou list box. Sintaxe: nNumElemento = SalListQuerySelection ( hWndLista ) Onde : hWndLista é o handle ou o nome da lista. Exemplo Set nNumElemento = SalListQuerySelection ( cmbEstado ) SalListQueryTextX Esta função retorna o texto de um determinado elemento num combo box ou list box. Sintaxe: sTexto = SalListQueryTextX ( hWndLista , nNumElemento ) Onde : hWndLista é o handle ou o nome da lista. nNumElemento é o número do elemento que terá seu texto recuperado. Exemplo Set sTexto = SalListQueryTextX ( cmbEstado , 0 ) SalClearField Esta função é usada para limpar um objeto do tipo DataField, ComboBox, MultilineField. Sintaxe: bOk = SalClearField ( hWndObjeto ) Onde : hWndObjeto é o handle ou o nome do objeto. Exemplo Set bOk = SalClearField ( cmbEstado )
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
Centura Team Developer – Módulo Básico
pág 36
SalMessageBox Esta função é usada para mostrar uma caixa de diálogo ao usuário e espera por uma decisão do mesmo. Podendo ser configurado os botões que são mostrados ao usuário. Sintaxe: nEscolha = SalMessageBox ( sMsg , sTitulo , nFlags ) Onde : sMsg é a mensagem que aparecerá para o usuário na caixa de diálogo. sTitulo é o título da caixa de diálogo. nFlags é um valor numérico que determina o estilo da caixa de diálogo. Os estilos podem ser concatenados utilizando-se o operador “ | ”. O Centura possui algumas constantes que representam as possíveis combinações de estilos. ( MB_* ) Exemplo Set bOk = SalMessageBox ( “Confirma exclusão do registro?”, “Exclusão”, MB_YesNo ) SalWaitCursor Esta função é usada para ligar e desligar o indicador visual ‘Ocupado’ do Windows. Sintaxe: bOk = SalWaitCursor ( bFlag ) Onde : bFlag indica se deve ser ligado o cursor como Ocupado, ou se deve ser desligado. Exemplo Set bOk = SalWaitCursor ( TRUE ) SalCreateWindow Esta função é usada para criar uma instância de um objeto tipo top level ( MDI Window, Form Window e Table Window ) Sintaxe: hWnd = SalCreateWindow (NomeObj , hWndPai , Parametro1, Parametro2, ....... ) Onde : NomeObj é o nome dado pelo programador ao objeto que será criado. hWndPai é o handle do objeto Pai do objeto que será criado. Parametro1 Parametro2 ... são parâmetros opcionais que dependem das definições na seção Parameters do objeto que está sendo criado. Exemplo Call SalCreateWindow ( frmClientes , hWndMDI ) SalDestroyWindow Esta função é usada para fechar uma janela tipo top level. ( Form Window, MDI Window, Dialog Box e Table Window ) Fechar uma janela é o mesmo que encerrar sua instância na aplicação. Todos os recursos ocupados por esta janela são liberados. Sintaxe: bOk = SalDestroyWindow ( hWndObj ) Onde : hWndObj é o handle do objeto. Exemplo Call SalDestroyWindow ( hWndMDI ) LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
Centura Team Developer – Módulo Básico
pág 37
SalDisableWindow Esta função é usada para desabilitar um objeto. Desabilitar um objeto significa deixá-lo indisponível para utilização do usuário. Sintaxe: bOk = SalDisableWindow ( hWndObj ) Onde : hWndObj é o handle do objeto. Exemplo Call SalDisableWindow ( hWndItem) SalEnableWindow Esta função é usada para habilitar um objeto. Habilitar um objeto significa deixá-lo disponivel para utilização do usuário. Sintaxe: bOk = SalEnableWindow ( hWndObj ) Onde : hWndObj é o handle do objeto. Exemplo Call SalEnableWindow ( hWndItem) SalGetItemName Esta função é usada para obter o nome de um objeto. Sintaxe: bOk = SalGetItemName ( hWndObj , sNome ) Onde : hWndObj é o nome ou o handle do objeto. sNome é uma string que representa o nome do objeto Exemplo Call SalGetItemName ( hWndItem , sNome ) SalStatusSetText Esta função é usada para mostrar uma mensagem na barra de status de uma janela tipo top level. Sintaxe: bOk = SalStatusSetText ( hWndJanela , sMsgTexto ) Onde : hWndJanela é o nome ou o handle do top level. sMsgTexto é a mensagem a ser mostrada na barra de status. Exemplo Call SalStatusSetText ( hWndForm , “Sair do sistema.”) SalNumberToStr Esta função é usada para converter um número numa string. Sintaxe: nTam = SalNumberToStr ( nNumero , nDecimais , sNumero ) Onde : nNumero é o número a ser convertido. LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
Centura Team Developer – Módulo Básico nDecimais é a quantidade de casas decimais que o número final, depois de convertido, terá. sNumero é o número convertido em string. Exemplo Set nNumero = 123.04 Set nDecimais = 0 Set bOk = SalNumberToStr ( nNumero , nDecimais , sNumero ) ! sNumero = “123” SalDateCurrent Esta função retorna a data atual do computador Sintaxe: dtData = SalDateCurrent ( ) Exemplo Set dtData = SalDateCurrent ( ) SalDateDay Esta função extrai o dia da data ada como parâmetro. Sintaxe: nDia = SalDateDay ( dtData ) Onde : dtData é o nome do campo ou variável que possui um valor tipo Date/Time Exemplo Set nDia = SalDateDay (SalDateCurrent ( ) ) ! nDia = 1 SalDateMonth Esta função extrai o mês da data ada como parâmetro. Sintaxe: nMes = SalDateMonth ( dtData ) Onde : dtData é o nome do campo ou variável que possui um valor tipo Date/Time Exemplo Set nMes = SalDateMonth (SalDateCurrent ( ) ) ! nMes = 1 SalDateYear Esta função extrai o ano da data ada como parâmetro. Sintaxe: nAno = SalDateYear ( dtData ) Onde : dtData é o nome do campo ou variável que possui um valor tipo Date/Time Exemplo Set nAno = SalDateYear (SalDateCurrent ( ) ) ! nAno = 1999
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
pág 38
Centura Team Developer – Módulo Básico
pág 39
SalIsNull Esta função retorna TRUE quando o campo ado como parâmetro não contém nenhum valor, está nulo. Sintaxe: bOk = SalIsNull ( hWndField ) Onde : hWndField é o nome ou o handle do objeto. Exemplo Set bOk = SalIsNull ( dfNome ) SalIsValidDateTime Esta função é usada para validar se o valor de um campo corresponde a um valor Date/Time válido. Sintaxe: bOk = SalIsValidDateTime ( hWndObj ) Onde : hWndObj o nome ou o handle do campo. Exemplo Set bOk = SalIsValidDateTime ( dtDATA ) SalSendMsg Esta função é usada para enviar uma mensagem a um determinado objeto. Sintaxe: bOk = SalSendMsg (hWndObj , nMsg , nwParam , nlParam ) Onde : hWndObj é o handle ou o nome do objeto que receberá a mensagem. nMsg é a mensagem que será enviada. nwParam Parâmetro numérico nlParam Parâmetro numérico Exemplo Set bOk = SalSendMsg ( df1 , SAM_Create , 0 , 0 ) SalSendMsgToChildren Esta função é usada para enviar uma mensagem a todos os objetos subordinados a um toplevel. Sintaxe: bOk = SalSendMsgToChildren ( hWndTopLevel , nMsg , nwParam , nlParam ) Onde : hWndTopLevel é o handle ou o nome do objeto Top Level. nMsg é a mensagem que será enviada. nwParam Parâmetro numérico nlParam Parâmetro numérico Exemplo Set bOk = SalSendMsgToChildren ( hWndForm , SAM_Create , 0 , 0 ) SalStrLeft LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
Centura Team Developer – Módulo Básico
pág 40
Esta função é usada para extrair uma cadeia de caracteres de uma variável tipo string. A extração sempre começa da posição mais a esquerda da cadeia de caracteres. Sintaxe: nTam = SalStrLeft ( sOrigem, nTamanho, sDestino ) Onde : sOrigem é a variável que terá uma parte sua extraída. nTamanho é o número de caracteres a ser extraído a partir da posição 0 (zero). sDestino é a cadeia de caracteres que foi efetivamente extraída. Exemplo Set sOrigem = “Abcdefgh” Call SalStrLeft ( sOrigem , 5 , sDestino ) ! sDestino = “Abcde” SalStrLenght Esta função retorna o tamaho de uma string. Sintaxe: nTam = SalStrLenght ( sTexto ) Onde : sTexto é o texto que será avaliado. Exemplo Set sTexto = “Abcd” Set nTam = SalStrLenght ( sTexto ) ! nTam = 4 SalStrMidX Esta função retorna um pedaço de uma string. A partir da posição nInicio, nTam letras. Sintaxe: sDestino = SalStrMidX ( sOrigem , nInicio , nTam ) Onde : sOrigem contém o texto inteiro. nInicio indica a posição inicial a ser recortada. nTam é o número de letras a ser recortado da string. Exemplo Set sOrigem = “AaBbCcDdEeF” Set sDestino = SalStrMidX ( sOrigem , 2 , 4 ) ! sDestino = “BbCc” SalStrTrimX Esta função é usada para eliminar os espaços múltiplos e espaços em branco do início e fim de uma string. Sintaxe: sDestino = SalStrTrimX ( sOrigem ) Onde : sOrigem contém o valor string que terá os espaços eliminados. Exemplo Set sOrigem = “ a b c def “ Set sDestino = SalStrTrimX ( sOrigem ) LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
Centura Team Developer – Módulo Básico
pág 41
! sDestino = “a b c d e f” SalStrUpperX Esta função é usada para converter todas as letras adas por parâmetro em suas equivalentes maiúsculas. Sintaxe: sTextoMaiuscula = SalStrUpperX ( sTextoNormal ) Onde : sTextoNormal é o texto que será convertido para letras maiúsculas. Exemplo Set sTextoMaiuscula = SalStrUpperX ( “Roberto Carlos” ) Funções VisualToolchest Além destas funções que são “nativas” do Centura, acompanha o pacote do produto uma biblioteca chamada Visual Toolchest que contém outro conjunto de funções extremamente úteis, aproximadamente 150 funções. As funções da biblioteca Visual Toolchest são normalmente chamadas de “funções Vis”, pelo seu prefixo. Observe a tabela abaixo onde são mostradas as categoria das “funções Vis” : Funções para tratamento de vetores Funções para depuração Funções para tratamento de arquivos DOS Funções para gerenciamento de arquivos Funções para gerenciamento de Fontes Funções para tratamento de ListBoxes Funções para tratamento de Menus Funções para Caixas de Mensagens Funções Genéricas Funções Numéricas Funções para tratamento de imagens Funções para tratamento dos arquivos INI do Windows Funções para tratamento de cadeia de caracteres Funções para serem usadas junto ao objeto Table Window Funções de Janelas em geral. Os Objetos do Centura O Centura dispões de um conjunto de objetos básicos que são normalmente suficientes para a implementação das soluções necessárias aos desenvolvedores no seu dia-a-dia. Estes objetos são todos apresentados ao desenvolvedor na Paleta de Controles, que iremos analisar em detalhes agora. Os objetos do Centura são os elementos utilizados para a criação da interface com o usuário. Estes elementos dividem-se em três tipos :
Window Objects Background Itens Menus
Personalizável Sim Sim Não
Codificável Sim Não Sim
Recebe / Envia Mensagens Sim Não Não / Sim
Os Windows Objects são todos os elementos gráficos que podem enviar e receber mensagens, na realidade são os objetos que interferem no fluxo da aplicação. Estes objetos têm alguma função LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
Centura Team Developer – Módulo Básico
pág 42
lógica no programa. Estes objetos possuem algum código associado a eles. No Centura estes objetos possuem uma identificação única na aplicação, a esta identificação damos o nome de handles. Os Window Objects podem ser TopLevel Window – São os MDI Window , Form Window , Dialog Box e Table Window. Child Window – São os outros objetos que são estão sempre subordinados a algum objeto TopLevel. Jamais um objeto Child existirá sem que exista um objeto Top Level.
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
Centura Team Developer – Módulo Básico
pág 43
Vamos agora analisar detalhadamente cada um dos objetos do Centura. MDI Window
Um objeto MDI é o único que pode conter outros objetos Top Level no seu interior. Normalmente é usado para gerenciar várias janelas abertas simultaneamente. Ou seja, o MDI controla várias outras janelas abertas podendo distribuir mensagens entre estas janelas. Quando um MDI é encerrado, automaticamente todas as suas janelas filhas são encerradas também. Objetos tipo MDI são normalmente utilizados para servirem de “menu principal” das aplicações que requerem muitas janelas abertas simultaneamente.
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
Centura Team Developer – Módulo Básico
pág 44
Form Window
Um objeto Form Window geralmente é criado como filho de algum MDI, podendo trocar informações com outros forms. É normalmente utilizado para a entrada de dados, consultas e visualização de relatórios. Um Form Window pode ser maximizado, minimizado e ter seu tamanho alterado pelo usuário em tempo de execução. Pode também apresentar uma barra de ferramentas em qualquer um dos seus lados, e uma barra de status. Obs : Quando um Form Window é criado como filho de um MDI a sua barra de status não é visualizada no Form Window mas sim no MDI Window. Este é um comportamento padrão do Windows, não requerendo nenhum esforço de programação do desenvolvedor.
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
Centura Team Developer – Módulo Básico
pág 45
Dialog Box
Os Dialog Box não possuem a característica de ser filho de algum outro objeto. Sempre é mostrado por cima das demais janelas, e estando ativo um Dialog Box nenhum elemento de outra janela pode ser acionado. O Dialog Box não pode ser minimizado, maximizado e ter seu tamanho alterado em tempo de execução. Também possuem barras de ferramentas e barra de status. Obs : Já que os Dialog Box não são filhos de nenhum objeto, o comportamento da barra de status não é similar ao comportamento encontrado no Form Window, a sua barra de status é visualizada no próprio Dialog Box. Este também é um comportamento padrão do Windows, não requerendo nenhum esforço de programação do desenvolvedor.
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
Centura Team Developer – Módulo Básico
pág 46
Table Window
A Table Window é bastante semelhante ao Form Window. Basicamente duas características a diferenciam do Form Window : A Table Window possui no seu interior um objeto tipo Child Table, não sendo permitido a utilização de nenhum outro objeto no seu interior. Este objeto Child Table no interior do form é automaticamente ajustado quando o Form tem seu tamanho alterado, não sendo necessário nenhum esforço de programação para isso.
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
Centura Team Developer – Módulo Básico
pág 47
Agora analisaremos os objetos tipo Child dispostos na Paleta de Controles. Background Text – normalmente utilizado quando se é necessário identificar alguns campos na tela. Não pode ser programado, ou seja, não responde a nenhuma ação do usuário, clicks, edição etc. Este objeto não possui Message Actions.
Group Box – Usado para agrupar informações logicamente relacionadas. Não pode ser programado, ou seja, não responde a nenhuma ação do usuário, clicks, edição etc. Este objeto não possui Message Actions.
Frame – Utilizado para fazer molduras. Não pode ser programado, ou seja, não responde a nenhuma ação do usuário, clicks, edição etc. Este objeto não possui Message Actions.
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
Centura Team Developer – Módulo Básico
pág 48
Line – Utilizado para fazer linhas. Não pode ser programado, ou seja, não responde a nenhuma ação do usuário, clicks, edição etc. Este objeto não possui Message Actions.
Data Field – É um dos objetos que podem ser utilizados para a digitação e visualização de informações na tela. Um datafield pode receber informações tipo Number, Date/Time, String e Long String.
Multiline Field – Normalmente é utilizado para a digitação e visualização de campos de texto longos, cartas, observações, arquivos texto logs de erro etc.
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
Centura Team Developer – Módulo Básico
pág 49
Child Table – executa todas as operações e herda todas as características do objeto TopLevel Table Window exceto a possibilidade de Ter suas dimensões alteradas pelo usuário em temo de execução. Numa Table Window é possível carregar dados do banco de dados e então permitir que o usuário os edite nas próprias células. É um objeto proprietário da Centura para edição de dados em forma tabular. Column – Cada coluna do banco de dados é mostrada numa table window num objeto Column. Pode ser customizada pelo usuário em tempo de execução tendo sua largura alterada. Pode mostrar informações tipo string, date/time, number e long string.
Custom Control – É utilizado para que objetos de terceiros possam ser utilizados no Centura. Pushbutton – É utilizado normalmente para se ativar alguma ação no sistema, são os botões de comando.
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
Centura Team Developer – Módulo Básico
pág 50
Radio Button – São normalmente agrupados em GroupBoxes e utilizados para que o usuário escolha uma opção única, quando não é permitido múltipla escolha.
Check Box – Diferentemente dos Radio Buttons, os Check Boxes permitem múltiplas escolhas.
Option Button – Possui um comportamento parecido com o do PushButton porém o controle da aparência up e down do option button é feia pelo programador. Extremamente útil quando a tarefa não pode ser acionada novamente. Este objeto é amplamente usando em barras de ferramentas.
List Box – Normalmente os ListBoxes são utilizados para mostrar uma lista de dados que geralmente vem do banco de dados. Permite também a seleção de vários elementos da lista.
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
Centura Team Developer – Módulo Básico
pág 51
Combo Box – Normalmente os ListBoxes são utilizados para mostrar uma lista de dados que geralmente vem do banco de dados. Difere do ListBox no visual, pois ocupa o espaço de um datafield e permite apenas a seleção de um elemento.
Graph – O objeto para montagem de gráficos dos mais diversos tipos como barras, pizzas, linhas blocos etc. Todos com efeitos 2D e 3D. Pode ser personalizado em tempo de execução.
Picture – Normalmente utilizado para apresentar imagens gráficas, ícones figuras. Horizontal Scroll Bar – Utilizado para fazer rolagem horizontal de algo que precise de mais espaço para ser visualizado, como uma figura. Também utilizado para incrementar/decrementar contadores.
Vertical Scroll Bar – Utilizado para fazer rolagem vertical de algo que precise de mais espaço para ser visualizado, como uma figura. Também utilizado para incrementar/decrementar contadores.
OLE2.0 – É a interface do Centura para que o programador incorpore ao seu aplicativo objetos utilizando a tecnologia OLE 2.0.
Quick Object – Permite que o programador escolha alguns dos QuickObjects disponíveis no ambiente. Menus Os menus são de grande utilidade num aplicativo, é através deles que o usuário “chama” por uma determinada janela. Os menus não podem receber mensagens, podem apenas disparar mensagens. O Centura oferece ao desenvolvedor dos seguintes tipos de menus : Menu Item – é cada opção de um menu. Menu Row – é a linha utilizada para separar um Menu Item do outro. Não tem ação associada se acionado. Popup Menu – é na verdade um outro menu, formado de outros Popup Menus ou de Menu Itens.
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
Centura Team Developer – Módulo Básico
pág 52
Windows Menu – é um tipo de menu que automaticamente mostra os nomes das janelas que estão abertas e que sejam filhas da janela em que o menu está localizado. Tornando fácil a mudança de uma janela para outra.
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
Centura Team Developer – Módulo Básico
pág 53
Mensagens do Centura Sinais que desencadeiam os procedimentos em objetos do SQLWindows, sinais esses emitidos com a ocorrência de eventos. A pressão de um push button pelo usuário, por exemplo é um evento. Quando um evento para o qual o Centura está preparado para receber ocorre ele envia a mensagem associada a esse evento para a seção Message Actions do objeto que sofreu o evento. No caso de um push button, a mensagem de click (SAM_Click) é enviada. Caso o programador tenha codificado alguma ação para ser executada ao receber esta mensagem, esse código é então executado. Parâmetros em Mensagens : wParam e lParam wParam e lParam são como parâmetros de uma função e são utilizados pelas mensagens para armazenar informações. wParam é uma variável tipo word e lParam tipo longword. Quando o usuário faz um click com o mouse num objeto tipo picture, é enviado ao objeto uma mensagem de click onde wParam e lParam contêm as coordenadas x e y da posição da picture que recebeu o click. O Centura está preparado para receber uma série de mensagens dependendo do evento que ocorrer. Estas mensagens são chamadas Mensagens do Sistema e estão listadas abaixo junto a uma breve descrição: SAM_AnyEdit SAM_AppExit
SAM_AppStartup
SAM_CacheFull SAM_CaptionDoubleClick SAM_Click SAM_Close SAM_ColumnSelectClick SAM_CornerClick SAM_CornerDoubleClick
É enviada aos datafields, combobox, columns e multiline field quando o usuário modifica o valor de um objeto. O objeto processa SAM_AnyEdit a cada tecla pressionada. É enviada para a aplicação depois que todas as janelas forem fechadas. Quando o usuário encerra a execução da aplicação, todos os objetos são fechados. Então SAM_AppExit é enviada para a aplicação. É enviada para a aplicação antes que qualquer janela seja criada, mesmo as que estiverem com o flag de criação automática ligado. Esta é a primeira mensagem que a aplicação recebe, e é enviada apenas para o Applications Actions da aplicação. É enviada a uma table window quando o Centura precisa trazer mais dados para a tabela mas o cache da tabela encontra-se cheio. É enviada a uma table window e a uma coluna da table window quando o usuário dá um clique-duplo no título de uma coluna. De uma maneira geral SAM_Click é enviada para a aplicação para avisar que o usuário pressionou o botão do mouse uma vez. É enviada para os objetos TopLevel quando o usuário dá um double-click no ícone do menu do sistema ou quando o usuário aciona no menu do sistema a opção “Fechar”. É enviada para table window e column quando o usuário seleciona ou deseleciona uma coluna clicando nu seu título. É enviada a uma table window e column quando o usuário clica no header de uma linha. O header de uma linha é a coluna nãoeditável localizada a esquerda da table window. É enviada a uma table window e column quando o usuário dá um double-click no header de uma linha.
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
Centura Team Developer – Módulo Básico SAM_Create SAM_DDE_ClientExecute SAM_DDE_ClientRequest SAM_DDE_DataChange SAM_Destroy SAM_DoubleClick SAM_DragCanAutoStart SAM_DragDrop SAM_DragEnd SAM_DragEnter
SAM_DragExit
SAM_DragMove
SAM_DragNotify SAM_DragStart SAM_DropDown SAM_DropFiles
SAM_EndCellTab SAM_FetchDone
pág 54
É enviada aos objetos top-level (dialog box, form window, ou table window) e depois para todos os objetos subordinados após serem criados, mas antes de estarem visíveis. É enviada para todos os objetos da aplicação servidora. É enviada para todos os objetos da aplicação servidora como resultado de uma requisição de atualização vinda de uma aplicação cliente. É enviada para todos os objetos de uma aplicação cliente DDE. Quando a aplicação servidora envia dados para a aplicação cliente. É enviada para os objetos top-level (dialog box, form window, e table window) e para todos os seus filhos exatamente antes dos objetos serem “destruídos”. É enviada para os combo box, list box, picture, table window, ou para a coluna quando o usuário dá um double-click num destes objetos. É enviada para os top-level window, child table window, data field, multiline field, list box, combo box, e picture, para saber se o objeto pode entrar em modo automático de dragging. É enviada aos top-level window, child table window, data field, multiline field, list box, combo box, e picture quando o usuário arrasta o mouse por cima de algum objeto destino. É enviada aos top-level window, child table window, data field, multiline field, list box, combo box, e picture, para indicar que o modo drag foi encerrado. É enviada aos top-level window, child table window, data field, multiline field, list box, combo box, e picture, para indicar que o mouse foi movido para dentro de algum objeto com o modo drag ativado. É enviada aos top-level window, child table window, data field, multiline field, list box, combo box, e picture, para indicar que o mouse foi movido para fora de algum objeto com o modo drag ativado. É enviada aos top-level window, child table window, data field, multiline field, list box, combo box, e picture, para indicar que o mouse foi movido dentro de algum objeto com o modo drag ativado. É enviada aos top-level window, child table window, data field, multiline field, list box, combo box, e picture, para indicar que a ação do mouse ocorreu enquanto estava em modo drag. É enviada aos top-level window, child table window, data field, multiline field, list box, combo box, e picture, para indicar que o modo drag foi iniciado. É enviada ao combo box antes da parte list box do combo box ser mostrada. É enviada aos objetos column, data field, multiline field, list box, combo box, picture, e custom control. O Centura envia esta mensagem apenas para os objetos que estiverem com o modo drag=on. E é enviada quando o usuário tenta soltar um ou mais arquivos do Explorer para dentro do objeto. É enviada para uma table window quando o usuário tenta ir além da última coluna editável pressionando a tecla tab. É enviada para uma table window quando a função SalTblPopulate, usando o valor TBL_FillAllBackground no seu
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
Centura Team Developer – Módulo Básico
SAM_FetchRow SAM_FieldEdit
SAM_Help SAM_KillFocus
SAM_Print SAM_ReportFetchInit SAM_ReportFetchNext
SAM_ReportFinish SAM_ReportNotify
SAM_ReportStart
SAM_RowHeaderClick SAM_RowHeaderDoubleClick SAM_RowValidate SAM_ScrollBar SAM_SetFocus SAM_SqlError SAM_Timer SAM_Validate
pág 55
último parâmetro, completa a carga de todas as linhas de dados. É enviada para uma table window todas as vezes que o Centura precisa copiar uma linha do cache para a table window. É enviada para um combo box, data field, multiline text field, table window, ou table window column quando o usuário modificar o valor do objeto e tentar mudar o foco para outro objeto. É enviada para qualquer objeto top level window e para um MDI quando o usuário pressiona a tecla de função F1. É enviada para uma table window, data field, multiline field, pushbutton, radio button, check box, option button, combo box, list box, column, e scroll bar quando o usuário sai do objeto, quando move o foco do objeto para algum outro objeto. É enviada para o form window, data field, multiline text field, combo box, ou push button enquanto o objeto estiver sendo impresso. É enviada para o objeto top-level ou MDI que iniciou um relatório. Isto ocorre quando o Report Builder está pronto para formatar a primeira página do relatório. É enviada para o objeto top-level ou para o MDI que iniciou o relatório. Esta mensagem é enviada após a mensagem SAM_ReportFetchInit para indicar que o Report Builder está pronto para receber da aplicação a próxima linha de dados. É enviada para o objeto top-level que iniciou o relatório. Esta mensagem é enviada quando o relatório terminar. É enviada para o objeto top-level ou para o MDI que iniciou o relatório. Quando cada bloco do relatório é formatado e impresso no buffer da página o Report Builder envia para a aplicação esta mensagem informando a posição em que se encontra no relatório. É enviada para o objeto top-level ou para o MDI que iniciou o relatório logo após a aplicação chamar o relatório com as funções SalReportView ou SalReportPrint, para indicar que o relatório está começando. É enviada para a table window quando o usuário clica no header da linha. É enviada para a table window quando o usuário dá um doubleclick no header da linha. É enviada para a table window antes do foco da linha mudar, isso permite que a linha seja validada. É enviada para a barra de scroll horizontal ou vertical quando o usuário move a barra usando o mouse ou as teclas de atalho. É enviada para o check box, combo box, data field, list box, multiline text field, push button, radio button, scroll bar, ou table window column quando recebem o foco. É enviada para a seção Application Actions do outline quando um comando SQL falha. É enviada para a seção Application Actions, aos top-level window e seus filhos a cada n milisegundos, conforme especificado em SalTimerSet. É enviada aos data field, multiline field, combo box, e column quando o usuário modificar o valor do objeto e tentar mover o foco para fora do objeto.
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
Centura Team Developer – Módulo Básico
pág 56
Obs : Consulte o manual do Centura Team Developer para obter informações mais detalhadas sobre as mensagens aqui mostradas. O programador deve basear-se na mensagem SAM_ para criar suas próprias mensagens. Assim : Constants Number: PAM_Habilita = SAM_ + 1 Number: PAM_Limpa = SAM_ + 2 É possível também utilizar as mensagens do Windows em aplicações Centura. Para isso basta definir cada mensagem na seção Constants conforme mostrado abaixo : Constants System Number: WM_MOUSEMOVE = 0x0200
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
Centura Team Developer – Módulo Básico
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
pág 57
Centura Team Developer – Módulo Básico
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
pág 58
Centura Team Developer – Módulo Básico
pág 59
5. Construindo uma aplicação 5.. Construindo uma Aplicação 1.. O Banco de Dados 2.. O Sistema 3.. Programando o Módulo Principal 4.. Módulos Adicionais O Banco de Dados Vamos utilizar o banco de dados de exemplos que acompanha o próprio Centura Team Developer, na base de dados ISLAND. Então serão criados os menus do mdi principal, as janelas de manutenção das tabelas e alguns relatórios. Obs : Como a nossa intenção neste momento é obter conhecimento dos recursos básicos da linguagem Centura, nos exemplos a seguir procuraremos sempre implementar o código de modo extremamente simples. Sem a utilização dos recursos avançados da linguagem. As Tabelas
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
Centura Team Developer – Módulo Básico
pág 60
O do Sistema.
Esta tela possui o seguinte comportamento : Assim que o usuário executa o sistema, esta janela de aparece e solicita a digitação do nome do usuário e da senha. Sem estas informações o sistema não pode ser acionado. Caso o usuário não digite corretamente uma senha e um nome de usuário válidos o sistema emitirá uma mensagem de erro. Permanece na janela de até que o usuário informe corretamente um usuário e senha e clique no botão Ok, ou que desista e clique no botão Cancelar. Observe abaixo, o código completo da caixa de diálogo dlg. Dialog Box: dlg Title: ao Sistema Description: Tool Bar Contents Background Text: Nome Data Field: dfNome Background Text: Senha Data Field: dfSenha Format: Invisible Pushbutton: pbOK Title: &Ok Message Actions On SAM_Click Set SqlDatabase = "ISLAND" Set Sql = dfNome Set Sql = dfSenha When SqlError Call SalMessageBox( "Verifique o nomedo usuário e a senha", "Erro no ", MB_Ok ) Return FALSE If SqlConnect( hSql ) Set prhSql = hSql Call SalEndDialog( hWndForm , TRUE ) Pushbutton: pbCancelar Keyboard Accelerator: Esc Message Actions On SAM_Click Call SalEndDialog( hWndForm , FALSE ) Functions Window Parameters Receive Sql Handle: prhSql Window Variables Sql Handle: hSql Message Actions
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
Centura Team Developer – Módulo Básico
pág 61
O Menu Principal. O Menu Principal é a janela de onde todas as funções do sistema são acionadas. Usaremos uma janela tipo MDI Window que é apropriada para esta função.
Esta tela possui o seguinte comportamento : Somente após o sucesso no o mdiPrincipal deverá ser mostrado. Em seguida todos os menus devem ser disponibilizados para o usuário. Assim que o usuário escolher uma função num dos menus, a janela correspondente deve ser acionada. Observe abaixo, o código completo do mdiPrincipal. MDI Window: mdiPrincipal Description: Named Menus Menu Popup Menu: Cadastros Menu Item: Empresas Status Text: Ativa a tela de manutenção de Empresas. Menu Settings Enabled when: NOT SalFindWindow ( hWndMDI , "frmEmpresa" ) Menu Actions Call SalCreateWindow( frmEmpresa, hWndMDI ) Menu Item: Contatos Status Text: Ativa a tela de manutenção de Contatos. Menu Settings Enabled when: NOT SalFindWindow ( hWndMDI , "frmContato" ) Menu Actions Call SalCreateWindow( frmContato, hWndMDI ) Menu Separator Menu Item: Faturas Status Text: Ativa a tela de manutenção de Faturas. Menu Settings Enabled when: NOT SalFindWindow ( hWndMDI , "frmFaturas" ) Menu Actions Call SalCreateWindow( frmFaturas , hWndMDI ) Menu Separator Menu Item: Sair
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
Centura Team Developer – Módulo Básico Status Text: Sair do sistema. Menu Actions Call SalSendMsg( hWndMDI , SAM_Close , wParam ,lParam ) Tool Bar Contents Functions Window Parameters Window Variables Message Actions
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
pág 62
Centura Team Developer – Módulo Básico
pág 63
O Form de manutenção na tabela de empresas Esta tela de manutenção basicamente realiza as funções de consultar, imprimir, incluir, alterar e excluir informações da tabela de empresa. De uma forma simples e rápida procuraremos mostrar como é possível fazer isso utilizando a linguagem SAL. Um conhecimento básico de linguagem padrão SQL é necessário agora.
Esta tela possui o seguinte comportamento : Inicialmente o usuário pode realizar uma consulta, caso saiba o código da empresa a ser consultada basta digitar este código no campo “Código” e então clicar no botão “Procurar”. Feito isso os dados da empresa serão mostrados na tela. Utilizando os botões da barra de ferramentas o usuário pode visualizar o primeiro registro com muita facilidade, basta clicar no botão identificado pelo símbolo “|<”. Para ver o último registro basta clicar no botão com o símbolo “>|”. Dessa forma fica bastante flexível a navegação através de todos os registros da tabela. Nesse momento o usuário pode alterar os campos que julgar necessário e então clicar no botão “Gravar”. Da mesma forma é possível incluir uma nova empresa, o usuário preenche os campos e aciona o botão “Gravar”. O Botão “Gravar” distingue o momento correto de executar uma inclusão de uma alteração. Para excluir uma empresa basta fazer uma consulta, localizar a empresa desejada e clicar no botão “Excluir”. A impressão do relatório não nenhum relacionamento com os dados que estiverem sendo mostrados no momento. O relatório é impresso sempre com todas as empresas existentes no cadastro. Observe abaixo, o código fonte completo desta tela : Form Window: frmEmpresa ries Enabled? Yes Display Settings Automatically Created at Runtime? No Tool Bar Contents Pushbutton: pbPRIMEIRO Message Actions On SAM_Click If nTotalLinhas < 2 Call SalMessageBox( MSG_ErrNAV , "Err", MB_Ok )
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
Centura Team Developer – Módulo Básico Else Call SqlFetchRow( hSqlEmpresa , 0, lParam ) Pushbutton: pbANTERIOR Message Actions On SAM_Click If nTotalLinhas < 2 Call SalMessageBox( MSG_ErrNAV , "Err", MB_Ok ) Else Call SqlFetchPrevious( hSqlEmpresa , lParam ) Pushbutton: pbPROXIMO Message Actions On SAM_Click If nTotalLinhas < 2 Call SalMessageBox( MSG_ErrNAV , "Err", MB_Ok ) Else Call SqlFetchNext( hSqlEmpresa , lParam ) Pushbutton: pbULTIMO Message Actions On SAM_Click If nTotalLinhas < 2 Call SalMessageBox( MSG_ErrNAV , "Err", MB_Ok ) Else Call SqlFetchRow( hSqlEmpresa , nTotalLinhas-1, lParam ) Contents Background Text: Código Data Field: dfCOMPANY_ID Data Maximum Data Length: 3 Data Type: Number Message Actions On PAM_Limpa Call SalClearField( hWndItem ) Call SalEnableWindow( hWndItem ) Background Text: Nome Data Field: dfCOMPANY_NAME Data Maximum Data Length: 30 Data Type: String Message Actions On PAM_Limpa Call SalClearField( hWndItem ) Background Text: Endereço Data Field: dfADDRESS Data Maximum Data Length: 50 Data Type: String Message Actions On PAM_Limpa Call SalClearField( hWndItem ) Background Text: Telefone Data Field: dfPHONE Data Maximum Data Length: 20 Data Type: String Message Actions On PAM_Limpa Call SalClearField( hWndItem ) Background Text: Cidade Data Field: dfCITY Data Maximum Data Length: 30 Data Type: String Message Actions On PAM_Limpa Call SalClearField( hWndItem ) Background Text: Estado Data Field: dfSTATE Data Maximum Data Length: 30
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
pág 64
Centura Team Developer – Módulo Básico
pág 65
Data Type: String Message Actions On PAM_Limpa Call SalClearField( hWndItem ) Background Text: País Data Field: dfCOUNTRY Data Maximum Data Length: 30 Data Type: String Message Actions On PAM_Limpa Call SalClearField( hWndItem ) Background Text: Web Site Data Field: dfCORPORATE_URL Data Maximum Data Length: 128 Data Type: String Message Actions On PAM_Limpa Call SalClearField( hWndItem ) Pushbutton: pbLIMPAR Title: Limpar Message Actions On SAM_Click Call SalSendMsgToChildren( hWndForm, PAM_Limpa, 0, 0 ) Set nTotalLinhas = 0 Pushbutton: pbGRAVAR Message Actions On SAM_Click If SalIsWindowEnabled( dfCOMPANY_ID ) Call SqlPrepareAndExecute( hSqlEmpresa, sSqlInsert ) Else Call SqlPrepareAndExecute( hSqlEmpresa, sSqlUpdate ) Call SqlCommit( hSqlEmpresa ) Call SalSendMsg( pbLIMPAR , SAM_Click, 0, 0 ) Pushbutton: pbEXCUIR Message Actions On SAM_Click If NOT SalIsWindowEnabled( dfCOMPANY_ID ) If IDYES = SalMessageBox( "Confirma a exclusão do registro", "Exclusão", MB_YesNo ) Call SqlPrepareAndExecute( hSqlEmpresa, sSqlDelete ) Call SqlCommit( hSqlEmpresa ) Call SalSendMsg( pbLIMPAR , SAM_Click, 0, 0 ) Pushbutton: pbPROCURAR Message Actions On SAM_Click If NOT SalIsNull( dfCOMPANY_ID ) Set sWhere = " WHERE COMPANY.COMPANY_ID = :frmEmpresa.dfCOMPANY_ID " Else Set sWhere = STRING_Null Call SqlPrepareAndExecute( hSqlEmpresa , sSqlSelect || sWhere || " ORDER BY COMPANY_ID " ) If SqlFetchNext( hSqlEmpresa , lParam ) Call SqlGetResultSetCount( hSqlEmpresa, nTotalLinhas ) Call SalDisableWindow( dfCOMPANY_ID ) Else Set nTotalLinhas = 0 Pushbutton: pbIMPRIMIR Message Actions On SAM_Click Call SalReportView( hWndForm, hWndNULL, "company.qrp", "address, city, company_id, company_name, url, country, phone, state" , "address, city, company_id, company_name, url, country, phone, state" , lParam ) Pushbutton: pbCANCELAR Message Actions On SAM_Click Call SalSendMsg( hWndForm , SAM_Close , 0, 0 ) Functions Window Parameters Window Variables
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
Centura Team Developer – Módulo Básico String: sWhere String: sSqlSelect String: sSqlInsert String: sSqlUpdate String: sSqlDelete ! Sql Handle: hSqlEmpresa Number: nTotalLinhas ! String: address String: city Number: company_id String: company_name String: url String: country String: phone String: state Message Actions On SAM_Create Set nTotalLinhas = 0 Set sSqlSelect = " SELECT ADDRESS , CITY , COMPANY_ID , COMPANY_NAME , CORPORATE_URL , COUNTRY , PHONE , STATE INTO :frmEmpresa.dfADDRESS , :frmEmpresa.dfCITY , :frmEmpresa.dfCOMPANY_ID , :frmEmpresa.dfCOMPANY_NAME , :frmEmpresa.dfCORPORATE_URL , :frmEmpresa.dfCOUNTRY , :frmEmpresa.dfPHONE , :frmEmpresa.dfSTATE FROM COMPANY " Set sSqlInsert = " INSERT INTO COMPANY ( ADDRESS , CITY , COMPANY_ID , COMPANY_NAME , CORPORATE_URL , COUNTRY , PHONE , STATE ) VALUES ( :frmEmpresa.dfADDRESS , :frmEmpresa.dfCITY , :frmEmpresa.dfCOMPANY_ID , :frmEmpresa.dfCOMPANY_NAME , :frmEmpresa.dfCORPORATE_URL , :frmEmpresa.dfCOUNTRY , :frmEmpresa.dfPHONE , :frmEmpresa.dfSTATE ) " Set sSqlUpdate = "UPDATE COMPANY SET ADDRESS = :frmEmpresa.dfADDRESS , CITY = :frmEmpresa.dfCITY , COMPANY_NAME = :frmEmpresa.dfCOMPANY_NAME , CORPORATE_URL = :frmEmpresa.dfCORPORATE_URL , COUNTRY = :frmEmpresa.dfCOUNTRY , PHONE = :frmEmpresa.dfPHONE , STATE = :frmEmpresa.dfSTATE WHERE COMPANY_ID = :frmEmpresa.dfCOMPANY_ID" Set sSqlDelete = "DELETE FROM COMPANY WHERE COMPANY_ID = :frmEmpresa.dfCOMPANY_ID" Call SqlConnect( hSqlEmpresa ) On SAM_ReportStart Call SqlPrepare( hSqlEmpresa, " SELECT ADDRESS , CITY , COMPANY_ID , COMPANY_NAME , CORPORATE_URL , COUNTRY , PHONE , STATE INTO :address, :city, :company_id, :company_name, :url , :country , :phone , :state FROM COMPANY ORDER BY COMPANY_ID " ) On SAM_ReportFetchInit Return SqlExecute( hSqlEmpresa ) On SAM_ReportFetchNext Return SqlFetchNext( hSqlEmpresa , lParam )
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
pág 66
Centura Team Developer – Módulo Básico
pág 67
O Form de manutenção na tabela de contatos Nesta tela é mostrada a utilização do objeto top level table window para imprimir, incluir, alterar e excluir informações na tabela de contatos.
O comportamento desta tela é parecido com a tela de Empresas, porém não existe a consulta, uma vez que os dados já são mostrados todos na table window. Um outro recurso interessante que é demonstrado é a utilização da coluna de “Empresa”, que foi programada e tem o comportamento de um objeto combobox. Observe o código fonte : Table Window: frmContatos Display Settings Initial State: Maximized Description: Named Menus Menu Tool Bar Contents Pushbutton: pbNOVALINHA Message Actions On SAM_Click Call fNovaLinha( ) Pushbutton: pbATUALIZAR Message Actions On SAM_Click Call SqlPrepare( hSqlContatos, " INSERT INTO ( .COMPANY_ID , .CONT_EMAIL , .CONT_FAX , .CONT_FIRST_NAME , .CONT_LAST_NAME , .CONT_PHONE , .CONT_TITLE , ._ID ) VALUES ( :frmContatos.colCOMPANY_ID , :frmContatos.colCONT_EMAIL , :frmContatos.colCONT_FAX , :frmContatos.colCONT_FIRST_NAME , :frmContatos.colCONT_LAST_NAME , :frmContatos.colCONT_PHONE , :frmContatos.colCONT_TITLE , :frmContatos.col_ID ) " ) Call SalTblDoInserts( hWndForm , hSqlContatos, TRUE ) ! Call SqlPrepare( hSqlContatos, " UPDATE SET
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
Centura Team Developer – Módulo Básico .COMPANY_ID = :frmContatos.colCOMPANY_ID , .CONT_EMAIL = :frmContatos.colCONT_EMAIL , .CONT_FAX = :frmContatos.colCONT_FAX , .CONT_FIRST_NAME = :frmContatos.colCONT_FIRST_NAME , .CONT_LAST_NAME = :frmContatos.colCONT_LAST_NAME , .CONT_PHONE = :frmContatos.colCONT_PHONE , .CONT_TITLE = :frmContatos.colCONT_TITLE WHERE ._ID = :frmContatos.col_ID " ) Call SalTblDoUpdates( hWndForm , hSqlContatos, TRUE ) ! Call SqlPrepare( hSqlContatos, "DELETE FROM WHERE ._ID = :frmContatos.col_ID" ) Call SalTblDoDeletes( hWndForm, hSqlContatos, ROW_MarkDeleted ) Call fPopulate( ) Pushbutton: pbIMPRIMIR Message Actions On SAM_Click ! Call SalReportTableCreate( "contatos.qrp", hWndForm, lParam ) Call SalShowWindow( colCOMPANY_ID ) Call SalReportTableView( hWndForm , hWndNULL , "contatos.qrp", lParam ) Call SalHideWindow( colCOMPANY_ID ) Pushbutton: pbCANCELAR Message Actions On SAM_Click Call SalSendMsg( hWndForm , SAM_Close , 0, 0 ) Contents Column: colCOMPANY_ID Column: col_ID Title: Código Contato Maximum Data Length: 18 Column: colCONT_FIRST_NAME Title: Primeiro Nome Maximum Data Length: 18 Column: colCONT_LAST_NAME Title: Último Nome Maximum Data Length: 18 Column: colCOMPANY_NAME Title: Empresa Maximum Data Length: 30 Cell Options Cell Type? Drop Down List List Values Message Actions On SAM_Create Call SalListPopulate( hWndItem , hSql , "SELECT COMPANY_NAME FROM COMPANY " ) On SAM_AnyEdit Call SqlPrepareAndExecute( hSql , " SELECT COMPANY_ID FROM COMPANY INTO :frmContatos.colCOMPANY_ID WHERE COMPANY_NAME = :MyValue " ) Call SqlFetchNext( hSql , lParam ) Column: colCONT_EMAIL Title: e-mail Maximum Data Length: 64 Column: colCONT_TITLE Title: Cargo Maximum Data Length: 18 Column: colCONT_PHONE Title: Telefone Maximum Data Length: 18 Column: colCONT_FAX Title: Num Fax Maximum Data Length: 18 Functions Function: fNovaLinha Description: Returns Parameters Static Variables Local variables
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
pág 68
Centura Team Developer – Módulo Básico
pág 69
Actions Call SalTblSetFocusCell( hWndForm, SalTblInsertRow( hWndForm,TBL_MaxRow), col_ID, -1, -1) Function: fPopulate Description: Returns Parameters Static Variables Local variables Actions Call SalTblPopulate( hWndForm , hSqlContatos, " SELECT .COMPANY_ID , .CONT_EMAIL , .CONT_FAX , .CONT_FIRST_NAME , .CONT_LAST_NAME , .CONT_PHONE , .CONT_TITLE , ._ID , COMPANY.COMPANY_NAME INTO :frmContatos.colCOMPANY_ID , :frmContatos.colCONT_EMAIL , :frmContatos.colCONT_FAX , :frmContatos.colCONT_FIRST_NAME , :frmContatos.colCONT_LAST_NAME , :frmContatos.colCONT_PHONE , :frmContatos.colCONT_TITLE , :frmContatos.col_ID , :frmContatos.colCOMPANY_NAME FROM , COMPANY WHERE .COMPANY_ID = COMPANY.COMPANY_ID " , TBL_FillAll ) Window Parameters Window Variables Sql Handle: hSqlContatos Message Actions On SAM_Create Call SqlConnect( hSqlContatos ) Call fPopulate( ) On SAM_RowHeaderDoubleClick Call SalTblSetRowFlags( hWndForm , lParam , ROW_MarkDeleted, TRUE ) On SAM_RowHeaderClick Call SalTblSetRowFlags( hWndForm , lParam , ROW_MarkDeleted, FALSE )
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
Centura Team Developer – Módulo Básico
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
pág 70
Centura Team Developer – Módulo Básico
pág 71
6. Dynalib 6.. Dynalib 1.. Conceito 2.. Implementando Dynalib Conceito Uma Dynalib é um módulo compilado com funções e objetos que são utilizados dinamicamente por outras aplicações em tempo de execução. Uma Dynalib é um tipo de arquivo intermediário entre uma APL e uma DLL. Assim como uma APL, é possível incluí-la numa aplicação e utilizar alguns de seus recursos. A diferença de uma Dynalib em relação a uma APL é que nem todo o código fonte da biblioteca é compartilhado para reutilização. Assim como uma DLL, o seu conteúdo só é carregado para a memória quando o aplicativo requer algum recurso que pertence a Dynalib, isto já em tempo de execução. A principal diferença entre uma Dynalib e uma DLL é que a Dynalib é um formato de arquivo proprietário do Centura, não sendo possível sua utilização em outros ambientes de desenvolvimento. Podem ser compartilhados numa Dynalib : As funções globais As variáveis globais Objetos top-level e suas funções Objetos MDI, suas funções e seus objetos child. As vantagens na utilização de Dynalibs são : Desenvolvimento Modular. Você pode separar sua aplicação em módulos distintos (dynalibs), onde cada módulo dedica-se a realizar uma determinada tarefa. Economia de Recursos. Você precisará de menos espaço para distribuir suas aplicações. Atualização Modular. Ë possível recompilar uma biblioteca depois que uma aplicação já encontrase em produção, sem recompilar a aplicação em si. Segurança de Código Fonte. Ë possível a distribuição de bibliotecas escritas em SAL sem que o código fonte seja revelado. Compilação Rápida. As dynalibs não são compiladas a cada vez que a aplicação é, isso reduz drasticamente o tempo de abertura dos programas e também da compilação. Obs: No desenvolvimento de grandes aplicativos, é provável que alguns limites internos do Centura sejam atingidos. Por exemplo a tabela de símbolos, o espaço para as strings, o número de objetos entre outros. Cada dynalib possui seus próprios recursos e são independentes do restante da aplicação. Isso pode ajudar a evitar alguns limites impostos pelo Centura.
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
Centura Team Developer – Módulo Básico
pág 72
Implementando Dynalib Para a geração de uma dynalib o primeiro o é identificar quais os itens que serão exportados, identificá-los e compilar a biblioteca ativando a geração da dynalib. Observe a definição da constante e a declaração da função interna Get_Versao() que irá recuperar o valor da constante DYNALIB_VERSAO. Observe também que a frente do nome da função está a palavra chave para que o Centura entenda quais elementos serão exportados na geração da dynalib , “! __exported”.
Através da caixa de diálogo Build Settings ( menu “Project” / “Build Settings...” ) é feita a configuração do Centura Builder para que seja gerada a dynalib.
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
Centura Team Developer – Módulo Básico
pág 73
Observe na figura abaixo que a dynalib foi incluída numa aplicação e que a função Get_Versao() aparece no outline da aplicação. O código fonte da função não é visualizado. Assim como o programador não faz a menor idéia de que a constante DYNALIB_VERSAO existe.
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
Centura Team Developer – Módulo Básico
pág 74
Obs : Dynalib provê ao desenvolvedor a possibilidade de componentizar e modularizar a aplicação. Com as dynalibs o desenvolvedor pode o-a-o enviar ao cliente partes novas da aplicação que foi comprada ou enviada para demonstração, sem que seja necessário enviar uma versão completa para o cliente. Importante : Normalmente as dynalibs continuam compatíveis mesmo após uma atualização do pacote Centura Team Developer, fique atento ao arquivo release notes que acompanha cada nova versão, neste arquivo é informado se existe a necessidade de recompilar as dynalibs. Isso só deve ocorrer quando as versões forem “binariamente incompatíveis”.
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
Centura Team Developer – Módulo Básico
pág 75
7. Geração do Executável Geração do Executável A geração do executável com o Centura Builder é extremamente simples, basta acionar o menu “Project” / “Build : app_curso.exe”. Lembre-se que a aplicação precisar estar livre de erros de compilação. Através da caixa de diálogo Build Setting pode ser configurado a geração do executável, seu path e o ícone da aplicação. O executável gerado pelo Centura não é independente, ou seja, o executável sozinho não é o suficiente para que a aplicação seja executada corretamente pelo usuário. Alguns cuidados devem ser tomados :
Normalmente, todo o conteúdo do diretório “Centura\Deploy” é necessário para que o executável funcione corretamente. Neste diretório estão as bibliotecas do Centura, drivers dos bancos de dados e o módulo run-time do Centura e do ReportBuilder. Este diretório deve estar no path da máquina que for utilizar o aplicativo. Sem este diretório a aplicação não é executada. As bibliotecas de terceiros como as DLLs e controles ActiveX devem estar devidamente instalados na máquina que irá executar o aplicativo. As dynalibs que a aplicação estiver utilizando precisam estar no mesmo diretório do executável. Sem as dynalibs, a aplicação executa normalmente até o momento em que um recurso presente na dynalib for requerido. Neste momento a execução da aplicação é interrompida. Os demais arquivos utilizados pela aplicação ( ícones, bitmaps, cursores, layouts de relatórios etc ) também devem estar no mesmo diretório onde o executável está localizado. Sem estes arquivos, a aplicação executa, mas pode não ser obtido os efeitos esperados.
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
Centura Team Developer – Módulo Básico
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
pág 76
Centura Team Developer – Módulo Básico
pág 77
8. O Report Builder 8.. O Report Builder 1.. Fundamentos do Report Builder. 2.. Funções SALReport* 3.. Definindo layouts. O Report Builder O Report Builder é um poderoso gerador de relatórios e faz parte do pacote Centura Team Developer. É uma ferramenta de fácil utilização além de ser um gerador de relatórios padrão WYSIWYG (what you see is what you get). No Report Builder você “desenha’ o relatório utilizando as ferramentas disponíveis na paleta de objetos e então salva o layout como um template. Posteriormente, o relatório será linkado aos dados que podem vir de um banco de dados padrão SQL, através do Centura Bulder, para então produzir relatórios com qualidade comercial. Fundamentos do Report Builder. O ambiente de desenvolvimento de relatórios é mostrado na figura abaixo.
Áreas do ReportBuilder
Nesta figura são mostradas as seguintes ferramentas :
Indicador da posição do objeto selecionado no relatório. Indicador da largura do objeto selecionado no relatório. Tipo e Tamanho da fonte utilizada Tamanho da fonte utilizada 3 botões que controlam o alinhamento à esquerda, ao centro e à direita.
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
Centura Team Developer – Módulo Básico
pág 78
Botão “Bold” on/off Botão “Itálico” on/off Botão “Sobrescrito” on/off Botão “Sublinhado” on/off
Nesta figura são mostradas as seguintes ferramentas :
conteúdo do campo. Botão para ativar o editor de fórmulas Combobox para configurar a formatação do campo.
Seção do Descrição Relatório Report Header é o cabeçalho que deverá aparecer apenas no início do relatório, antes da primeira página de dados. Page Header é o cabeçalho que será mostrado em todas as páginas do relatório, normalmente utilizado para mostrar a data, hora, número da página e algumas informações sobre o relatório. Detail Block corresponde a cada linha de dados que chega da fonte dos dados. Page Footer é impresso no rodapé de cada página. Report Footer é impresso apenas quando o relatório encerra. Muito útil para se fazer um resumo do relatório. A paleta de controles possui algumas ferramentas que podem ser colocadas em várias seções do relatório, assim como no Centura, o relatório vai sendo montado a cada objeto nele colocado. Os objetos disponíveis são : Ícone objeto
do Nome Selector Background Text Field
Box
Descrição Destaca um objeto no modelo para que seja executada alguma operação com o mesmo, como mudar a fonte. É similar ao Selector do Centura Builder. Similar ao objeto Background Text do Centura Builder. Pode ser usado para definir algum literal caractere, rótulos e cabeçalhos de colunas no relatório. Similar ao datafield do Centura Builder. Provavelmente este seja o objeto mais utilizado do Report Builder. Normalmente é utilizado para fazer um link direto com uma coluna do banco de dados ou para uma fórmula. Similar ao frame do Centura Builder. Seu uso é estritamente “cosmético”.
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
Centura Team Developer – Módulo Básico Picture Line Graph Cross Tab Preserve Selection Auto Selector
pág 79
Similar ao objeto picture do Centura Builder. Pode conter uma imagem ou um objeto OLE. Insere uma nova linha em qualquer bloco do template. Similar ao objeto Graph do Centura Builder. Insere um gráfico de negócios no relatório. Insere um controle para a geração de relatórios tabulares. Mantém selecionado o objeto atual após a inserção de algum objeto no layout. Não retornando à ferramenta default, que é o Selector. Seleciona automaticamente o objeto Selector, após a inserção de algum objeto no layout.
O Editor de Fórmulas
O Report Builder possui um editor de fórmulas para que seja possível definir fórmulas para os dados que chegam da aplicação. O editor de fórmulas possui uma grande variedade de funções agrupadas nas seguintes categorias :
Funções agregadas ( como average, count, max ) Funções de tratamento de campos tipo string ( como compare, substring, case ) LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
Centura Team Developer – Módulo Básico
pág 80
Funções de tratamento de campos tipo Date/Time ( como currentDate, currentTime ) Funções matemáticas ( como truncate, power e mod ) Funções especiais ( como PageNumber, ReportFileName )
Obs : Lembre-se estas funções atuam nos dados depois que estes já aram pelo Centura Builder. Portanto, existem duas oportunidades de transformação dos dados ; usando as funções da linguagem SAL no Centura Builder e usando estas funções próprias do Report Builder. Não esquecendo que existe uma terceira oportunidade, a recuperação no banco de dados via comando SQL. Há uma grande abertura para que os dados sejam trabalhados amplamente, SQL_SAL_ReportWindows, entre o momento em que o dado é requisitado do banco de dados até sua impressão numa impressora. A comunicação Centura Builder x Report Builder O primeiro o foi descrito acima, é desenhar e salvar (*.QRP) o template do relatório. Agora precisamos invocar e enviar os dados a partir do Centura Builder. Isso é feito através das funções SalReport* que são usadas para associar um template com os dados e iniciar a impressão do relatório. O relatório se comunica com o Centura Builder através utilizando-se de mensagens. Cada vez que o Centura Builder termina de processar uma mensagem, ele envia ao Report Builder uma “resposta” conhecida para que o próximo o seja dado. Assim funciona a comunicação entre o Centura Builder e o Report Builder, assim são processados os relatórios. Funções SAL utilizadas para imprimir ou visualizar um relatório : Função SalReportCreate SalReportPrint SalReportView SalReportTableCrea te SalReportTableView SalReportTablePrint
Descrição Cria um template de relatório, linkado às variáveis do Centura Builder Envia diretamente um template de relatório para impressora. Permite que o relatório seja pre-visualizado na tela antes de ser impresso. Cria um template de relatório, linkado às colunas de uma table window do Centura Builder Permite que o relatório seja pre-visualizado na tela antes de ser impresso. Baseia-se nos dados presentes numa table window. Envia diretamente um template de relatório para impressora. Baseia-se nos dados presentes numa table window.
A troca de mensagens e dados entre o Centura Builder e o Report Builder é mostrada abaixo. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
CB RB RB RB CB RB CB RB CB RB CB RB
executa uma chamada à função SalReportView ou SalReportPrint. é iniciado pelo Centura Builder. lê o template do relatório (*.QRP) informa ao Centura Builder que o relatório está sendo iniciado envia ao Centura Builder a mensagem SAM_ReportStart. executa algumas tarefas de inicialização instrui ao CenturaBuilder que prepare para o envio do primeiro “lote” de informações. envia ao Centura Builder a mensagem SAM_ReportFetchInit prepara os dados e envia ao ReportBuilder TRUE/FALSE para que o relatório continue. informa ao Centura Builder que está pronto para formatar um bloco do relatório. envia ao Centura Builder a mensagem SAM_ReportNotify. pode manipular variáveis do relatório se for necessário. solicita ao Centura Builder uma linha de dados. envia ao Centura Builder a mensagem SAM_ReportFetchNext. armazena nas variáveis do relatório os dados a serem impressos. e retorna ao Report Builder TRUE ou FALSE para que o relatório continue. informa ao Centura Builder que o relatório terminou. envia ao Centura Builder a mensagem SAM_ReportFinish. LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
Centura Team Developer – Módulo Básico 19
CB
pág 81
encerra as atividades desconectando do banco de dados por exemplo.
Todo o processamento responsável pela transferência dos dados entre banco de dados até o relatório é descrito entre os itens 10 e 16. Forma-se um loop entre estes processos até que o Centura Builder retorno FALSE (item 16) e então o Report Builder encerra o relatório. O diálogo entre o Centura Builder e o Report Builder a cada troca de mensagem : Mensagem SAM_ReportStart SAM_ReportFetchInit SAM_ReportFetchNext SAM_ReportNotify SAM_ReportFinish
O que o ReportBuilder diz “OK, estou vivo” “Pode ir buscar os dados.” “Esta linha já foi, pode mandar outra por favor.” “Atenção, estou começando a formatar uma seção especial do relatório” “Terminei.”
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
Centura Team Developer – Módulo Básico
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
pág 82
Centura Team Developer – Módulo Básico
pág 83
9. Centura e a OOP 9. Centura e a OOP 9.1.. A implementação da OOP no Centura. 9. Programação Orientada a Objetos O Centura implementa uma série de recursos típicos de uma linguagem orientada a objetos. Podemos afirmar seguramente que o Centura é uma linguagem orientada a objetos. Mostraremos nos exemplos a seguir como implementar alguns destes recursos. Com a programação orientada ao objeto torna-se possível : * * *
A definição de classes Criar classes derivadas de classes já existentes. Criar objetos destas classes.
Objetos Um objeto é uma entidade de software que combina : Dados que representam um objeto. Código procedural que obtém ou modifica os dados de um objeto. Um objeto pode representar : Um conceito tangível como uma janela. Um conceito abstrato como uma conta bancária. Um objeto é uma instância de uma classe. Um objeto contém as informações e o comportamento da classe origem. Classes Uma classe é um molde para um objeto. Numa classe você define a estrutura de dados e o comportamento que serão compartilhados mais tarde, quando você criar instâncias dessa classe. Você define o mesmo comportamento e a mesma estrutura de dados para os objetos sem precisar duplicar o código para cada um dos objetos. Os objetos de uma classe compartilham os mesmos dados e os mesmos comportamentos,mas cada objeto possui seus próprios valores para os dados. Herança A herança permite que você defina uma nova nos moldes de uma classe já existente. Uma nova classe que você deriva de uma classe base herda o comportamento e a estrutura de dados da classe base. Assim, uma classe derivada pode : Expandir a classe base acrescentando novos dados e comportamentos. Modificar um comportamento de uma classe redefinindo o comportamento herdado. Desenvolvendo Classes e Objetos. Siga estas instruções genéricas para desenvolver classes e objetos :
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
Centura Team Developer – Módulo Básico
pág 84
1. Decida que classe você irá utilizar. 2. Escolha as variáveis e funções para cada classe. Para classes de objetos podem ser definidos também ações que serão acionadas pelas mensagens. 3. Organize as classes numa hierarquia. Definindo uma classe Vamos definir agora uma classe de pushbutton. Global Declarations Classes Pushbutton Class: bCancelar Title: Cancelar Description: Derived From Class Variables Instance Variables Functions Message Actions On SAM_Click Call SalSendMsg( hWndForm , SAM_Close , 0 , 0 )
Observe que esta classe é extremamente simples, porém muito útil. Um outro exemplo de uma classe de datafield que nos seria muito útil na confeccão da tela de manutenção de Empresas. Data Field Class: cdfLimpar Description: Derived From Class Variables Instance Variables Functions Message Actions On PAM_Limpar Call SalClearField( hWndItem )
Estes são exemplos extremamente simples da utilização de classes no Centura. Um estudo mais detalhado sobre este assunto é indispensável.
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
Centura Team Developer – Módulo Básico
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
pág 85
Centura Team Developer – Módulo Básico
pág 86
10. Team Object Manager 10. Team Object Manager O Centura Team Developer possui uma poderosa ferramenta para o gerenciamento de projetos e de equipes de desenvolvimento. O Team Object Manager gerencia os projetos e tudo o que está envolvido nesse processo; projetos, aplicações, bibliotecas, imagens, relatórios, documentos, equipes, faz controle de versão e muitas outras atividades típicas de um sistema de gerenciamento de projetos. Toda a operação do Team Object Manager ( TOM ) é baseada num, repositório onde estão localizadas todas as informações. Este repositório é uma base de dados padrão SQL que pode funcionar num servidor de rede ou numa máquina stand-alone. O TOM a os seguintes bancos de dados : Centura SQLBase, Informix, MS-SQLServer e Oracle. Na figura abaixo pode ser observada a interface inicial do TOM.
TOM. Visão inicial do projeto Starter. Para que o TOM gerencie a equipe de desenvolvimento é necessário primeiramente cadastrar a equipe toda. Cada usuário recebe um nome código, uma senha e seus privilégios que servem de classificação da hierarquia dos membros da equipe. Os possíveis privilégios são Gerente de
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
Centura Team Developer – Módulo Básico
pág 87
projetos, Manutenção dos membros do projeto, Modificar os membros do projeto e Modificar as propriedades do repositório. Isso se faz através da tela mostrada na figura abaixo.
Todos os membros da equipe podem ser confortavelmente visualizados conforme a figura abaixo, os nomes e seus direitos. Qualquer alteração que se fizer necessária em algum usuário pode ser feita nesta tela. Clicando-se com o botão direito do mouse no nome de um usuário fará com que um menu específico de usuários apareça com todas as opções de configuração possíveis para o usuário escolhido.
Os projetos são criados no TOM através da janela do Assistente de Criação de Projeto, que é mostrada na figura abaixo. Neste assistente são configurados os parâmetros para que o TOM crie o projeto desejado. Basicamente o TOM precisa de um código do projeto e do nome. É neste momento que uma das decisões mais importantes da criação do projeto deve ser tomada ; O tipo de armazenamento dos componentes do projeto. O TOM pode armazenar tudo referente ao LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
Centura Team Developer – Módulo Básico
pág 88
projeto num repositório (num banco de dados SQL). Mas pode também armazenar no repositório apenas os ponteiros e informações sobre a equipe e sobre os projetos, colocando o grande volume de dados num diretório configurado nesta tela. Neste diretório ficam todos os programas fontes, imagens, relatórios, ou seja todos os itens do projeto. Essa é uma informação extremamente importante que deve ser decidida neste momento.
O próximo o é incluir no projeto os seus componentes. Para isso o TOM oferece uma interface bastante amigável para o armazenamento e organização dos componentes. Isso pode ser visualizado na figura abaixo, onde facilmente é possível observar que o programa “app_curso.app” está sendo utilizado pelo usuário “LAIRTON”. Este é o ponto mais importante da utilização do TOM a ser assimilado neste momento. O mecanismo de Check-In e Check-Out. Estando uma aplicação guardada no repositório do TOM, cada vez que um desenvolvedor precisa realizar alguma manutenção nesta aplicação ele retira do TOM a cópia mais recente da aplicação requerida. Esta operação é registrada pelo TOM e todas as informações referentes a esta tarefa ficam no TOM armazenadas. Basicamente são : O nome do desenvolvedor que extraiu um determinado módulo do projeto para um diretório. Fica armazenado o nome do desenvolvedor, o componente, o diretório (para o qual o componente foi extraído) e a data e hora da operação. A esta operação dá-se o nome de Check-Out, pois um integrante da equipe extraiu um componente do projeto, para manutenção. Obs : Estando um programa em Check-Out, não é possível que nenhum outro desenvolvedor realize Check-Out novamente. A menos que esta operação esteja habilitada no TOM e que os integrantes da equipe tenham consciência dos danos que esse tipo de comportamento pode causar se utilizado de forma incorreta.
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
Centura Team Developer – Módulo Básico
pág 89
Check-In é a operação oposta ao Check-Out. Ocorre quando o desenvolvedor encerrou suas alterações no componente e está então devolvendo ao repositório o aplicativo devidamente atualizado. Apenas o desenvolvedor que solicitou o Check-Out pode realizar o Chek-In do módulo.
Em determinadas ocasiões o programa em Check-Out pode não ter sido modificado. Neste caso a operação correta não é o Check-In, mas sim o Unlock.
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com
Centura Team Developer – Módulo Básico
pág 90
O TOM possui também uma série de relatórios que podem e devem ser utilizados para um melhor gerenciamento dos projetos. Este recurso e muitos outros que compõem o TOM devem ser analisados atentamente e delicadamente pelos desenvolvedores quando houver oportunidade.
LAIRTON NOGUEIRA DE ALMEIDA JÚNIOR
[email protected] – http://www.CenturaExplorer.com