Ein Anwendungsbeispiel Mandanten--Eco.

Ein Anwendungsbeispiel Mandanten--Eco.


Die Anwendung werden wir bauen kann verwendet werden, für die Erfassung von Arbeitszeit und Pausen während der Arbeitszeit. Die Arbeitszeit erfasst werden kann, mit mehreren Clients und die Server-Anwendung bietet eine Übersicht über alle erfassten Daten.
[Client-Teil]

Sie beginnen mit der Einrichtung einer Winform-Eco-Anwendung. Der Kunde ist diese Anwendung. Ich nannte sie WorkTimeClient.
Du musst die UML-Klassen in einem Paket zu haben, damit Sie sie später an die Server-Anwendung hinzufügen können.
New File - ECO UML Package
Erstellen Sie das folgende Modell:

WorkTime Model

Arbeitszeit und Breaktime sind spezialisierte Klassen einer TimeSpan. Eine Arbeitszeit kann mehrere Breaktimes haben.
Der Betrieb CalcTotal gibt zurück, die Timespan eine Arbeitszeit durch die kumulierten Zeitspannen die Breaktimes reduziert. Das Ergebnis des Calctotal ist im Diff-Attribut der Klasse Arbeitszeit festgelegt. Stellen Sie sicher, dass die Klassen entsprechend die folgenden Code-Schnipsel zu ändern:

timestartend.calcTotal()-Funktion: Timespan;
beginnen
Ergebnis: = Timespan(Self.endtime-Self.starttime);
Ende;
worktime.calcTotal()-Funktion: Timespan;
var
IB: IbreaktimeList;
i: Integer;
beginnen
IB: = Get_breaktime;
für i: = 0, Ib. Count-1 fangen
Self.diff: = Self.diff - Ib. Element [i] .calcTotal;
Ende;
am Ende; breaktime.get_diff-Funktion: TimeSpan;
beginnen
Wenn Sie hier den Benutzercode hinzufügen, entfernen Sie das Attribut [EcoAutoMaintained]
aus der Property-Deklaration im Abschnitt Schnittstelle
Ergebnis: = Timespan(Self._endtime-Self._starttime);
am Ende; worktime.get_diff-Funktion: TimeSpan;
beginnen
Wenn Sie hier den Benutzercode hinzufügen, entfernen Sie das Attribut [EcoAutoMaintained]
aus der Property-Deklaration im Abschnitt Schnittstelle
Ergebnis: = TimeSpan (Self._endtime - Self._starttime);
Ende;

Jetzt kompilieren Sie die Anwendung, wechseln Sie zu der Ecospace-Designer sowie die Ecospace das Paket hinzu. Eine PersistenceMapperXml Komponente auf die Ecospace damit Sie den Client ohne entwickeln müssen für den Serverteil bisher zu setzen. Legen Sie den Dateinamen der Persistencemapper auf data.xml oder was auch immer Sie gut Suiten.
Wechseln Sie jetzt zu der WinForm-Anwendung, und erstellen Sie eine Oberfläche ähnlich wie diese:WorkTimeClient Frontend
Fügen Sie zwei Ausdruck Handles und Datensatzzeigerverwaltung Handles für die Datagrids.
Um die letzte fügen Zeile des Datagrid ausgewählt Sie folgenden Code in das Paint-Ereignis des Datagrids:

Prozedur TWinForm.DataGrid1_Paint (Absender: System.Object; e: System.Windows.Forms.PaintEventArgs);
beginnen
DataGrid1.BindingContext [dataGrid1.DataSource,
dataGrid1.DataMember]. Lage: = ehWorkTime.GetList.Count;
cmhWorktime.Position: = ehWorkTime.GetList.Count;
Ende;

Wahrscheinlich gäbe es klügere Orten gesagt – aber ich kenne sie nicht ;-)
Aber lass es mich wissen, falls Sie wissen.
Für den einzelnen Client-Test der app können Sie einfach zuweisen der Update Datenbank EcoAction Schaltfläche DB aktualisieren – während in der Multi-Client-Einstellung, die Sie benötigen Sie den folgenden Code:

var
c: IChange;
beginnen
EcoSpace.PersistenceService.RetrieveChanges;
c im EcoSpace.PersistenceService.GetChanges do
Wenn c.IsDirectConflict dann c.Action: = ChangeActionKind.Discard else
c.Action: = ChangeActionKind.Keep;
EcoSpace.PersistenceService.ApplyAllChanges;
Ende;

Dieser Code ruft über die EcoSpace Persistenzdienst alle permanente Änderungen. Es könnte in einer Multi-Client-Umgebung passieren, dass jemand Daten geändert, die Sie bereits in Ihrem lokalen Ecospace Cache verändert hatte. Der Persistenzdienst gibt Ihnen die Fähigkeit, entstehen Konflikte, wenn das der Fall ist. Ich habe unserem Fall (Loging Arbeitszeit), es aber nicht geschehen sollte.
Doch nachdem Sie die Änderungen abgerufen gehen Sie via für... in Schleife über ihnen zu überprüfen, ob Sie einen Konflikt oder nicht haben. Sie müssen für jede IChange-Schnittstelle in die GetChanges-Liste die Aktion verwendet werden, wenn die ApplyAllChanges-Prozedur aufgerufen wird.
Wenn Sie der Client, so beendet ist nur noch für Client-Server aktivieren, die Persistencemapper zu ändern. Wir brauchen eine PersistenceMapperClient Komponente auf unsere ECOSpace, da es sich nicht in der ECO-Componet-Palette standardmäßig. Wir haben es wie folgt hinzu:

  • Rechtsklick auf die Tool-Palette, und wählen Sie 'NET installierte Komponenten' aus dem Popup-Menü.

Adding the peristence mapper client
Dann ziehen Sie es an die Öko-Kategorie.
Löschen des PersistenceMapperXML-Clients aus der Ecospace- and -drop die PersistenceMapperClient drauf. Legen Sie die Url-Eigenschaft auf 'Tcp://localhost:8000 / TestServer1' – da wir den Server müssen einen Client läuft auf unserem lokalen Rechner vor der Bereitstellung.


Speichern Sie das Projekt und schließen Sie es zu oder lassen Sie offen, wenn Sie Client und Server in einer Projektgruppe haben möchten. Seit es wird nicht ausführen, solange wir unseren Server entwickelt haben - läuft da die Sockel der Peristencemapperclient eine Verbindung mit registriert werden wird nicht.

[Den Serverteil]

Erstellen Sie ein neues ECO-WinForm-Anwendung-Projekt. Ich nannte sie WorkTimeServer.
Fügen Sie die Arbeitszeit-Klassen-Paket und ein Mapper-Persistenz-Provider:

Adding the ECO persistence mapper provider

In unserem Beispiel verwenden wir Interbase mit der BDP. So fallen Sie eine PersistenceMapperBdp und eine BdpConnection Komponente auf die PersistanceMapperProvider ECOSpace. Die PersistenceMapperBDP für Interbase richten Sie ein und konfigurieren Sie die Verbindung des BDPConnection entsprechend der lokalen Umgebung. Sie müssen nur eine leere Datenbank einrichten. Die Tabellen werden später über die Mapper-Persistenz-Provider erstellt.
Gehen Sie auf die Ecospace (nicht die Persistencemapperprovider sondern derjenige der WinForm-Anwendung verbunden) und wählen Sie das Arbeitszeit-Paket aus der Liste der verfügbaren Pakete:

Adding the WorkTime calsses
Kompilieren Sie das Projekt, und wählen Sie die EcoSpaceType für die Mapper-Persistenz-Provider verwendet werden. (Klicken Sie auf die Oberfläche der Mapper-Persistenz-Provider und wählen sie aus der Dropdown-Liste im Objektinspektor).
Sie können jetzt auf die Schema generieren-Schaltfläche am unteren Rand der EcoPersistanceMapper-Anbieter klicken. Das Ergebnis sollte wie folgt aussehen:

ECO createt DB Mapping
Jetzt musst du den Code für Remoting in den Persistenz-Provider Mapper kommentieren. Vergessen Sie nicht, kommentieren die Deklaration der Prozedur und fügen Sie die erforderlichen Implementierung verwendet-Anweisung, wie in den Kommentaren erwähnt.

Beispielcode für das Registrieren des Anbieters als Server verwenden
binäre Formatierung auf einem TCP-Kanal.
Fügen Sie Folgendes in Ihrer Umsetzung Ebene verwendet-Anweisung, wenn Sie den Code auskommentieren
System.Runtime.Serialization.Formatters, System.Runtime.Remoting, System.Runtime.Remoting.Channels, System.Runtime.Remoting.Channels.Tcp;class Verfahren TEcoPersistenceMapperProvider.RegisterTcpServer(Port: integer);
var
Anbieter: BinaryServerFormatterSinkProvider;
Requisiten: IDictionary;
Chan: TcpChannel;
beginnen
Anbieter: = BinaryServerFormatterSinkProvider.Create;
Anbieter. TypeFilterLevel: = TypeFilterLevel.Full; Für Serialisierungen benötigt
Requisiten: = Hashtable.Create;
Requisiten ['Port']: = Port;
Chan: = TcpChannel.Create (Requisiten, Nil, Provider);
ChannelServices.RegisterChannel(chan);
RemotingConfiguration.RegisterWellKnownServiceType)
typeof(TEcoPersistenceMapperProvider),
'TestServer1',
WellKnownObjectMode.Singleton);
Ende;

Legen Sie das Attribut SyncActive auf True, um das Einrichten der Mapper-Persistenz-Provider abzuschließen. Sie können auch den Wert der Attribute MaxOpenConnections und MaxPoolConnections erhöhen, haben Sie viele Kunden verbinden mit dem Server.
Nun fügen Sie eine PersistanceMapperClient hinzu die Ecospace. Legen Sie die Url-Eigenschaft auf Tcp://localhost:8000 / TestServer1 oder das RegisterTCPServer-Verfahren Sie dort versorgt auf die Werte geändert.
Wir haben die RegisterTCPServer-Komponente aufrufen, bevor der PersistenceMapperClient initialisiert wird. Um zu tun, also Änderung folgt der Konstruktor von EcoSpace als:

Konstruktor TWorkTimeServerEcoSpace.Create;
beginnen
geerbte erstellen;
EcoPersistenceMapperProvider.TEcoPersistenceMapperProvider.RegisterTcpServer(8000);
InitializeComponent;
TODO: Fügen Sie beliebigen Konstruktorcode hier
Ende;

Der Server-Teil ist jetzt bereits voll funktionsfähig. Um einen Einblick in die von unseren Arbeiten Kunden gelieferten Daten hinzuzufügen erstellen wir das folgende Frontend:
Server Frontend
Sie code in das Timer-Tick-Ereignis den Persistenzdienst Code bereits bekannt vom Client:

Prozedur TWinForm.Timer1_Tick (Absender: System.Object; e: System.EventArgs);
var
c: IChange;
beginnen
EcoSpace.PersistenceService.RetrieveChanges;
c im EcoSpace.PersistenceService.GetChanges do
Wenn c.IsDirectConflict dann c.Action: = ChangeActionKind.Discard else
c.Action: = ChangeActionKind.Keep;
EcoSpace.PersistenceService.ApplyAllChanges;
Ende;

Legen Sie die Timer aktiviert-Eigenschaft auf true fest. Speichern Sie und starten Sie das Projekt und trennen Sie es von Delphi.

Detach program from Delphi

Öffnen Sie erneut das Clientprojekt. Starten Sie das Clientprojekt trennen Sie es und starten Sie einen zweiten Client. Ändern Sie den Benutzernamen im zweiten Client und Experiment. Es sollte funktionieren und es ist sehr einfach, einmal erreicht - ECO können Sie wirklich glücklich machen.
Lass es mich wissen, wenn ich einige wichtige Schritte, um zu verstehen wie es verpasst oder habe ich etwas mag nicht bewährt. Ich werde den Artikel dann nach Ihr Feedback ändern.

  1. Die Samplecode von Server und Client finden Sie hier.








Ein Anwendungsbeispiel Mandanten--Eco.


Ein Anwendungsbeispiel Mandanten--Eco. : Mehreren tausend Tipps, um Ihr Leben einfacher machen.


Die Anwendung werden wir bauen kann verwendet werden, für die Erfassung von Arbeitszeit und Pausen während der Arbeitszeit. Die Arbeitszeit erfasst werden kann, mit mehreren Clients und die Server-Anwendung bietet eine Übersicht über alle erfassten Daten.
[Client-Teil]

Sie beginnen mit der Einrichtung einer Winform-Eco-Anwendung. Der Kunde ist diese Anwendung. Ich nannte sie WorkTimeClient.
Du musst die UML-Klassen in einem Paket zu haben, damit Sie sie später an die Server-Anwendung hinzufügen können.
New File - ECO UML Package
Erstellen Sie das folgende Modell:

WorkTime Model

Arbeitszeit und Breaktime sind spezialisierte Klassen einer TimeSpan. Eine Arbeitszeit kann mehrere Breaktimes haben.
Der Betrieb CalcTotal gibt zurück, die Timespan eine Arbeitszeit durch die kumulierten Zeitspannen die Breaktimes reduziert. Das Ergebnis des Calctotal ist im Diff-Attribut der Klasse Arbeitszeit festgelegt. Stellen Sie sicher, dass die Klassen entsprechend die folgenden Code-Schnipsel zu ändern:

timestartend.calcTotal()-Funktion: Timespan;
beginnen
Ergebnis: = Timespan(Self.endtime-Self.starttime);
Ende;
worktime.calcTotal()-Funktion: Timespan;
var
IB: IbreaktimeList;
i: Integer;
beginnen
IB: = Get_breaktime;
für i: = 0, Ib. Count-1 fangen
Self.diff: = Self.diff - Ib. Element [i] .calcTotal;
Ende;
am Ende; breaktime.get_diff-Funktion: TimeSpan;
beginnen
Wenn Sie hier den Benutzercode hinzufügen, entfernen Sie das Attribut [EcoAutoMaintained]
aus der Property-Deklaration im Abschnitt Schnittstelle
Ergebnis: = Timespan(Self._endtime-Self._starttime);
am Ende; worktime.get_diff-Funktion: TimeSpan;
beginnen
Wenn Sie hier den Benutzercode hinzufügen, entfernen Sie das Attribut [EcoAutoMaintained]
aus der Property-Deklaration im Abschnitt Schnittstelle
Ergebnis: = TimeSpan (Self._endtime - Self._starttime);
Ende;

Jetzt kompilieren Sie die Anwendung, wechseln Sie zu der Ecospace-Designer sowie die Ecospace das Paket hinzu. Eine PersistenceMapperXml Komponente auf die Ecospace damit Sie den Client ohne entwickeln müssen für den Serverteil bisher zu setzen. Legen Sie den Dateinamen der Persistencemapper auf data.xml oder was auch immer Sie gut Suiten.
Wechseln Sie jetzt zu der WinForm-Anwendung, und erstellen Sie eine Oberfläche ähnlich wie diese:WorkTimeClient Frontend
Fügen Sie zwei Ausdruck Handles und Datensatzzeigerverwaltung Handles für die Datagrids.
Um die letzte fügen Zeile des Datagrid ausgewählt Sie folgenden Code in das Paint-Ereignis des Datagrids:

Prozedur TWinForm.DataGrid1_Paint (Absender: System.Object; e: System.Windows.Forms.PaintEventArgs);
beginnen
DataGrid1.BindingContext [dataGrid1.DataSource,
dataGrid1.DataMember]. Lage: = ehWorkTime.GetList.Count;
cmhWorktime.Position: = ehWorkTime.GetList.Count;
Ende;

Wahrscheinlich gäbe es klügere Orten gesagt – aber ich kenne sie nicht ;-)
Aber lass es mich wissen, falls Sie wissen.
Für den einzelnen Client-Test der app können Sie einfach zuweisen der Update Datenbank EcoAction Schaltfläche DB aktualisieren – während in der Multi-Client-Einstellung, die Sie benötigen Sie den folgenden Code:

var
c: IChange;
beginnen
EcoSpace.PersistenceService.RetrieveChanges;
c im EcoSpace.PersistenceService.GetChanges do
Wenn c.IsDirectConflict dann c.Action: = ChangeActionKind.Discard else
c.Action: = ChangeActionKind.Keep;
EcoSpace.PersistenceService.ApplyAllChanges;
Ende;

Dieser Code ruft über die EcoSpace Persistenzdienst alle permanente Änderungen. Es könnte in einer Multi-Client-Umgebung passieren, dass jemand Daten geändert, die Sie bereits in Ihrem lokalen Ecospace Cache verändert hatte. Der Persistenzdienst gibt Ihnen die Fähigkeit, entstehen Konflikte, wenn das der Fall ist. Ich habe unserem Fall (Loging Arbeitszeit), es aber nicht geschehen sollte.
Doch nachdem Sie die Änderungen abgerufen gehen Sie via für... in Schleife über ihnen zu überprüfen, ob Sie einen Konflikt oder nicht haben. Sie müssen für jede IChange-Schnittstelle in die GetChanges-Liste die Aktion verwendet werden, wenn die ApplyAllChanges-Prozedur aufgerufen wird.
Wenn Sie der Client, so beendet ist nur noch für Client-Server aktivieren, die Persistencemapper zu ändern. Wir brauchen eine PersistenceMapperClient Komponente auf unsere ECOSpace, da es sich nicht in der ECO-Componet-Palette standardmäßig. Wir haben es wie folgt hinzu:

  • Rechtsklick auf die Tool-Palette, und wählen Sie 'NET installierte Komponenten' aus dem Popup-Menü.

Adding the peristence mapper client
Dann ziehen Sie es an die Öko-Kategorie.
Löschen des PersistenceMapperXML-Clients aus der Ecospace- and -drop die PersistenceMapperClient drauf. Legen Sie die Url-Eigenschaft auf 'Tcp://localhost:8000 / TestServer1' – da wir den Server müssen einen Client läuft auf unserem lokalen Rechner vor der Bereitstellung.


Speichern Sie das Projekt und schließen Sie es zu oder lassen Sie offen, wenn Sie Client und Server in einer Projektgruppe haben möchten. Seit es wird nicht ausführen, solange wir unseren Server entwickelt haben - läuft da die Sockel der Peristencemapperclient eine Verbindung mit registriert werden wird nicht.

[Den Serverteil]

Erstellen Sie ein neues ECO-WinForm-Anwendung-Projekt. Ich nannte sie WorkTimeServer.
Fügen Sie die Arbeitszeit-Klassen-Paket und ein Mapper-Persistenz-Provider:

Adding the ECO persistence mapper provider

In unserem Beispiel verwenden wir Interbase mit der BDP. So fallen Sie eine PersistenceMapperBdp und eine BdpConnection Komponente auf die PersistanceMapperProvider ECOSpace. Die PersistenceMapperBDP für Interbase richten Sie ein und konfigurieren Sie die Verbindung des BDPConnection entsprechend der lokalen Umgebung. Sie müssen nur eine leere Datenbank einrichten. Die Tabellen werden später über die Mapper-Persistenz-Provider erstellt.
Gehen Sie auf die Ecospace (nicht die Persistencemapperprovider sondern derjenige der WinForm-Anwendung verbunden) und wählen Sie das Arbeitszeit-Paket aus der Liste der verfügbaren Pakete:

Adding the WorkTime calsses
Kompilieren Sie das Projekt, und wählen Sie die EcoSpaceType für die Mapper-Persistenz-Provider verwendet werden. (Klicken Sie auf die Oberfläche der Mapper-Persistenz-Provider und wählen sie aus der Dropdown-Liste im Objektinspektor).
Sie können jetzt auf die Schema generieren-Schaltfläche am unteren Rand der EcoPersistanceMapper-Anbieter klicken. Das Ergebnis sollte wie folgt aussehen:

ECO createt DB Mapping
Jetzt musst du den Code für Remoting in den Persistenz-Provider Mapper kommentieren. Vergessen Sie nicht, kommentieren die Deklaration der Prozedur und fügen Sie die erforderlichen Implementierung verwendet-Anweisung, wie in den Kommentaren erwähnt.

Beispielcode für das Registrieren des Anbieters als Server verwenden
binäre Formatierung auf einem TCP-Kanal.
Fügen Sie Folgendes in Ihrer Umsetzung Ebene verwendet-Anweisung, wenn Sie den Code auskommentieren
System.Runtime.Serialization.Formatters, System.Runtime.Remoting, System.Runtime.Remoting.Channels, System.Runtime.Remoting.Channels.Tcp;class Verfahren TEcoPersistenceMapperProvider.RegisterTcpServer(Port: integer);
var
Anbieter: BinaryServerFormatterSinkProvider;
Requisiten: IDictionary;
Chan: TcpChannel;
beginnen
Anbieter: = BinaryServerFormatterSinkProvider.Create;
Anbieter. TypeFilterLevel: = TypeFilterLevel.Full; Für Serialisierungen benötigt
Requisiten: = Hashtable.Create;
Requisiten ['Port']: = Port;
Chan: = TcpChannel.Create (Requisiten, Nil, Provider);
ChannelServices.RegisterChannel(chan);
RemotingConfiguration.RegisterWellKnownServiceType)
typeof(TEcoPersistenceMapperProvider),
'TestServer1',
WellKnownObjectMode.Singleton);
Ende;

Legen Sie das Attribut SyncActive auf True, um das Einrichten der Mapper-Persistenz-Provider abzuschließen. Sie können auch den Wert der Attribute MaxOpenConnections und MaxPoolConnections erhöhen, haben Sie viele Kunden verbinden mit dem Server.
Nun fügen Sie eine PersistanceMapperClient hinzu die Ecospace. Legen Sie die Url-Eigenschaft auf Tcp://localhost:8000 / TestServer1 oder das RegisterTCPServer-Verfahren Sie dort versorgt auf die Werte geändert.
Wir haben die RegisterTCPServer-Komponente aufrufen, bevor der PersistenceMapperClient initialisiert wird. Um zu tun, also Änderung folgt der Konstruktor von EcoSpace als:

Konstruktor TWorkTimeServerEcoSpace.Create;
beginnen
geerbte erstellen;
EcoPersistenceMapperProvider.TEcoPersistenceMapperProvider.RegisterTcpServer(8000);
InitializeComponent;
TODO: Fügen Sie beliebigen Konstruktorcode hier
Ende;

Der Server-Teil ist jetzt bereits voll funktionsfähig. Um einen Einblick in die von unseren Arbeiten Kunden gelieferten Daten hinzuzufügen erstellen wir das folgende Frontend:
Server Frontend
Sie code in das Timer-Tick-Ereignis den Persistenzdienst Code bereits bekannt vom Client:

Prozedur TWinForm.Timer1_Tick (Absender: System.Object; e: System.EventArgs);
var
c: IChange;
beginnen
EcoSpace.PersistenceService.RetrieveChanges;
c im EcoSpace.PersistenceService.GetChanges do
Wenn c.IsDirectConflict dann c.Action: = ChangeActionKind.Discard else
c.Action: = ChangeActionKind.Keep;
EcoSpace.PersistenceService.ApplyAllChanges;
Ende;

Legen Sie die Timer aktiviert-Eigenschaft auf true fest. Speichern Sie und starten Sie das Projekt und trennen Sie es von Delphi.

Detach program from Delphi

Öffnen Sie erneut das Clientprojekt. Starten Sie das Clientprojekt trennen Sie es und starten Sie einen zweiten Client. Ändern Sie den Benutzernamen im zweiten Client und Experiment. Es sollte funktionieren und es ist sehr einfach, einmal erreicht - ECO können Sie wirklich glücklich machen.
Lass es mich wissen, wenn ich einige wichtige Schritte, um zu verstehen wie es verpasst oder habe ich etwas mag nicht bewährt. Ich werde den Artikel dann nach Ihr Feedback ändern.

  1. Die Samplecode von Server und Client finden Sie hier.

Ein Anwendungsbeispiel Mandanten--Eco.

Ein Anwendungsbeispiel Mandanten--Eco. : Mehreren tausend Tipps, um Ihr Leben einfacher machen.
Ein Anwendungsbeispiel Mandanten--Eco.
Wiezutun
Freunden empfehlen
  • gplus
  • pinterest

Kommentar

Einen Kommentar hinterlassen

Wertung