Skip to content

Delphi e C++ Builder XE8 - Detalhes da Nova Versão

Introdução

A Embarcadero está promovendo o lançamento da release de número 8 da série XE do RAD Studio (Delphi e C++ Builder). Neste artigo vou detalhar as principais novidades do produto, o qual chega mais completo do que nunca! Disponível nas edições Professional, Enterprise, Ultimate e Architect, o RAD Studio XE8 é o ambiente mais completo para criação de aplicações conectadas para Windows, MAC, iOS e Android, com excelente performance, e produtividade incomparável.

* veja mais em https://youtu.be/1b4_Mz3Ry34 (What’s New In RAD Studio XE8).

Novos Compiladores para iOS 64 bit

O XE8 adiciona dois novos compiladores para iOS 64 bit, um para Object Pascal e outro para C++, suportando assim as versões mais recentes do iOS. Além disso, também é possível "empacotar" sua aplicação no formato "Universal App"- o qual contém dos dois binários 32 e 64 bit em uma única app - exigência da Apple para as novas submissões para sua loja virtual.

* veja mais em https://youtu.be/6lc6cdL4Ts4 (iOS Universal 32-bit and 64-bit Apps for Delphi XE8).

Multi-Device Previews

Com o novo multi-device preview você consegue, em tempo de design, visualizar a interface de sua aplicação em todas as plataformas mobile e desktop, utilizando múltiplos tamanhos e formatos de tela, elevando sua produtividade de maneira incrível!

Adicionalmente, é possivel criar "devices" adicionais através de um wizard, possibilitando customizar a apresentação de sua aplicação para qualquer dispositivo ou formato desejado. Nesta área também podemos citar melhorias gerais na criação e aplicação de estilos customizados para todas as plataformas suportadas.

* veja mais em https://youtu.be/aV6GOHk_b6Y (Multi-Device Preview for Delphi XE8).

Novos Controles para FireMonkey

Foram adicionadas implementações nativas para um maior número de controles iOS, um trabalho que se iniciou no XE7. Com isso, você pode renderizar os controles FireMonkey suportados diretamente através de controles nativos da plataforma iOS, permitindo integração direta com outras apps e recursos daquele sistema operacional. A renderização nativa iOS está disponível para os seguintes controles: TMemo, TListView, TSwitch, TEdit e TCalendar.

Outras novidades são o MapView (mapas interativos para mobile, mapeados diretamente para as APIs nativas como Google Maps e MapKit do iOS) e também o novo TWebBrowser, agora disponível na versão Desktop para Windows e OSX.

Temos também um novo ImageList para FireMonkey, e melhorias no suporte a multimedia, captura de fotos em diferentes resoluções, etc. Outras novidades importantes são melhorias no suporte a notificações locais, com sons customizados e repetição, e um novo mecanismo de detecção da melhor "view" a ser utilizada para cada tipo de device.

* veja mais em https://youtu.be/l4tLWUNxa2o (New Platform Controls for Delphi XE8), https://youtu.be/T4P379vyOMQ (Camera and Share Sheet with Delphi XE8), https://youtu.be/oBxZBMpcY4g (Web Browser with Delphi XE8) e https://youtu.be/DRgTajC_zE0 (Notifications with Delphi XE8).

Novo HTTP Client Library

A nova implementação do cliente HTTP traz uma implementação nativa do protocolo HTTP e HTTPS para todas as plataformas (iOS, Android, Windows e OSX), em VCL e FireMonkey. O grande benefício é que esta nova biblioteca é implementada utilizando o SDK de cada plataforma, o que vai conferir a sua aplicação o mesmo nível de segurança e performance nativamente disponível, além de acesso direto a proxies, headers, etc:

Conectividade e IoT com Beacons

Além de um novo componente específico para Bluetooth tradicional (TBluetooth), e melhorias no suporte a Bluetooth Low Energy (através do já existente TBluetoothLE), no XE8 passamos a suportar nativamente "Beacons". Beacons (ou iBeacons) são dispositivos utilizados em aplicações de localização e proximidade. Este recurso traz incríveis possibilidades para as suas aplicações, e está se tornando uma tendência mundial em aplicações para lojas, hospitais e eventos.

* veja mais em https://youtu.be/fMHS55id7fo (Beacons, Bluetooth and App Tethering with Delphi XE8).

Novo AppAnalytics

O AppAnalytics (ou Usertility) faz parte da aquisição da TwoDesk software, juntamente com o Castalia (já integrado na IDE, mais informações a seguir). Disponível para VCL e FMX, o AppAnalytics permite a captura de todas as estatísticas e informações de sua aplicação enquanto ela está sendo utilizada por seu usuário, possibilitando assim que você tome ações corretivas antes mesmo de uma solicitação de seu cliente chegar. Também é possível observar quais são as funcionalidades mais ou menos utilizadas, e entender o comportamento de seu usuário.

Extremamente simples, basta adicionar um componente a sua aplicação VCL ou FMX, e definir o nível de captura de informação. Tais informações serão enviadas para um serviço hospedado pela Embarcadero, onde através de um usuário você terá acesso a um portal com consultas e relatórios sobre os dados emitidos por sua aplicação. Teremos um nível de acesso básico gratuíto, e um nível completo através de assinatura. Maiores informações sobre planos e etc. estarão disponíveis nas próxima semanas.

* veja mais em https://youtu.be/QiPTRyWC2cI (AppAnalytics for Delphi XE8).

Novidades no EMS: Enterprise Mobility Services

O EMS, introduzido no XE7, agora conta com novos recursos como:

  • Notificações push
  • Pooling de conexões
  • Exportação dos dados analíticos de usuários e APIs
  • Nova aplicação cliente para gestão de usuários
  • Suporte a credenciais remotas como Active Directory
Trata-se de uma solução middleware robusta pronta para distribuição imediata, permitindo conexão de suas aplicações mobile ou desktop, para troca de informações, notificações push e armazenamento de dados. O EMS é um produto independente do RAD Studio, e tem seu licenciamento definido por número de usuários finais da aplicação.
* veja mais em https://youtu.be/IXJC3kh2nps (Enterprise Mobility Services for Delphi XE8).

Mais Produtividade!

São muitas as adições na IDE para aumentar ainda mais a sua produtividade. Vamos a elas:

  • Mais de 20 novas funcionalidades na IDE (através da integração definitiva do plugin Castalia): Project Statistics, Clipboard History, Multi-Paste Support, Modeless and Context-Sensitive Refactorings, Stack Bookmarks, Parenthesis Matching, Flow Control Highlighting, Structural Highlighting, Code Navigation Toolbar, Smart Keys and Smart Symbol Search, Code Analysis, e mais
  • GetIT, nosso novo package manager, para download e instalação automática de componentes
  • Migration Tool, para migração de todas as configurações entre versões da IDE
  • Integração com Mercurial Version Control, além dos já existentes GIT e SubVersion
  • Integração com DUnitX Test Framework
* veja mais em https://youtu.be/gDwNmmrr6TA (IDE Productivity for Delphi XE8).

Novidades no FireDAC

O FireDAC no XE8 passa a suportar conexões com base de dados Big Data, neste momento oferecendo suporte para Teradata, um dos mais utilizados no mercado (futuramente outros bancos como SAP Hana serão adicionados). Também estamos adicionando suporte para os novos ChangeViews do Interbase (um recurso incrível e exclusivo do Interbase) e ferramentas/script para migração de DBX para FireDAC (similar aos já disponíveis para migração de BDE para FireDAC).

Além disso, suporte a "update notification", driver atualizado para SQLite v3+, novo componente TBatchMove, e otimizações de performance por todo o framework.

* veja mais em https://youtu.be/ELIPxZJwDKk (IBLite & FireDAC with Delphi XE8).

Box2D Engine

Outra importante adição ao produto é o engine Box2D. Trata-se de um mecanismo de física com suporte a animações gráficas em 2D, ideal para criação de jogos e programas de animação. Portado a partir do Box2D Open Source project, a biblioteca está disponível tanto para C++ quanto para Object Pascal.

* veja mais aqui http://docwiki.embarcadero.com/RADStudio/XE8/en/Using_Box2D_in_Delphi_Applications e aqui http://box2d.org/.

Interbase XE7

Obviamente este é um artigo sobre o RAD Studio XE8, mas gostaria de aproveitar a oportunidade para citar alguns dos avanços do Interbase em sua última versão, XE7:

  • Linux 64bit & new Linux Platforms (Ubuntu 14, RHEL 6 & 7, SUSE 11)
  • 64bit Transaction ID’s
  • New Change Views
  • Speed: New Processor and Indexes Management
  • Backup and Disaster Recovery
  • New developer API’s
  • ODS Update (16)
  • OpenSSL update
* veja mais aqui https://youtu.be/KNl6IRsQc4Y (CodeRage Brasil III: Interbase XE7 Change Views: captura automática de alterações de dados).

Conclusão

Este artigo oferece uma visão geral das principais novidades do RAD Studio XE8 (Delphi XE8 e C++ Builder XE8), e serve de ponto de partida para você explorar o produto. Para uma visão completa de todas as features, com links direto para a documentação de cada nova funcionalidade, recomendo os seguintes links:

* What’s New in Delphi and C++Builder XE8:

http://docwiki.embarcadero.com/RADStudio/XE8/en/What’s_New_in_Delphi_and_C%2B%2BBuilder_XE8

* RAD Studio XE8 PlayList no YouTube:

https://www.youtube.com/playlist?list=PLwUPJvR9mZHhpbLDfeUdW9uB5AqR_LiMG

* Download da versão trial (RAD Studio, Delphi e C++ Builder):

http://www.embarcadero.com/br/downloads

E finalmente, mas não menos importante, fiquem ligados em nossos canais no Facebook, em breve divulgaremos datas para os eventos presenciais e online que estaremos realizando sobre o XE8: fb.com/DelphiBrasilfb.com/EmbarcaderoBR.

Tagged , , , ,

Delphi, C ++ Builder y RAD Studio XE7: Promociones y ventajas únicas que terminan en 31/12

Las promociones y beneficios exclusivos para las nuevas licencias y actualizaciones de RAD Studio XE7 (Delphi y C ++ Builder) sólo son válidas hasta el próximo 31/12. En este artículo puedes ver cuáles son las promociones, y también tiene acceso a recursos que facilitan la actualización de su proyecto.

Ofertas válidas hasta el 31/12

Recursos técnicos para actualización

Y antes de concluir este artículo, si estás enfocado en el desarrollo móvil, me gustaría destacar que el RAD Studio XE7 fue nombrado como la mejor solución para el desarrollo Móvil para el año 2014 por Mobile Star Awards: http://www.embarcadero.com/br/press-releases/rad-studio-mobile-app-star-award !!!

Contactos y Canales Embarcadero

Para precios y ayuda con los productos de Embarcadero, encuentre por favor un Distribuidor Local en su región aquí: http://www.embarcadero.com/es/find-a-reseller-partner.

Tagged , , ,

Delphi, C++ Builder e RAD Studio XE7: Promoções e Vantagens Exclusivas até 31/12

As promoções e vantagens exclusivas para novas licenças e upgrades do RAD Studio XE7 (Delphi e C++ Builder) são válidas somente até o próximo 31/12. Neste artigo você confere quais são elas, e também tem acesso a recursos que facilitarão a atualização de seu projeto.

Promoções válidas até 31/12

Recursos Técnicos para Upgrade

E antes de encerrar, se você está focado em mobile, gostaria de destacar que o RAD Studio XE7 foi nomeado como a melhor solução mobile de 2014 pelo Mobile Star Awards: http://www.embarcadero.com/br/press-releases/rad-studio-mobile-app-star-award !!!

Contatos e Canais Embarcadero

Tagged , , , ,

Tour de RAD Studio XE7 en México y Colombia

Este post es sólo para registrar nuestro tour por Colombia y México, mostrando el nuevo RAD Studio XE7!

En nombre de nuestros socios, GOPAC (http://www.gopac.com.mx) y IT Tools (http://www.ittools.co), y también de Embarcadero (http://www.embarcadero.com/es), me gustaría decir un "muchísimas gracias" a todos los miembros de nuestra gran comunidad!

En este enlace se pueden descargar todas las muestras (y algunas más):

http://cc.embarcadero.com/item/30002

Y aquí se tiene una copia de la presentación:

http://www.slideshare.net/fernandoluizrizzato/rad-studio-xe7-live-world-tour-esp

Y, por supuesto, algunas fotos de nuestras paradas!

Tagged , , , , , ,

Lançamento Oficial do RAD Studio XE7 (Delphi e C++ Builder)

A Embarcadero está lançando a release de número 7 da série XE do Delphi e C++ Builder, com foco em multi-dispositivos, aplicações conectadas e computação paralela.

Esta versão aperfeiçoa nosso suporte para aplicações móveis, e amplia o suporte para aplicações conectadas com Bluetooth e Bluetooth LE completamente integrados a RTL. Isso vai nos permitir a construção de apps que se conectam ao mundo, a chamada "Internet das Coisas".

Neste artigo você encontrará as principais novidades da versão XE7 para todas as áreas do produto, desde aplicações desktop até sensores bluetooth de monitoramento cardíaco ;-)

FireUI

Trata-se de um enorme avanço na maneira de construir interfaces para multi-dispositivos. Em outras palavras, estamos tornando ainda mais simples para você criar uma aplicação que vai se comportar adequadamente em qualquer dispositivo (ou tamanho de tela). O "Multi-Device Designer", aliado a novos componentes com o "MultiView" e aos "Behavior Services" (serviços que captam o comportamento do device em tempo de execução) permitem a criação de uma única app com interfaces apropriadas a cada dispositivo. Sim, isto significa um único formulário sendo compilado para desktop, smartphones, tablets, óculos, relógios e toda sorte de dispositivo onde voce encontrar um Android ou iOS rodando…

Veja neste vídeo introdutório como tornamos isso possível: https://www.youtube.com/watch?v=QOfmoAtqh9E

Aplicações Conectadas

O novo suporte a bluetooth, totalmente integrado a RTL, permite conexão com qualquer device (gadget) que suporte esta tecnologia. Estamos falando de interagir com relógios inteligentes, medidores de batimento cardíaco, e uma infinidade de dispositivos que já estão no mercado. Suportamos bluetooth tradicional e também bluetooth LE (low energy), para aplicações de aproximação por exemplo.

Além disso, através do AppTethering, você pode conectar suas aplicações existentes em VCL ou FMX com aplicações móveis, via WiFi (introduzido no XE6) ou o novo suporte a Bluetooth.

Nesta página você encontra uma série de exemplos e vídeos de integrações com os mais diversos dispositivos, utilizando Delphi e C++ Builder: http://www.embarcadero.com/br/products/rad-studio/gadgets-wearables

Aqui um vídeo demonstrando a integração com um sensor para prática de esportes: https://www.youtube.com/watch?v=oeyGzuC_QqU#t=53

Parallel Programming Library

Disponível para VCL e FireMonkey, permite o uso efetivo de equipamentos multi-core, incluindo aqui dispositivos móveis! Estamos falando de "parallel for loops, futures, task, thread pooling, automatic task scheduling" e outros recursos que permitem, por exemplo, executar uma consulta complexa em segundo plano sem que sua interface fique bloqueada, de uma maneira muito simples.

Neste vídeo você pode observar uma implementação do algoritmo do "Jogo da Vida" (http://pt.wikipedia.org/wiki/Jogo_da_vida) proposto pelo matemático John Horton Conway em 1970. Daí o nome de "Conway’s Game of Life": https://www.youtube.com/watch?v=Ni3JDxNFiiw. Observe no detalhe as CPUs "trabalhando" em paralelo… todo o poder de um servidor multi-core em suas mãos!

Enterprise Mobility Services (EMS)

Refere-se a uma infraestrutura pronta para aplicações distribuídas, altamente escalável, com módulos customizados carregáveis, controle de usuários e estatísticas de acesso, e armazenamento de dados.

Ficou muito difícil de compreender? Mas na verdade não é… vamos abordar por outro ângulo:

Recordem que no XE6 introduzimos um novo framework para suportar BaaS (Backend as a Service). O framework BaaS permite, entre outras coisas, que você armazene dados nas núvens em um dos provedores suportados (Kinvey, Parse, App42), em formato de objetos JSON, sem que você tenha que construir uma aplicação servidora para isso. São infra-estruturas prontas que oferecem gestão de usuários, estatísticas de uso e armazenagem de dados, entre outras como push notification para qualquer plataforma. Neste post você aprende como criar sua primeira app conectada a um serviço como estes: http://blogs.embarcadero.com/sarinadupont/2014/04/15/introducing-rad-studio-xe6-and-baas/.

Muito bem, nosso EMS, presente no Delphi e C++ Builder XE7, permite que você crie e hospede seu próprio serviço BaaS. Seria algo como possuir seu "Kinvey" ou "Parse" particular, incluindo serviços como gestão de usuários, estatísticas de uso das APIs e armazenamento de dados, tudo em um único pacote.

Um servidor EMS pode ser distribuído como um módulo do IIS ou do Apache, neste momento apenas para plataforma Windows.

O RAD Studio traz uma licença de desenvolvimento do EMS para até 5 usuários, a partir da edição Professional. Este produto terá uma licença de distribuição sempre baseada em quantidade de usuários finais. Ou seja, este produto deverá ser licenciado a parte do RAD Studio, Delphi e C++ Builder para distribuição final. E isto se justifica porque, além da tratar-se de uma infraestrutura pronta para distribuição imediata, ele ainda traz de forma integrada licenças do Interbase Server (para servidores e desktops) e Interbase ToGo (para mobile), ambos com criptografia e capacidade ilimitadas.

Em resumo: uma solução completa que inclui suporte a APIs customizadas, acesso a dados, gestão de usuários, estatísticas e armazenamento, tudo integrado e pronto para deployment. E o melhor, tudo baseado em tecnologia standard, acessível por qualquer outra plataforma ou linguagem de desenvolvimento.

ps: em outras tecnologias você pode também encontrar esta infraestrutura referenciada como MEAP (Mobile Enterprise Application Platform).

Maiores detalhes sobre formas de licenciamento e custos em breve.

IDE, VCL, FireMonkey, FireDAC e muito mais!

Vou tentar resumir aqui os principais pontos em termos de novidades e melhorias para a IDE, VCL, FMX, FireDAC e Utilitários. Todos os demais detalhes você pode conferir diretamente nesta página do Wiki do produto: http://goo.gl/7fnf9K.

IDE = Guided Tours (permite aprender sobre o RAD Studio de maneira interativa), gerenciamento do "Entitlement List" via Project Options, controle de versão GIT integrado, além de SubVersion, adição de bibliotecas Java externas via Project Manager…

FMX = Mapeamento nativo de controles iOS (TEdit e TCalendar), suporte para Multi-Monitor, Full-Screen para Android KitKat, Pull-to-Refresh para TListView no iOS e Android, FMX Save State…

VCL = Novo JumpList para o ToolBar no Win7 e Win8, TParallel (System.Threading), AppTethering e Bluetooth - incluindo BlueTooth LE para Windows 8, OmniXML para melhor performance no processamento de arquivos XML…

FireDAC = Suporte para streaming no MSSQL, suporte para ETL através do novo TFDBatchMove (TFDBatchMove, TFDBatchMoveTextReader, TFDBatchMoveTextWriter, TFDBatchMoveDataSetReader, TFDBatchMoveDataSetWriter, TFDBatchMoveSQLReader, and TFDBatchMoveSQLWriter), novo driver específico para IBLite/IBToGo, novos recursos de serialização, leitura e gravação de Metadata (CreateTable, GenerateCreateTable, GenerateDropTable, etc.)…

Novo PAServer para MAC = com suporte a multiplas instâncias e interface visual de configuração em OSX…

Novo Java2OP.exe = Java para Object Pascal! Permite a geração das classes correspondentes em Object Pascal para chamadas a bibliotecas Java, podendo importar um JAR, uma classe ou um subset de uma classe da API do Android…

Resumo

Como vocês podem ver trata-se de uma das mais completas versões já lançadas pela Embarcadero. E observem que ainda não abordamos todos os assuntos, como suporte a "Bluetooth Proximity" nativo, assunto de nosso próximo post/vídeo.

Tentado em provar o novo RAD Studio, Delphi ou C++ Builder XE7??? O trial já está disponível para download: https://downloads.embarcadero.com/free/rad_studio

E antes de encerrar, um lembrete especial: todas estas novas capacidades, entre tantos outros assuntos interessasntes, serão abordadas em detalhes em nosso Embarcadero Conference, logo mais em 16 de Outubro. Fique ligado neste hotsite: http://www.embarcaderoconference.com.br para novidades.

Abraços e até a próxima!

Tagged , , , , , , ,

Multi-tier com Delphi XE6 e FireDAC JSON Reflection

Introdução

Durante o Delphi Tour prometemos falar mais sobre o novo suporte a Reflection no FireDAC para o desenvolvimento de aplicações Multi-tier.

Este novo suporte foi introduzido ainda na versão XE5 Update 2, como você pode observar neste post introdutório do Marco Cantu.

Vamos detalhar um pouco mais este framework e também mostrar como adicionar compressão de dados a este cenário, ideal para conexões "não muito boas" (leia-se conexõe 3G…).

Este demo pretende ilustrar um guia inicial de boas práticas com FireDAC Reflection. Ele também será utilizado em posts futuros mostrando deployment, inclusive para Apache:

Visão Geral do Projeto Exemplo

O exemplo base que utilizaremos aqui encontra-se disponível nos demos do Delphi em "C:\Users\Public\Documents\Embarcadero\Studio\14.0\Samples\Object Pascal\DataSnap\FireDACJSONReflect", mas vamos disponibilizar uma cópia atualizada contendo as adições deste post.

Esta é a estrutura do projeto exemplo:

A aplicação server é criada através do wizard "DataSnap WebBroker Application". Para o exemplo estamos utilizando uma aplicação "Stand Alone" VCL (a partir do XE6 pode ser também FireMonkey), porém você ainda tem as opções Apache e IIS, além de uma aplicação do tipo "console".

Nosso servidor vai acessar uma base exemplo do Interbase (EMPLOYEE). Serão basicamente três consultas SQL, as quais serão "exportadas" via JSON para a aplicação cliente. Abaixo você pode observar a conexão FireDAC (FDConnection) e as três consultas (FDQuery). Caso não conheça FireDAC, este webinar pode lhe ajudar: http://forms.embarcadero.com/LA14Q1BRBDEApplicationstotheFuture

Conforme comentado acima, os datasets resultantes serão exportados como JSON para a aplicação cliente. Abaixo segue o código exemplo de uma das funções criadas no servidor, todas as demais seguem o mesmo padrão de codificação:

function TServerMethods1.GetDepartmentNames: TFDJSONDataSets;
begin
 FDQueryDepartmentNames.Active := False;

 Result := TFDJSONDataSets.Create;
 TFDJSONDataSetsWriter.ListAdd(Result, FDQueryDepartmentNames);
end;

Observe que você não precisa se preocupar em converter o DataSet para JSON manualmente, a classe auxiliar "TFDJSONDataSetsWriter" possui um método (Add) que vai automaticamente serializar o DataSet em formato JSON e adicioná-lo ao Result, que por sua vez trata-se de um TFDJSONDataSets (basicamente uma lista de DataSets em formato JSON). Todas estas novas classes estão declaradas na unit "Data.FireDACJSONReflect".

Por tratar-se de uma lista de DataSets, você pode retornar em um mesmo método diversos DataSets, como por exemplo:

function TServerMethods1.GetDepartmentEmployees(
  const AID: string): TFDJSONDataSets;
begin
  FDQueryDepartmentEmployees.Active := False;
  FDQueryDepartmentEmployees.Params[0].Value := AID;

  FDQueryDepartment.Active := False;
  FDQueryDepartment.Params[0].Value := AID;

  Result := TFDJSONDataSets.Create;

  TFDJSONDataSetsWriter.ListAdd(Result, sDepartment, FDQueryDepartment);
  TFDJSONDataSetsWriter.ListAdd(Result, sEmployees, FDQueryDepartmentEmployees);
end;

Outro método que gostaria de comentar é o responsável por aplicar as alterações retornadas pelo "client" diretamente no banco de dados:

procedure TServerMethods1.ApplyChangesDepartmentEmployees(
  const ADeltaList: TFDJSONDeltas);
var
  LApply: IFDJSONDeltasApplyUpdates;
begin
  LApply := TFDJSONDeltasApplyUpdates.Create(ADeltaList);

  LApply.ApplyUpdates(sDepartment, FDQueryDepartment.Command);

  if LApply.Errors.Count = 0 then
    LApply.ApplyUpdates(sEmployees, FDQueryDepartmentEmployees.Command);

  if LApply.Errors.Count > 0 then
    raise Exception.Create(LApply.Errors.Strings.Text);
end;

A aplicação cliente envia um "TFDJSONDeltas" para o server. Basicamente temos que instanciar um "IFDJSONDeltasApplyUpdates" e aplicar as alterações nos Datasets originais através do método "ApplyUpdates".

Para a aplicação cliente, qualquer plataforma pode ser utilizada. Ou seja, o código do exemplo se aplica tanto a VCL (Windows 32/64), bem como ao FireMonkey (Windows, OS X, iOS e Android)!

Uma vez criada sua aplicação cliente, você deve utilizar o wizard "DataSnap REST Client Module" para gerar o código do proxy que conterá as chamadas para sua aplicação servidora. Em outras palavras, você cria uma aplicação na plataforma desejada (desktop ou mobile) e utiliza o wizard acima para gerar o código necessário para conectá-la a aplicação servidora.

Estamos utilizando Visual LiveBindings para efetuar a ligação dos controles visuais. Por esta razão é necessário definir os fields dos FDMemTables para então fazer a ligação em tempo de design. Neste caso, o tipo de dado dos campos não é importante, mas o nome deve ser exatamente o mesmo retornado pelo servidor.

Vamos entender agora como fazer a chamada para a aplicação servidora, abaixo temos o código que retorna a lista de departamentos e preenche o TListView "ListViewDepartments":

procedure TDepartmentsClientForm.ButtonDepartmentsClick(Sender: TObject);
begin
  GetDepartmentNames;
end;
procedure TDepartmentsClientForm.GetDepartmentNames;
var
  LDataSetList: TFDJSONDataSets;
begin
  try
    LDataSetList := ClientModule2.ServerMethods1Client.GetDepartmentNames();
    UpdateDepartmentNames(LDataSetList);
  except
    on E: TDSRestProtocolException do
      HandleRestException(ClientModule2.DSRestConnection1, 'Get Departments error', E)
    else
      raise;
  end;
end;
procedure TDepartmentsClientForm.UpdateDepartmentNames(const ADataSetList: TFDJSONDataSets);
begin
  FDMemTableDepartments.Active  := False;
  FDMemTableDepartments.AppendData(
    TFDJSONDataSetsReader.GetListValue(ADataSetList, 0));
end;

Como podem observar, o método "GetDepartmentNames" faz uma chamada ao servidor (através da classe proxy gerada pelo wizard "DataSnap REST Client Module") retornando um "TFDJSONDataSets", ou seja, uma lista de datasets em formato JSON. Resta então, utilizando a classe auxiliar "TFDJSONDataSetsReader", reverter o processo de serialização, adicionando o resultando em um FDMemTable. O TFDMemTable pode ser comparado a um TClientDataSet, isto é, um dataset em memória. Os dados armazenados em um TFDMemTable podem ser alterados, e retornados ao servidor para atualização no banco de dados, fazendo-se uma chamada ao método correspondente:

procedure TDepartmentsClientForm.ButtonApplyUpdatesClick(Sender: TObject);
begin
  ApplyUpdates;
end;

function TDepartmentsClientForm.GetDeltas: TFDJSONDeltas;
begin
  Result := TFDJSONDeltas.Create;
  TFDJSONDeltasWriter.ListAdd(Result, sEmployees, FDMemTableEmployee);
  TFDJSONDeltasWriter.ListAdd(Result, sDepartment, FDMemTableDepartment);
end;

procedure TDepartmentsClientForm.ApplyUpdates;
var
  LDeltaList: TFDJSONDeltas;
begin
  LDeltaList := GetDeltas;
  try
    ClientModule2.ServerMethods1Client.ApplyChangesDepartmentEmployees(LDeltaList);
  except
    on E: TDSRestProtocolException do
      HandleRestException(ClientModule2.DSRestConnection1, 'Apply Updates error', E)
    else
      raise;
  end;
end;

Otimizando a Transferência dos Dados

Para aplicações onde todas as camadas (server e client) estão desenvolvidas em Delphi ou C++ Builder, podemos ainda aplicar uma compressão de dados para otimizar seu tempo de transferência. Obviamente, a diferença somente será perceptível em um ambiente com alguma restrição de banda (3G por exemplo).

Tanto o Delphi, quanto o C++ Builder, trazem uma implementação da ZLib, biblioteca para compressão de dados: http://docwiki.embarcadero.com/Libraries/XE6/en/System.ZLib. O mais interessante é que nossa implementação da ZLib está disponível para todas as plataformas suportadas, ou seja, você pode compactar uma informação em seu servidor Windows e descompactar em sua aplicação mobile iOS ou Android!

Você pode facilmente adicionar a compressão de dados em seus métodos JSON utilizando os "class methods" que estamos disponibilizando abaixo, os quais tornam o uso da ZLib bastante simples:

unit DSSupportClasses;

interface

uses System.Classes, System.ZLib, System.SysUtils;

type
  TDSSupportZLib = class(TObject)
  private
    { private declarations }
  protected
    { protected declarations }
  public
    { public declarations }
    class function ZCompressString(aText: string): TBytes;
    class function ZDecompressString(aText: TBytes): string;
  end;

implementation

{ TDSSupport }

class function TDSSupportZLib.ZCompressString(aText: string): TBytes;
var
  strInput: TBytesStream;
  strOutput: TBytesStream;
  Zipper: TZCompressionStream;
begin
  SetLength(Result, 0);
  strInput := TBytesStream.Create(TEncoding.UTF8.GetBytes(aText));
  strOutput := TBytesStream.Create;
  try
    Zipper := TZCompressionStream.Create(TCompressionLevel.clMax, strOutput);
    try
      Zipper.CopyFrom(strInput, strInput.size);
    finally
      Zipper.Free;
    end;
    Result := Copy(strOutput.Bytes, 0, strOutput.size);
  finally
    strInput.Free;
    strOutput.Free;
  end;
end;

class function TDSSupportZLib.ZDecompressString(aText: TBytes): string;
var
  strInput: TBytesStream;
  strOutput: TBytesStream;
  UnZipper: TZDecompressionStream;
begin
  Result := '';
  strInput := TBytesStream.Create(aText);
  strOutput := TBytesStream.Create;
  try
    UnZipper := TZDecompressionStream.Create(strInput);
    try
      try
        strOutput.CopyFrom(UnZipper, 0);
      except
        on E: Exception do
        begin
          raise Exception.Create('Error Message: ' + E.Message);
        end;
      end;
    finally
      UnZipper.Free;
    end;
    Result := TEncoding.UTF8.GetString(strOutput.Bytes, 0, strOutput.size);
  finally
    strInput.Free;
    strOutput.Free;
  end;
end;

end.

Porém, nenhuma implementação adicional será necessária em seu projeto. O que fizemos foi modificar a unit "Data.FireDACJSONReflect", onde estão implementadas as classes base do FireDAC JSON Reflection, adicionando a compressão/descompressão nos métodos de serialização JSON. Assim, basta adicionar esta versão da unit a seu projeto e fazer um "Build". Compressão/descompressão adicionadas!

Downloads e referências

EMBARCADERO CONFERENCE BRASIL!!!

Aproveitando a ocasião, já estamos preparando a conferência deste ano, e a página para submissão de palestras já está no ar! Se você tem algo interessante para mostrar, em Delphi e C++ Builder, ou ainda um caso de sucesso utilizando nossas ferramentas, estamos esperando por sua inscrição:

http://www.embarcaderoconference.com.br/palestrantes/

Tagged , , , ,

Update 1 para XE6 e outras novidades

O Update 1 para RAD Studio, Delphi e C++ Builder XE6 está disponível para usuários registrados. São mais de 120 correções e melhorias por todo o produto (30 deles registrados por usuários), reforçando nosso compromisso com a qualidade, performance e estabilidade da ferramenta.

Links para download

A lista de correções de problemas reportados por usuários pode ser encontrada neste link:

Notas relevantes

  • Observe que este update requer uma instalação completa do produto. O que você pode fazer é remover o produto preservando as configurações de instalação (registry settings), com isso todas as suas configurações - incluindo componentes de terceiros - serão preservadas. Importante: Remover o produto utilizando o procedimento de desinstalação padrão do Windows (pelo Painel de Controle) antes de iniciar com a nova instalação.
  • A IDE do RAD Studio, Delphi e C++ Builder apresenta um novo toolbar, onde é possível selecionar facilmente a plataforma (target platform) e também o device (target device), antes possível somente pelo project manager:

Buy One Tool, Get a Second Tool FREE!

Por um tempo limitado, a cada produto qualificado (RAD Studio, Delphi ou C++ Builder) que você compra, você pode escolher uma segunda ferramenta Embarcadero de valor igual ou menor - GRÁTIS! A oferta termina em 30 de junho de 2014!

Todos os detalhes aqui: https://www.embarcadero.com/br/bogo-info

Tagged , , ,

Fortes Report disponível para XE6

O FortesReport (não confundir com FastReport, nativo do Delphi, C++ Builder e RAD Studio) é um gerador de relatórios nacional, Open Source, produzido pela Fortes Informática de Fortaleza, exclusivamente para Delphi.

Em sua página oficial o download está homologado até a versão XE3 do Delphi. Porém, o usuário Willian Santos, da EdeSoft (parceiro de treinamentos da Embarcadero) atualizou o pacote para XE6 e os fontes estão disponíveis para download neste link:

http://cc.embarcadero.com/item/30001 (link atualizado)

IMPORTANTE: O fabricante original da ferramenta, e também o autor desta adequação para Delphi XE6, estão isentos de qualquer responsabilidade e suporte sobre esta versão em particular.

Tagged , ,

Suporte para Acessibilidade no FireMonkey

Disponibilidade

O suporte de acessibilidade FireMonkey está disponível para Delphi e C++ Builder XE6 para Windows Win32, Win64 e para aplicações Mac OS-X. Os usuários registrados podem baixar o pacote neste link:

http://cc.embarcadero.com/item/29850

Tecnologia

O suporte de acessibilidade FireMonkey é baseado na interface Microsoft MSAA para Windows ( Microsoft Active Accessibility arquitetura ) e no protocolo de acessibilidade do OS-X e para MAC.

As informações sobre as APIs podem ser encontradas em :

MSAA: http://msdn.microsoft.com/en-us/library/ms971310.aspx

OS-X: http://goo.gl/dguz6N

A implementação do Windows MSAA foi testado com Freedom Scientific JAWS e Microsoft Windows Narrador.

No Mac OS X, ele foi testado contra os aplicativos da Apple VoiceOver .

Arquitetura

Para implementar as interfaces de acessibilidade do sistema operacional, uma nova classe de formulário foi derivado do padrão FireMonkey TForm. Esta nova classe (TAccForm) tem uma implementação diferente para o sistema Windows e outra para OS-X, mapeando todas as interações necessárias com os controles do FireMonkey. Esta classe TAccForm tem tratamento interno para os controles mais comuns e padrões do FireMonkey. Isso significa que, além de descender seus forms de TAccForm em vez de TForm, o desenvolvedor não tem medidas adicionais a tomar para permitir a acessibilidade em aplicações FireMonkey.

Implementação

Para ativar um formulário FireMonkey para acessibilidade, primeiro adicione as unidades necessárias que implementam esta característica. A acessibilidade vem em 3 unidades: FMX.ScreenReaderCommon, FMX.ScreenReader.Mac e FMX.ScreenReader.Win:

uses
  System.SysUtils, System.Types, System.UITypes, System.Rtti,
  System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms,
  FMX.Dialogs, FMX.StdCtrls, FMX.ScreenReaderCommon
  {$IFDEF MACOS}
  , FMX.ScreenReader.Mac
  {$ELSE}
  , FMX.ScreenReader.Win
  {$ENDIF}
  ;

Em seguida, descenda seu form de TAccForm, em vez de TForm:

type
  TForm1 = class(TAccForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private
declarations }
  public
    { Public
declarations }
  end;

var
  Form1: TForm1;

Controles Suportados

A implementação de acessibilidade FireMonkey tem suporte automático para os seguintes controles do FireMonkey :

TButton
TSpeedButton
TTracker
TEdit
TListBox
TComboBox
TComboEdit
TSpinBox
TLabel
TCheckBox
TRadioButton
TMainMenu
TMemo
TTreeView
TCustomGrid
Isso significa que quando você usar qualquer um desses controles em seu aplicativo, não há medidas adicionais a tomar. O TAccForm vai corretamente permitir ao software leitor de tela "ler" o texto ou o "estado" destes controles. Note-se também que todos os controles descendentes também irão herdar automaticamente o suporte de acessibilidade .

Controles Personalizados

Para adicionar suporte para um controle personalizado para acessibilidade, adicione a interface IFMXAccessibility em seu controle ao implementá-lo.

O IFMXAccessibility é definida como :

  // Interface for custom controls to add accessibility support
  IFMXAccessibility = interface
  ['{49AF90E5-341A-4869-9D3E-F659670FB4D8}']
    // Return the text to read by the accessibility interface
    function GetControlText: string;
    // Returns the accesibility role of the custom control
    function GetRole: TFMXRole;
  end;

Portanto, esta interface é constituída por dois métodos simples :

GetRole: returns the role of the custom control
GetControlText: returns the text the screenreader should voice when the control has focus

Já o tipo TFMXRole é definida como :

TFMXRole = (rStaticText, rCell, RTEXT, rButton, rCheckBox, rRadioButton, rGrid, rList, rSlider, rComboBox, rTabGroup);

Assim, para um controle de edição personalizada, este pode ser implementado como :

type

  TMyOwnFireMonkeyEdit = class(TControl, IFMXAccessibility)
  protected
    function GetControlText: string;
    function GetRole: TFMXRole;
  end;

implementation

{ TMyOwnFireMonkeyEdit }

function TMyOwnFireMonkeyEdit.GetControlText: string;
begin
  Result := GetMyControlText,
end;

function TMyOwnFireMonkeyEdit.GetRole: TFMXRole;
begin
  Result := rText;
end;

Tagged , , ,

Hotfix 1 for RAD Studio, Delphi, C++ Builder XE6

Este Hotfix disponibiliza alguns arquivos ausentes na release final do RAD Studio XE6, além de resolver um par de questões críticas para alguns desenvolvedores (dependendo da região e plataforma que você está utilizando).

A correção está disponível para usuários registrados em http://cc.embarcadero.com/Item/29847.

As questões resolvidas são:

- Corrige um problema com o IME (Input Method) para iOS, relacionado apenas com idiomas asiáticos;

- Alguns arquivos de cabeçalho faltantes relacionados com Tethering e DBX específicos para C++;

- Alguns arquivos de distribuição da biblioteca REST (para todas plataformas);

- Arquivos atualizados de alguns temas da VCL;

Portanto talvez você não precise deste hotfix em seus projetos, mas considerando o tempo para baixar e instalar (apenas 65MB), vale a pena garantir seu ambiente de desenvolvimento 100% atualizado.

Se você é um novo usuário, ou usuário de versões anteriores, você pode baixar o produto neste link para testá-lo por 30 dias (sem nenhuma restrição de funcionalidade):

http://www.embarcadero.com/downloads

E finalmente, neste link você encontra uma biblioteca de vídeos para iniciar com o desenvolvimento multi-device com RAD Studio (iOS, Android, OS X e Windows 32/64 bit):

http://www.embarcadero.com/products/rad-studio/product-demos.

Tagged , , ,

Bad Behavior has blocked 0 access attempts in the last 7 days.

Close