https://www.youtube.com/watch?v=YYAEDqlW8oo&t=1881s
DataSnap JsonReflect Nedir?
Veri alışverişini Json datasetler üzerinden yapmamızı sağlayan sistem. Bize veri alışverişinin başka uygulamalar tarafından da okunabilir olmasını karşı tarafa Json gönderdiğimiz için bunu başka bir uygulamada açma avantajını sağlar.
Sunucumuzu açarak başlayalım. File >New >Others >açılan ekranda >DataSnap açıyoruz>DataSnap REST Application>Windows>Stand- alone GUI application>VCL application> test porta tıklayarak boş olup olmadığını kontrol ediyoruz> Mobile Connectors – Server Module – Simplified Dispatcher seçiyoruz> TDSServerModule > Kayıt yerimizi seçiyoruz>Finish.Delphi bizim için DataSnapREST sunucusu oluşturdu Çalıştırdığımızda start’a tıkladığımızda artık web browser’da kontrol edebileceğimiz bir uygulamamız var. Projeyi kaydedelim. FormUnit1.pas→UMainSrv , diğerlerini aynı isimleriyle kaydediyoruz. ServerMethodsUnıt1> Palette> FDConnection – FDQuery -FDGUIxWaitCursor- FDStanStorageBinLink. FDConnection’a çift tıklayarak Database’imizi seçiyoruz. FDQuery’e çift tıklayarak tablomuzun içini dolduruyoruz. select * from cari >execute alt kısımda tablomuzun geldiğini görüyoruz. FDQuery >properties> Login prompt >False > FDQuery >Name→qCari. Kod kısmına gidiyoruz.
procedure TServerMethods1.DSServerModuleDestory(Sender : TObject);
begin
FDConnection1.Close;
end;
Artık FireDAC işlemlerine başlayabiliriz. Uses kısmına →Data.FireDACJSONReflect ekliyoruz. Public kısmına bir adet function yazıyoruz →function CariListele : TFDJSONDataSets. Shift +Ctrl +C ile kod satırına gidiyoruz. Yazacağımız kod JsonDataSetten ve firedac queryden gelen veriyi alıcak JsonDatSet’e çevirip result olarak karşı tarafa verecek.
function TServerMethods1.CariListele:TFDJSONDataSets;
begin
qCari.Active :=False;
Result :=TFDJSONDataSetsWriter.ListAdd(Result,’cari’,qCari);
end;
Çalıştırıyoruz >start open browser > Server Function >TServerMethods1 >CariListele >execute. JsonDataSet olarak result’ımız dönmüş oluyor. Fazladan veriler göreceksiniz dataset olduğu için bazı eklemeler çıkartmalar yapması gerekiyor. JsonDataSet modunda döndüğü için siz bu veriyi sisteme bu şekilde kurarsanız paylaştığınızda karşı taraftaki kişi bunu parse ettiği zaman okuyabilir olması lazım.
Bir tane daha function oluşturalım. Bu seferde sunucudan bir bilgi çektik birde karşı tarafa yazmamız gerekebilir bunu update fonksiyonu ile yapıyoruz. Public’in altına funtionumuzu yazalım→ function CariGuncelle(list:TFDJSONDeltas): Boolean. Shift + Ctrl +C ile otomatik açılan satırlarda kodumuzu yazmaya başlayabiliriz.
function TServerMethods1.CariGuncelle(List:TFDJSONDeltas): Boolean;
var
apply: IFDJSONDeltasApply
begin
Result:=False;
apply:= TFDJSONDeltasApplyUpdates.Create(List);
apply.ApplyUpdates(‘cari’, qCari.Command);
if apply.Errors.Create.Count >0 then
raise Exception.Create(apply.Errors.Strings.Text);
Result:= True;
end;
Sunucu kısmında yapacağımız işlemler bu kadar. Client tarafını yazarken sunucunun mutlaka çalışıyor olması gerekiyor. Uygulamamızı çalıştıralım ve client tarafını yazmaya başlayabiliriz. ProjectGroup1’e sağ tuş> add new project > Delphi > Multi Device Application >Blank Application. Uygulamamızı kaydediyoruz. Yeni klasör ekliyoruz→clnt, Unit2.pas→uMainClnt, Project1.dproj→JsonReflectClnt, ProjectGroup1.grouproj→pgjsonReflect şeklinde isimlendirerek kaydediyoruz. Client Module ekleyeceğiz. File >New >Others >DataSnap REST> Client Module →bunu eklerken server uygulaması açık olmalı. Açılan ekranda Local Server>Next >değişiklik yapmadan next >Test Connection >bağlantı başarılı ise finish. DataSnapServer ile kolay haberleşebilmemiz için delphi bizim için ekledi bunu da kaydediyoruz. Use unit ile clientmodule’i ekliyoruz. ClientModuleUnit2’ye >Palette >FDMemtable – FDStanStorageBinLink – FDGUIxWaitCursor ekliyoruz. uMainClnt kısmına >palette >Toolbar- Grid -BindNavigator ekliyoruz. BindNavigator >align >bottom. Grid>align >client. Live Bindings Designerdan Grid ile MemTable’ı ve sonrada Navigator’ü bağlıyoruz. Kod kısmına geçiyoruz. Uses kısmına→ data.FireDACJSONReflect; yazıyoruz. ClientModuleUnit2 kısmının uses kısmınada →data.FireDACJSONReflect; yazıyoruz.ClientModuleUnit2 de FDMemtable >name →memCari. Public kısmına →function CariAl: Boolean; Shift + Ctrl + C ile kod kısmına iniyoruz.
function TClientModule2.CariAl : Boolean,
begin
var
list:TFDJSONDataSets
memCari.Close;
list:ServerMethods1.Client.CariListele();
memCari.AppendData(TFDJSONDataSetsReader.GetListValueByName(list,‘cari’));
memCari.CachedUpdates:=True;
memCari.Open;
end;
uMainClnt’e arayüz için eklemeler yapacağız. Toolbar’ın içine Palette > Button >name →btnCariListele >text →Cari Listele – align>left. Buttona çift tıklıyoruz.
procedure TForm2.btnCariListeleClick (Sender : TObject);
begin
ClientModule2.CariAl;
end;
end.
Çalıştırıyoruz CariListele butonuna tıklıyoruz ve verileri görüyoruz. Palette>Button ekliyoruz. Button >align >right. Public kısmına function oluşturuyoruz →function CariGuncelle; Shift +Ctrl +C ile kod satırına iniyoruz.
procedure Tform2.CariGuncelle ;
var
deltas:TFDJSONDeltas;
begin
try
ClientModule2.memCari.Post;
except
end;
deltas:= TFDJSONDeltasWriter.ListAdd(deltas,’cari’, ClientModule2.memCari);
ClientModule2.ServerMethods1Client.CariGuncelle(deltas);
ClientModule2.CariAL;
end;
end.
Button1 >name →btmGuncelle(oluşturduğumuz fonksiyonu buradan çağırıyoruz.) Çift tıklıyoruz.
procedure TForm2.btnGuncelleClick(Sender:TObject);
begin
CariGuncelle;
end;
Çalıştırıyoruz, Cari Listele butonuna tıklıyoruz veriler geliyor. Navigatorden ekleme(+) yapıyoruz btnGuncelle ile gönderiyoruz karşıya. Uygulamayı kapatıp açıyoruz eklediğimiz kaydın geldiğini görüyoruz.