Einzelnen Beitrag anzeigen

linxxruxx

Registriert seit: 19. Aug 2019
28 Beiträge
 
#1

HTTPS Post an Server in einer Queue senden

  Alt 20. Sep 2019, 10:10
Hallo,

ich arbeite noch nicht lange in Delphi. Habe zu meinem Thema viel gegoogelt und seh den Wald vor lauter Bäumen nicht mehr.

Folgendes:
Ich habe eine SQL-Lite Datenbank in Delphi erstellt, welche Aufträge enthält (ID, ServicePartnerID, Auftragsart,..., SentToServer).
Habe verschiedene Queries erstellt, um den Auftrag zu erstellen, zu befüllen und zu laden.
Diese Vorgänge geschiehen alle in der App, wenn jemand die Aufträge bearbeitet etc.
Änderungen werden also bei mir in Delphi in die SQL-Lite Datenbank in eine neue Tabelle (AuftraegeCache) gespeichert.
Nun möchte ich die bearbeiteten Aufträge auch, wenn Serververbindung besteht, ans Backend schicken.

Mein Plan:
- In einer Unit eine MemTable mit den geänderten Aufträgen der AuftraegeCache-Tabelle laden

- Die Memtable durchgehen und auf den Boolean (SentToServer = false) prüfen

- Ist der Eintrag der Memtable auf false, geh in eine Warteschlange und warte dort so lange bis Verbindung zum Server besteht

- Wurde Verbindung zum Server hergestellt, versende den Auftrag an den Server

- Kommt eine Antwort vom Server, dass das Senden erfolgreich war, setzte das Feld SentToService auf True

- nächsten Eintrag der Memtable und alles von vorne-




Die Memtable zu befüllen, in einer
Code:
while not Memtable.Eof
durch die Memtable gehen und auf
Code:
if FDMTAuftragCache.FieldByName('SentToServer') = false then
prüfen habe ich bereits gemacht..
Wie ich allerdings in der if-Anweisung eine Queue erstelle und den Auftrag dann an den Server schicke weiß ich allerdings überhaupt garnicht ...

Es wäre so lieb, wenn mir jemand hilft.
Ich weiß ihr braucht immer Code-Beispiele aber mehr als das was ich erklärt habe, habe ich derzeit nicht.



Delphi-Quellcode:
unit SendeCacheUnit;

interface

uses FireDAC.Comp.Client, FireDAC.Comp.DataSet, Data.DB,
   Data.FireDACJSONReflect, DBHelperUnit;

procedure SendeCache(Sender: TObject);

implementation

procedure SendeCache(Sender: TObject);
Var
   FDMTAuftragCache: TFDMemTable;
   LDataSetList: TFDJsonDataSets;
begin


   FDMTAuftragCache := TFDMemTable.Create(nil); //erstelle die Tabelle und füge Felder hinzu
   FDMTAuftragCache.FieldDefs.Add('id', ftInteger, 0, false);
   FDMTAuftragCache.FieldDefs.Add('ServicePartnerID', ftInteger, 0, false);
   FDMTAuftragCache.FieldDefs.Add('BenutzerID', ftInteger, 0, false);
   FDMTAuftragCache.FieldDefs.Add('Auftragsart', ftString, 0, false);
   FDMTAuftragCache.FieldDefs.Add('Status', ftString, 0, false);
   FDMTAuftragCache.FieldDefs.Add('Zeitstempel', ftString, 0, false);
   FDMTAuftragCache.FieldDefs.Add('ZeitstempelUpdate', ftInteger, 0, false);
   FDMTAuftragCache.FieldDefs.Add('SentToServer', ftBoolean, 0, false);

   LDataSetList := DBHelperUnit.DBHelper.ladeAuftraegeCache; //befülle die Tabelle durch die Datenbankabfrage
   FDMTAuftragCache.AppendData(TFDJSONDataSetsReader.GetListValue
      (LDataSetList, 0));
   FDMTAuftragCache.Open;

   while not FDMTAuftragCache.Eof do //solange nicht am Ende Der Tabelle, geh durch die Tabelle
   begin

      if FDMTAuftragCache.FieldByName('SentToServer') = false then //wenn noch nicht an den Server gesendet wurde, geh in die Anweisung
      begin

//hier soll der Eintrag in einer Queue warten, bis Serververbindung besteht und dann mittels HTTPs den Eintrag an den Server schicken..
//wenn dann Antwort vom Server kommt, wird der Boolean SentToServer auf true gesetzt und man beginnt mit dem nächsten Auftrag


      end;

   end;

end;

end.
Viele Grüße

Geändert von linxxruxx (20. Sep 2019 um 10:14 Uhr)
  Mit Zitat antworten Zitat