It's All About Code!

A blog about Delphi and related technologies

Desenvolvimento WEB no Delphi Academy

Screen Shot 2017-12-27 at 18.20.46

O Delphi Academy está de férias (somente ele…), mas estou aqui para relembrar os últimos 3 episódios deste ano, sobre desenvolvimento WEB com Delphi e C++ Builder, e também para convidá-los para nossa próxima temporada em 2018!

Ao todo foram 3 episódios falando de desenvolvimento WEB com Delphi e C++ Builder, por sinal,  os episódios mais longos da temporada! E, atendendo a pedidos, teremos mais episódios sobre WEB no próximo ano.

O objetivo desta série foi mostrar as principais arquiteturas para a criação de aplicações WEB com o RAD, apresentar o quanto isso é fácil, escalabilidade, etc.

No primeiro episódio falamos sobre os principais conceitos do desenvolvimento WEB (HTML, CSS, JavaScript), e então entramos no mundo do WebBroker, o primeiro framework WEB a ser parte do RAD.

Além de explorar os principais conceitos do WebBroker, apresentamos exemplos de integração com frameworks JavaScript em geral, como o JQuery. Os exemplos deste episódio, bem como todos os demais, podem ser encontrados aqui: https://github.com/flrizzato/DelphiAcademy

Já no segundo episódio, partimos para o famoso IntraWeb, e apresentamos como criar aplicações realmente profissionais integrando IW com BootStrap. O resultado é realmente interessante!

E encerrando o ano do Delphi Academy com tudo, já no terceiro episódio, falamos de RAD Server para o backend, e Sencha Ext JS para a interface, uma combinação realmente poderosa!

Vale lembrar que a partir de agora, clientes com versões atuais e contrato de manutenção vigente, recebem uma licença ilimitada para um servidor do RAD Server. É um ótimo benefício agora parte de sua licença RAD.

É bastante provável que iremos explorar melhor o Ext JS nos próximos episódios, e também muito do RAD Server.

Se você tem um tema que gostaria de ver no Delphi Academy, deixe seu comentário abaixo, ele será muito bem vindo!

Boas festas para todos e até 2018 com a terceira temporada do Delphi Academy!

— Fernando.

Advertisements

RAD Server: Opções de Licenciamento

Recebemos muitas perguntas dos clientes ultimamente relacionados às opções de licenciamento do RAD Server. O RAD Server oferece muitos benefícios. Os desenvolvedores podem rapidamente criar e implantar aplicativos baseados em serviços e obter economias significativas de custos. O melhor de tudo, ao contrário de outras opções existentes, os custos do RAD Server não aumentam à medida que você escala o uso.

Os recursos, como o suporte multi-tenancy, adicionados no Tokyo 10.2, ajudam ainda mais os clientes a perceber economias significativas.

Se você é um desenvolvedor Delphi ou C++, o RAD Server é a sua opção de back-end mais eficiente e ideal para ISVs e OEMs que criam soluções redistribuíveis.

Reunimos algumas ilustrações para destacar as opções de implantação. Estes irão ajudá-lo a compreender sobre os diferentes modelos de licenciamento e distribuição disponíveis para o RAD Server. 

Cenário #1: Um ISV criando soluções para várias empresas, buscando tirar proveito do suporte multi-tenancy do RAD Server.

https://community.embarcadero.com/uploads/397/Copy_of_RADServer_License_UseCases_Final.pngISVs que estão construindo soluções para várias empresas requerem apenas uma única licença RAD Server (também conhecido como “site license”) ao usar um único banco de dados interno RAD Server. Isso significa que eles só teriam uma única implantação do RAD Server. Nesse caso, um ISV poderia usar o suporte de multi-tenancy interno para suportar mais de uma empresa, enquanto apenas possui uma única implantação do servidor RAD (com um único banco de dados interno do RAD Server).

* Licença necessária para o cenário acima: Single Server

Cenário #2: Um ISV criando soluções para várias empresas que requerem implantações separadas do RAD Serve

Os ISVs que criam soluções para várias empresas com implantações separadas do RAD Server (bancos de dados internos diferentes do RAD Server) requerem várias licenças de servidor (também conhecido como “site license”) ou uma licença multi-servidor (também conhecido como “multi-site”). Este ISV não está utilizando o suporte incorporado multi-tenancy do RAD Server.

* Licença necessária para o cenário acima: vários “Single Server” ou um “Multi-Server”

Cenário #3: Uma única empresa que criou uma solução RAD Server para seus vários escritórios em diferentes locais

Uma única empresa com vários escritórios e locais diferentes pode usar uma única licença do servidor RAD (também conhecido como “site license”) para criar uma solução de servidor RAD se eles apenas desejam fazer uma única implantação do servidor RAD. Eles poderiam configurar um único tenancy e lidar com permissões no nível de usuário e grupo usando o suporte interno para isso. Alternativamente, eles poderiam configurar vários tenancy (ou seja, um para cada local). Em ambos os casos, haveria apenas uma única implantação do RAD Server com um único banco de dados interno do RAD Server.

Se eles desejarem fazer implantações separadas do RAD Server, então podem considerar o mesmo do Cenário #2

* Licença necessária para o cenário acima: Single Server

Cenário #4: Uma única empresa com um único local de escritório

Uma única empresa com uma única localização de escritório que procura construir e implantar uma solução RAD Server. Isso pode ser uma startup ou uma grande empresa que procura aproveitar a solução do RAD Server para gerenciar seus registros de funcionários e dados de clientes, por exemplo.

* Licença necessária para o cenário acima: Single Server

Benefícios adicionais do servidor RAD

Em resumo, para a maioria dos cenários, você pode começar com uma Licença Single Server, e ao adicionar usuários e tenants, o custo permanece o mesmo!

Nós também fornecemos vários recursos adicionais gratuitamente:

BeaconFence: Acompanhe o movimento do usuário tanto em ambientes fechados como externos e responda a eventos de proximidade quando os usuários entram ou saem de zonas de beacons personalizadas ou abordem pontos de beacons designados. Nossa patente BeaconFence está incluída no RAD Server (Ferramentas> GetIt Package Manager> Internet of Things). Você pode usar o editor de mapas móveis do Woll2Woll para ainda mais opções de implantação do BeaconFence.

Suporte à internet de coisas: o IoT Edgeware amplia a funcionalidade da REST Endpoint Publishing e fornece um ponto de acesso entre aparelhos e dispositivos remotos. O IoT Edgeware permite armazenar, filtrar e calcular localmente vastas quantidades de dados IoT coletados, garantindo apenas que dados críticos sejam sincronizados com o repositório central. Os desenvolvedores têm acesso a mais de 50 componentes pré-construídos para muitos dispositivos populares e configuram ainda mais.

Console de Gerenciamento do RAD Server Personalizável: Personalize a UI do Portal Web do RAD Server Analytics para combinar sua marca corporativa. O código-fonte para os recursos HTML/CSS/JS é fornecido para a personalização do Portal.

Recursos Adicionais

a) Ajuda do RAD Server: Este documento fornece uma boa visão geral sobre o RAD Server, como ele se compara ao DataSnap e links para recursos iniciados.

b) Projetos de exemplo: estamos trabalhando ativamente em modelos da indústria para o RAD Server para ajudá-lo a começar mais rápido com a construção da solução RAD Server. Verifique o GetIt Package Manager frequentemente por estes recursos úteis, pois mais serão adicionados ao longo do tempo.

c) Estudo de caso: Foresiight explica como eles tomaram um grande e existente aplicativo cliente-servidor Delphi migrando-o para a nuvem, a web e agora para o celular usando o RAD Server.

 

Delphi + Enterprise Connectors + RAD Server = SAP native client for iOS and Android

Enterprise Connectors allows you to connect from Delphi and C++ Builder to 80+ enterprise data sources: https://www.embarcadero.com/products/enterprise-connectors.

Between these data sources, we have SAP, one of the most used ERPs in the world.

Screen Shot 2017-11-17 at 17.25.30.png

To demonstrate how easy is to connect SAP using the Enterprise Connectors with FireDAC, I decided to build a native mobile client for Android and iOS, using Delphi and FMX on the client side, and RAD Server/FireDAC on the server side.

Solution overview

In summary, the idea is to allow a mobile application to display data directly from SAP in real time, for example, showing a summary of the sales in a period.

To accomplish this task we’ll have a FireDAC SAP connection in our RAD Server implementation, which will allows us to query the Sales Document entity via NetWeaver: http://www.se80.co.uk/saptables/v/vbak/vbak.htm

The cool thing from the Enterprise Connectors is that, you basically can issue standard SQL ANSI queries against any supported data source, easy as 1,2,3.

Server Implementation

Our server application is actually a RAD Server application used to publish the REST APIs that we’ll need. Before starting, I have installed the SAP driver from the Enterprise Connectors collection that are available in the GetIt as a trial: https://community.embarcadero.com/blogs/entry/enterprise-connectors-are-now-live

Our server has just one method, responsible for grabbing the data from the VBAK entity, which is serialized as JSON using the TFDSchemaAdapter:

procedure TSAPEMSServerResource1.Get(const AContext: TEndpointContext; const ARequest: TEndpointRequest; const AResponse: TEndpointResponse);
var
 fMem: TMemoryStream;
begin
 fMem := TMemoryStream.Create;
 try
 VbakView.Open;
 FDSchemaAdapter1.SaveToStream(fMem, TFDStorageFormat.sfJSON);
 AResponse.Body.SetStream(fMem, 'application/json', True);
 except
 on E: Exception do
 begin
 fMem.Free;
 raise;
 end;
 end;
end;

Mobile Client Implementation

Our client application has a ListView using the Dynamic Appearance style to display the sales data, and a TChart displaying the sales total by department.

Screen Shot 2017-11-17 at 18.00.09

procedure TMainForm.FormCreate(Sender: TObject);
begin
 chartResult.Series[0].Clear;
end;

procedure TMainForm.SpeedButton1Click(Sender: TObject);
var
 i: integer;
 MyThread: TThread;
begin
 EMSFireDACClient1.GetData;
 FDMemTable1.Open;

FDConnection1.Open;
 FDQuery1.Open;

MyThread := TThread.CreateAnonymousThread(
 procedure
 begin
 while not FDQuery1.Eof do
 begin
 TThread.Synchronize(MyThread,
 procedure
 begin
 chartResult.Series[0].Add(FDQuery1.FieldByName('TOTAL').AsFloat,
 FDQuery1.FieldByName('VKORG').AsString);
 end);
 FDQuery1.Next;
 end;
 end);
 MyThread.Start;
end;

One thing to notice in the code above, I’m using the FireDAC’s LocalSQL feature to execute one SQL query that summarize the data and fills the graph in the client side, avoiding additional calls to the server (in this case NetWeaver) and increasing the client performance.

CodeRage: Building mobile apps that connects to Salesforce and SAP/R3

I’ll be talking at CodeRage XII about the new Enterprise Connectors. The Enterprise Connectors has 80+ data sources available, but for this presentation my focus will be directed more to enterprise solutions, in particular SAP and Sales Force.

During the presentation we’ll understand how to get and update data for these two platforms, and how to create mobile clients to attend remote users using both DataSnap and RAD Server.

So, stay tuned in this blog post, I’ll update this entry after my presentation with the samples and slides.

You can see the full program at:  https://community.embarcadero.com/blogs/entry/coderage-xii-sessions-and-schedule

This year the online conference will be hosted both on GoToWebinar and on Embarcadero Academy at https://www.embarcaderoacademy.com/p/coderage-xii, where you can sign up and see the detailed schedule.

Don’t miss it!

Delphi + Enterprise Connectors + DataSnap = Salesforce native client for iOS and Android

Enterprise Connectors allows you to connect from Delphi and C++ Builder to 80+ enterprise data sources: https://www.embarcadero.com/products/enterprise-connectors.

Between these datasources, we have Salesforce, probably the #1 CRM in the world.

To demonstrate how easy is to use the Enterprise Connectors with FireDAC, I decided to build a native Salesforce mobile client for Android and iOS, using Delphi and Firemonkey on the client side, and DataSnap/FireDAC on the server side.

Solution overview

In summary, the idea is to allow the mobile application to display data from Salesforce cases, a kind of support case management that is part of their CRM solution.

To accomplish this task we’ll have an FireDAC Salesforce connection in the DataSnap server, which will allows us to validate the user credentials, as well to query the cases entries directly from the Salesforce in the clouds.

The cool thing from the Enterprise Connectors is that, you basically can issue standard SQL ANSI queries against any supported data source, easy as 1,2,3.

Server Implementation

Our server application is an standard Datasnap REST server application. Before starting, I have installed the Salesforce driver from the Enterprise Connectors collection that are available in the GetIt as a trial: https://community.embarcadero.com/blogs/entry/enterprise-connectors-are-now-live

 

As you can see in the image, it’s a standard FireDAC implementation, the only difference from connecting a regular database are the parameters. In this case, for Salesforce, you can create an developer account in https://developer.salesforce.com.

Our server has only two methods, one to authenticate the user, and another one to grab some Salesforce data:

function TServerMethods1.DoUserLogin(fUserName, fPassword: string): boolean;
begin
 FDCnn.Params.UserName := fUserName;
 FDCnn.Params.Password := fPassword;
 try
 // open the connection to validate the user/pass
 FDCnn.Open;
 Result := True;
 // close the connection after the validation
 FDCnn.Close;
 except
 on E: Exception do
 raise Exception.Create('UserLogin: ' + E.Message);
 end;
end;

function TServerMethods1.GetSFCases(fUserName, fPassword: string)
 : TFDJSONDataSets;
begin
 // active the connection
 FDCnn.Params.UserName := fUserName;
 FDCnn.Params.Password := fPassword;
 FDCnn.Open;

// serialize the dataset
 CaseTable.Close;
 Result := TFDJSONDataSets.Create;
 TFDJSONDataSetsWriter.ListAdd(Result, CaseTable);
end;

Again, it’s a standard DataSnap/FireDAC server, serializing and returning the JSON data to the client, in this case an multi device application with FMX.

Mobile Client Implementation

Our client application has a login form, a ListView using the Dynamic Appearance style to display the cases data, and an third tab that shows all the selected case details.

 

The data is de-serialized back to a TFDMemTable using the FireDAC reflection classes, as you can see in the excerpts below:

function TMainDM.UserLogin: boolean;
begin
 Result := False;
 DSRestCnn.Host := fServerIP;
 if ServerMethods1Client.DoUserLogin(fUserName, fPassword) then
 begin
 SaveLoginData;
 Result := True;
 end;
end;

procedure TMainDM.LoadSFCases;
var
 LDataSetList: TFDJSONDataSets;
begin
 DSRestCnn.Host := FServerIP;
 LDataSetList := ServerMethods1Client.GetSFCases(fUserName, fPassword);

CaseMemTable.Close;
 CaseMemTable.AppendData(TFDJSONDataSetsReader.GetListValue(LDataSetList, 0));
 CaseMemTable.Open;
end;

There are some other details in the client application, like saving the login information, the general app workflow, look&feel and etc., that you can review downloading the samples in the link by the end of this post.

 

All the source code from this sample is located here, in my personal GitHub: https://github.com/flrizzato/CDATA

And stay tuned, next week I’ll show how you can easily connect an real SAP/R3 implementation directly from an Delphi or C++ Builder, and display/modify some data from the ERP, with almost no code!

ps: in order to run the sample, you’ll need to create an Salesforce developer account and add the login information and security token in the FireDAC connection before trying to run.

 

 

Delphi Academy: Prototipos de UI

Esta semana llevamos al aire otro episodio sobre desarrollo de apps en el Delphi Academy. En este episodio presentamos algunos ejemplos que pueden ser utilizados como base para la creación de nuevas aplicaciones, los llamados prototipos.

El objetivo fue concentrar en estos ejemplos el conocimiento obtenido en los episodios anteriores sobre desarrollo móvil, en busca de modelos profesionales de apps.

También hablamos sobre diálogos modales, y aplicaciones con múltiples formularios, entonces si tiene dudas en esta área, vale la pena una visita a nuestro playlist aquí!

Aquí hay algunos ejemplos de los proyectos que se han puesto a disposición en nuestro repositorio de fuentes:

Realmente espero que sea útil de alguna manera, y en el próximo episodio, hablaremos de entrada de datos en FMX!

Inscripciones siempre abiertas, 24×7!

Delphi Academy: Protótipos de UI

Esta semana levamos ao ar mais um episódio sobre desenvolvimento de apps no Delphi Academy. Neste episódio apresentamos alguns exemplos os quais podem ser utilizados como base para a criação de novas apps, os chamados protótipos.

O objetivo foi concentrar nestes exemplos o conhecimento obtido nos episódios anteriores sobre desenvolvimento mobile, em busca de modelos profissionais de apps.

Também falamos sobre diálogos modais, e aplicações com múltiplos formulários, então caso tenha dúvidas nesta área, vale a pena uma visita ao nosso playlist aqui!

Eis aqui alguns exemplos dos projetos que foram disponibilizados em nosso repositório de fontes:

Realmente espero que seja útil de alguma forma, e no próximo episódio, falaremos de entrada de dados em FMX!

Inscrições sempre abertas, 24×7!