úterý 17. října 2017

Podnikové konektory společnosti CData

S aplikacemi, které se obejdou bez jakékoliv integrace, se již dnes často nesetkáme. Zajištění propojení s externími systémy či službami se tak stává pro vývojáře a programátory jednou z největších výzev. Znamená to opustit důvěrně známé vody vlastního kódu a spoléhat se na nabízená rozhraní a k nim dostupnou dokumentaci. Jedná se tak zpravidla o časově náročnou záležitost a čas jsou peníze.

To si uvědomila i společnost CData a přišla s řešením, které je jednoduché, a především rychle aplikovatelné. Myšlenku, na které je technologie konektorů založena, nejlépe charakterizuje slogan, který má společnost CData na svých webových stránkách: "Dívejte se na svět jako na databázi".
CData vytvořila mezivrstvu, která využívá nativní API integrovaných systémů, aby ji následně uživatelům zpřístupnila, jako by se jednalo o standardní relační databázi, se kterou lze komunikovat s využitím standardního jazyka SQL. Tím odpadá nutnost studovat nové protokoly či API, které se navíc neustále vyvíjí a mění. Speciálně pro vývojová prostředí Delphi a C++Builder pak vznikla (a je dále rozšiřována) sada ovladačů pro použití s populární technologií FireDAC.

RAD Studio a konektory CData

Použití v aplikaci

Instalace jednotlivých konektorů jsou dostupné přímo z prostředí Delphi, C++Builderu nebo RAD Studia. Stačí spustit "GetIt Package Manager", (Hlavní nabídka prostředí -> Tools -> GetIt) a pro rychlejší nalezení požadovaného ovladače použít filtrování (je zde přímo kategorie "Connectors") nebo vyhledávání. Následně již jen spustíte instalaci zvoleného ovladače kliknutím na tlačítko "INSTALL".
GetIt - Instalace zvoleného konektoru

Po dokončení instalace nalezneme vybrané konektory v paletě nástrojů, v sekci "FireDAC Links".

Zobrazení ovladačů v paletě komponent

Práci s konektory si můžeme ukázat na propojení s emailovou službou Seznam. Založíme novou aplikaci VCL a pro uživatelské rozhraní použijeme komponenty "FDConnecion", "FDTable", "DBMemo", "ComboBox", "FDGUIxWaitCursor", "DataSource" a "DBGrid".

Pro vlastní připojení k serverům společnosti Seznam použijeme komponentu TFDConnection, kterou si pojmenujeme například "EmailCnn":

procedure TwMain.btnConnectClick(Sender: TObject);
begin
  EmailCnn.Connected := False;
  EmailCnn.Params.Clear;
  EmailCnn.Params.Add('DriverID=CData.Email');
  EmailCnn.Params.Add('User=adresa@email.cz');
  EmailCnn.Params.Add('Password=heslo');
  EmailCnn.Params.Add('Server=imap.seznam.cz');
  EmailCnn.Params.Add('SMTPServer=77.75.76.48');
  EmailCnn.Params.Add('Port=993');
  EmailCnn.Params.Add('MaxItems=10');
  EmailCnn.Params.Add('SMTPPort=465');
  EmailCnn.Params.Add('IncludeMessage=True');
  EmailCnn.Params.Add('IsHTML=False');
  EmailCnn.Connected := True;
  FDTable.Connection := EmailCnn;
end;

Po úspěšném připojení je třeba zvolit, která data má aplikace zobrazovat. V praxi to znamená vybrat si z tabulek, které jsou pro daný systém (v našem případě email) definovány. Zde se buď musíme podívat do dokumentace, zvolit tabulku dle názvu v okně ObjectInspector (musí být vybrána komponenta "FDTable" a připojena k aktivní "FDConnection"), nebo můžeme využít vlastností technologie FireDAC, načíst dostupné tabulky z „metadat“ a nechat výběr na uživateli.

procedure TwMain.ComboBox1Click(Sender: TObject);
var
  tbName: String;
  i: Integer;
begin
  tbName := ComboBox1.Text;
  FDQuery1.Active := False;
  FDQuery1.SQL.Clear;
  if tbName.Length > 0 then
    FDQuery1.SQL.Add('select * from ' + tbName);
  FDQuery1.Open();
  DataSource1.DataSet := FDTable;
  DBGrid.DataSource := DataSource1;
  DBMemo1.DataSource := DataSource1;
  DBMemo1.DataField := 'MessageBody';
end;

Protože tabulky, se kterými pracujeme jsou pouze virtuální a neříkají nic o skutečné struktuře systému, není zpravidla možné jednoduše vložit data do některé z tabulek. Může zde být řada vazeb a integritních omezení.
Pokud se budeme držet příkladu s e-mailovým serverem, je celkem zřejmé, že vložením záznamu do tabulky odeslané pošty k odeslání zprávy nedojde. I toto však CData řeší databázovými prostředky. Podobně jako virtuální tabulky, vytváří ovladač také sadu uložených procedur. Do projektu tak stačí přidat komponentu "FDStoredProcedure" a napojit ji na dříve definovanou "FDConnection". Pro požadovanou operace pak již jen stačí zavolat příslušnou proceduru.

procedure TwMain.btnSendEmailClick(Sender: TObject);
var
  result: Integer;
begin
  FDStoredProc1.Close;
  FDStoredProc1.FetchOptions.Items := FDStoredProc1.FetchOptions.Items - [fiMeta];
  FDStoredProc1.StoredProcName := 'CData.SendMailMessage';
  FDStoredProc1.Prepare;
  FDStoredProc1.Params.ParamByName('To').AsString := 'adresa@embt.cz';
  FDStoredProc1.Params.ParamByName('Subject').AsString := 'Předmět zprávy';
  FDStoredProc1.Params.ParamByName('From').AsString := 'adresa@email.cz';
  FDStoredProc1.Params.ParamByName('MessageBody').AsString := 'Tělo zprávy';
  FDStoredProc1.Params.ParamByName('Attachment#').AsString := 'C:\TMP\Priloha.txt';
  FDStoredProc1.Params.ParamByName('IsHTML').AsString := 'True';
  FDStoredProc1.Open;
  result := FDStoredProc1.Params.ParamByName('MessageId').AsInteger;
  if result > 0 then
    ShowMessage('ID odeslané zprávy: ' + IntToStr(result));
end;

Aktuálně je k dispozici 83 ovladačů pro populární podnikové systémy z oblastí ekonomiky, účetnictví, řízení vztahů se zákazníky (CRM) nebo řízení podnikových zdrojů (ERP). Dále jsou zde obsaženy konektory pro cloudové služby, platební systémy, datové formáty či sociální sítě.
Konektory nejsou nabízeny jednotlivě, ale v sadách. Vybrat si můžete variantu Enterprise nebo více vybavenou Enterprise+. Sada Enterprise obsahuje:

Sada Enterprise

V sadě Enterprise+ naleznete navíc ještě tyto konektory:

Sada Enterprise Plus