Revista MSDN Magazine Edição 08 - As Novidades do Visual FoxPro 9.0 Beta

O artigo tratará das melhorias no acesso e manipulação de dados; Ambiente Integrado de Desenvolvimento (IDE); Interface de Usuário e Relatórios.

Clique aqui para ler todos os artigos desta edição

As Novidades do Visual FoxPro 9.0 Beta

O Visual FoxPro sempre foi conhecido como uma ferramenta que procura atender às necessidades mais urgentes dos desenvolvedores. A cada nova versão, são incorporados recursos valiosos ao produto, geralmente resultantes do “feedback” da comunidade de usuários. O Visual FoxPro 9.0, a nova versão da ferramenta cujo lançamento está previsto para o último trimestre de 2004, continua honrando essa tradição e trará recursos que tornarão os desenvolvedores ainda mais produtivos e capazes de entregar soluções mais poderosas e flexíveis.

Muitas são as novidades desta nova versão, e várias delas já poderão ser testadas na versão Beta, a ser disponibilizada publicamente na primeira metade de Junho/2004. Sendo assim, tentarei melhorar a leitura deste artigo organizando-o em tópicos correspondentes a cada principal área de destaque do Visual FoxPro 9.0 Beta. Falarei das melhorias no acesso e manipulação de dados; Ambiente Integrado de Desenvolvimento (IDE); Interface de Usuário e Relatórios. Além disso, também procurarei citar questões importantes de interoperabilidade, como integração com o .NET e manipulação de documentos XML.

Acesso e Manipulação de Dados

Um dos grandes diferenciais do VFP sempre foi o suporte nativo à linguagem SQL. Esse suporte foi bastante melhorado no VFP 9.0 Beta através da adição de mais recursos do padrão ANSI-92. Alguns deles são mostrados na Listagem 1 (todos os exemplos são baseados no database Northwind, distribuído com o VFP).

Listagem 1. Seleção do total de pedidos por cliente usando subqueries nas cláusulas FROM e SELECT.
*-- *-- Total dos pedidos por cliente (usando sub-query na cláusula FROM) *-- SELECT Cust.CustomerID, Cust.CompanyName, Soma.SomaPedidos ; FROM Customers Cust LEFT JOIN ; ( ; SELECT CustomerID, ; SUM(I.Quantity * I.UnitPrice) as SomaPedidos ; FROM Orders P INNER JOIN OrderDetails I ; ON P.OrderId = I.OrderId ; GROUP BY CustomerID ; ) as Soma ; ON Soma.CustomerID = Cust.CustomerID *-- *-- Total dos pedidos por cliente (usando sub-query na cláusula SELECT) *-- SELECT Cust.CustomerID, Cust.CompanyName, ; ( ; SELECT SUM(I.Quantity * I.UnitPrice); FROM Orders P INNER JOIN OrderDetails I ; ON P.OrderId = I.OrderId ; WHERE P.CustomerID = Cust.CustomerID ; ) as SomaPedidos ; FROM Customers Cust

As consultas da Listagem 1 realizam o mesmo trabalho: obter o total dos pedidos por cliente. Entretanto, elas ilustram duas novas possibilidades do comando SELECT-SQL no VFP 9.0 Beta: a utilização de “subqueries” (consultas aninhadas) nas cláusulas SELECT e FROM. Outras melhorias incluem:

Além das melhorias funcionais na sintaxe do SQL, o VFP 9.0 Beta conta ainda com as seguintes novidades em relação ao acesso a dados:

XML e Integração com o .NET

A versão anterior do Visual FoxPro, o VFP 8.0, foi sem dúvida responsável por um grande avanço na área de interoperabilidade e integração com o .NET Framework. O VFP 9.0 Beta traz várias melhorias em algumas das classes que desempenham um importante papel nesta integração: XMLAdapter, XMLTable e XMLColumn.

O suporte à geração de documentos XML hierárquicos, ou seja, documentos cujos dados relacionam-se entre si e cuja relação é determinada pelo aninhamento dos elementos dentro do mesmo (por exemplo, o relacionamento pai/filho) foi bastante melhorado nesta versão. Agora é possível determinar a forma como os diversos elementos do documento XML deverão estar aninhados. Isso proporciona enorme flexibilidade ao gerar documentos XML a partir de fontes de dados nativas e exportá-los para outras aplicações, ou ainda, para importar documentos com vocabulários diversos a fim de transformá-los mais facilmente em cursores nativos para manipulação no ambiente do VFPM.

O código da Listagem 2 apresenta um pequeno exemplo que ilustra a geração de um documento onde os itens pertencentes aos dados dos pedidos de venda estarão aninhados dentro dos elementos dos clientes correspondentes. A Figura 1 mostra o documento XML resultante da execução do código (neste, caso o esquema XSD foi omitido por razões de limitação de espaço).

Listagem 2. Exemplo de geração de um documento XML hierárquico que relaciona três tabelas.
LOCAL loXA as XMLAdapter LOCAL loBrowser as InternetExplorer.Application LOCAL loExcecao as Exception LOCAL lcCliente as String TRY CLOSE DATABASES ALL *-- Abre as tabelas Orders e OrderDetails do database Northwind OPEN DATABASE _Samples + "Northwind\Northwind" *-- Vamos selecionar os dados do cliente CENTC lcCliente = "CENTC" *-- Seleciona o registro do cliente 'CENTC' SELECT CustomerID, CompanyName ; from Customers ; WHERE CustomerID = m.lcCliente INTO CURSOR Clientes READWRITE *-- Seleciona os pedidos do cliente SELECT OrderId, CustomerID, OrderDate ; FROM Orders ; WHERE CustomerID = m.lcCliente INTO CURSOR Pedidos READWRITE *-- Seleciona os itens dos pedidos SELECT I.OrderID, I.ProductId, I.UnitPrice, I.Quantity ; FROM OrderDetails I LEFT JOIN Orders P; ON I.OrderID = P.OrderID ; WHERE P.CustomerID = m.lcCliente INTO CURSOR Itens READWRITE *-- *-- Estabelece um relacionamento entre os cursores. *-- Isto será importante mais tarde quando formos serializar *-- o documento XML através do método XMLAdapter.ToXML() *-- SELECT Itens INDEX ON OrderID TAG OrderID SELECT Pedidos INDEX ON CustomerID TAG CustomerID SET RELATION TO OrderID INTO Itens IN Pedidos SET RELATION TO CustomerID INTO Pedidos IN Clientes *-- *-- Configura o objeto XMLAdapter *-- loXA = CREATEOBJECT("XMLAdapter") *-- Indica que o aninhamento será respeitado no documento XML final loXA.RespectNesting = .T. *-- Adiciona as tabelas à coleção Tables loXA.AddTableSchema("Clientes") loXA.AddTableSchema("Pedidos") loXA.AddTableSchema("Itens") *-- Gera um documento XML a partir das tabelas loXA.ToXML("\PedidosItens.Xml",,.T.) *-- usa o navegador para apresentar os dados do XML loBrowser = CREATEOBJECT("InternetExplorer.Application") loBrowser.Navigate("\PedidosItens.Xml") loBrowser.Visible = .T. CATCH TO loExcecao MESSAGEBOX("Erro: " + TRANSFORM(loExcecao.ErrorNo) + ". " + loExcecao.Message) FINALLY IF USED("Clientes") USE IN Clientes ENDIF IF USED("Itens") USE IN Itens ENDIF IF USED("Pedidos") USE IN Pedidos ENDIF CLOSE DATABASES ALL STORE Null to loXA, loBrowser ENDTRY
Figura 1. Documento XML hierárquico relacionando três tabelas.

Ambiente Integrado de Desenvolvimento

Um grande benefício oferecido aos desenvolvedores VFP a cada nova versão do produto consiste nas ferramentas de produtividade, como a Code Referentes, Toolbox, Task Pane e muitas outras. O VFP 9.0 Beta acrescenta uma nova ferramenta, chamada Data Explorer (Figura 2), disponível através da Task Pane ou da aplicação “DataExplorer.App” no diretório-raiz do VFP. A Data Explorer apresenta uma interface bastante completa para os bancos de dados existentes nos servidores SQL Server e fontes de dados nativas ou disponíveis através de OLEDB Providers. Uma vez configurada, a conexão dará acesso às tabelas, stored procedures, funções e vários outros objetos da fonte de dados em questão.

Figura 2. Nova ferramenta Data Explorer do Visual FoxPro 9.0 Beta

O mais empolgante de tudo isso é que o código-fonte dessas ferramentas está totalmente disponível para o desenvolvedor, o que permite estender ainda mais as suas funcionalidades e aprender a efetuar várias tarefas interessantes no Visual FoxPro.

No que se refere aos editores de código, O VFP 9.0 Beta suporta compilação em background no momento da edição do código. A sintaxe da instrução corrente é destacada para indicar se existem problemas com a formação da mesma.

A janela de propriedades também recebeu melhorias e conta agora com uma nova guia chamada “Favorites” (favoritos), que permite separar os PEMs de acordo com o gosto do desenvolvedor. Agora, você também pode configurar as fontes e cores de cada tipo de PEM apresentado (Figura 3).

Figura 3. Nova Janela de Propriedades: nova guia “Favorites”; configuração de cores, fontes e a propriedade _MemberData.

Como você pode notar na Figura 3, a nova guia “Favorites” pode receber diversos itens e, além disso, permite mudar a apresentação dos nomes desses itens, como foi feito com a propriedade customizada “MinhaPropriedade”. Nas versões anteriores do VFP, as propriedades e métodos incluídos pelo desenvolvedor eram apresentados em letras minúsculas. No VFP 9.0 Beta, você pode especificar como deseja que elas sejam apresentadas. Todo esse nível de customização é possível através da adição de uma propriedade especial denominada “_MemberData” (Figura 3). Essa propriedade pode conter um documento XML com um vocabulário especial que determinará diversas configurações dos itens da Property Window, permitindo até que você especifique uma ação a ser executada quando ocorrer um duplo clique sobre uma propriedade ou método customizado - ótimo para um Builder, não é mesmo? A Listagem 3 mostra um documento XML simples que pode ser usado como conteúdo da propriedade _MemberData.

Listagem 3. Exemplo de um documento XML que pode ser usado na propriedade _MemberData

Interface Gráfica de Usuário

Report Designer

Certamente esta é a área que mais foi melhorada nesta nova versão do Visual FoxPro. As ferramentas do Report Designer foram praticamente reescritas, e o que é melhor: por meio de código VFP e compiladas em aplicações nativas. Na realidade, a Microsoft criou uma nova arquitetura para o subsistema de relatórios do VFP 9.0 Beta, o que proporcionará maior flexibilidade e poder para o desenvolvedor.

Temos novidades tanto nas ferramentas de tempo de projeto quanto nas funcionalidades de tempo de execução. Neste último caso, a Microsoft incorporou o conceito de “Listeners. Os “Listeners” são objetos que podem “ouvir” os eventos de saída da renderização de um relatório. Existem “listeners” padrões que já vêm com o produto e os quais podemos estender através de herança, criando nossos próprios listeners customizados e utilizando-os isoladamente ou em cadeia (para que possam ser usados em conjunto). A classe-base “ReportListener” pode ser utilizada facilmente para emitir relatórios já existentes, como mostra a Listagem 4:

Listagem 4. Os relatórios podem ser emitidos através de um ou mais Listeners.
oListener = CREATEOBJECT("ReportListener") oListener.ListenerType = 1 REPORT FORM MeuReport.Frx OBJECT oListener

É importante ressaltar que a classe ReportListener possui uma série de PEMs que permitem manipular a forma como o relatório será emitido. Um dos Listeners padrão, o XMLListener, é capaz de gerar uma representação da saída do relatório em formado XML, o que pode facilitar a transmissão deste relatório para outras plataformas ou mesmo a sua transformação para HTML através de XSLT, por exemplo.

Recursos da Linguagem

As construções WITH ...ENDWITH e FOR... EACH agora suportam Intellisense. Este era um pedido antigo dos usuários, desde que estes comandos foram introduzidos no VFP. (Veja a Figura 5).

Figura 5. A construção WITH ... ENDWITH agora suporta Intellisense.

Como tradicionalmente acontece a cada nova versão do Visual FoxPro, alguns limites também foram superados no VFP 9.0 Beta, tais como:

Tablet PC

No Visual FoxPro 9.0 Beta, foram incorporadas novas funcionalidades para o trabalho com TabletPCs. A nova propriedade “DisplayOrientation” indica qual a orientação de vídeo do dispositivo, e a nova função ISPEN() identifica se o usuário interagiu com a aplicação através de uma caneta ou não.

Conclusão

Neste artigo, procurei abordar as melhorias mais significativas que serão incluídas na próxima versão do Visual FoxPro. Diante do grande número de novos recursos e da dificuldade de abordarmos todos eles em um único artigo, sugiro que você busque mais informações em outros artigos, fóruns de discussão, blogs e, obviamente, no Visual FoxPro Developer Center, na MSDN. Ken Levy, o VS Data Product Manager, tem publicado uma série de artigos sobre as novidades da nova versão neste site.

Artigos relacionados