Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi DataSnap und Rückgabewerte (https://www.delphipraxis.net/177036-datasnap-und-rueckgabewerte.html)

Dragon27 11. Okt 2013 11:35

DataSnap und Rückgabewerte
 
Hallo zusammen,

ich habe mich nun für DataSnap entschieden und stoße nun auf ein kleines Problem.

Die Beispielmethoden geben ja immer einen String zurück. Das ist einfach....
Aber sagen wir, man will eine Registrierung programmieren. Dann kann da
ja vieles zurückkommen...

Ich meine man benötigt ja eignetlich einen Statuscode, Nachricht etc. Also einen
komplexen Typen.

Wie löst man das sauber und richtig?

Danke!

himitsu 11. Okt 2013 12:07

AW: DataSnap und Rückgabewerte
 
- du kannt mehrere Var-Parameter an eine Funktion übergeben und natürlich nachher auch wieder auslesen
- du kannst ein Daten-Objekt als Result zurückgeben
- du kannst JSON-Objekte als Parameter/Result verwenden
- ...
- du kannst einen Stream als Result zurückgeben
- du kannst ein DataSet zurückgeben
- du kannst notfalls auch eine TStringList oder einen XML-Text als String zurückgeben (oder sonst irgendein Textformat)

Dragon27 11. Okt 2013 12:14

AW: DataSnap und Rückgabewerte
 
Danke für deine Antwort!

Also folgendes ist legitim:

Delphi-Quellcode:
function registerUser(sEmail: string): TReturnClass;

jaenicke 11. Okt 2013 12:17

AW: DataSnap und Rückgabewerte
 
Prinzipiell ja, aber du muss aufpassen, dass du diese Klassen nicht selbst freigibst. Das macht DataSnap nämlich selber, entweder beim nächsten Aufruf der Funktion oder beim Beenden des Programms.
Wenn du das nicht beachtest, gibt es schöne Fehlermeldungen. ;-)

Dragon27 11. Okt 2013 13:11

AW: DataSnap und Rückgabewerte
 
Super danke für den Tipp ;)

mjustin 11. Okt 2013 14:16

AW: DataSnap und Rückgabewerte
 
Zitat:

Zitat von jaenicke (Beitrag 1231798)
Prinzipiell ja, aber du muss aufpassen, dass du diese Klassen nicht selbst freigibst. Das macht DataSnap nämlich selber, entweder beim nächsten Aufruf der Funktion oder beim Beenden des Programms.

Beim Sitzungsende werden die Objekte tatsächlich nicht freigegeben? Gut, bei ein paar Dutzend mittelgroßen Objekten mag das ja kein Problem sein...

himitsu 11. Okt 2013 15:17

AW: DataSnap und Rückgabewerte
 
Wann das genau alles freigegeben wird, kann ich auch nicht mehr sagen.
Aber wer mal ausprobieren will wann es passiert, der kann das ganz einfach im Destructor der Klasse mitlogen/debuggen.
eventuell räumt der bei Sitzungsende uch schon auf.

Bei einigen Typen (z.B. Streams), da stellt Delphi ein Property bereit, über das man regeln kann "ob" diese Objekte von dir oder vom DataSnap freigegeben werden sollen, also in den automatisch generierten Klientklassen ist es zumindestens so.

Wer zurückgegebene Objekte über "längere" Zeit und vorallem über mehrere DataSnapFunktionsaufrufe hinweg aufheben will, der muß sich sowieso selber um die Freigabe kümmern, denn sonst klaut einem das DataSnap das Objekt unterm Arsch weg.

Delphi-Quellcode:
A := DS.RegisterUser('a@b.c');
B := DS.RegisterUser('x@y.z');
MachWas(A); // A ist hier vermutlich schon weg, bzw. durch B ersetzt
MachWas(B);


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:17 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz