It's All About Code!

A blog about Delphi and related technologies

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.

Advertisements

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!