Site icon Embarcadero RAD Studio, Delphi, & C++Builder Blogs

DataSnap Server Methods Parameters

the future of starts demands massive productivity

Author: Jim T1392

Delphi 2009 introduced support for DataSnap server methods. If you are not familiar with this feature, here are two articles that describe server methods: DataSnap 2009 Overview , Getting Started with Delphi DataSnap 2009.

DataSnap server methods support a variety of parameter and return types. The following list shows the types grouped into my own categories. 

This post is about “Basic” types.  The sample client and server projects that go with this post can be downloaded here: http://cc.codegear.com/item/26702

Basic

DBXValue

Collection

Connection

  • AnsiString

  • Boolean

  • Currency

  • TDateTime

  • TDBXDate

  • TDBXTime

  • Double

  • Int64

  • Integer

  • LongInt

  • OleVariant

  • Single

  • SmallInt

  • WideString

  • TDBXAnsiStringValue

  • TDBXAnsiCharsValue

  • TDBXBcdValue

  • TDBXBooleanValue

  • TDBXConnectionValue

  • TDBXDateValue

  • TDBXDoubleValue

  • TDBXInt16Value

  • TDBXInt32Value

  • TDBXInt64Value

  • TDBXReaderValue

  • TDBXSingleValue

  • TDBXStreamValue

  • TDBXStringValue

  • TDBXTimeStampValue

  • TDBXTimeValue

  • TDBXWideCharsValue

  • TDBXWideStringValue

  • TDBXReader

  • TDataSet

  • TParams

  • TStream

  • TDBXConnection

Getting Started with Delphi DataSnap 2009 uses the following function as an example of a server method:

[crayon-6768aa43cc64c126270049/]

The proxy generator generates the following code to call this method:

[crayon-6768aa43cc657776593155/]

I wanted my sample server and client to work like the sample in the article, with simple server methods and  generated proxy in the client.  In addition, I wanted to support various types so started with this generic server method implementation:

[crayon-6768aa43cc65c425157633/]

The I used TTestBasicType used to declare and implement “Echo” methods for a variety of types, such as string, boolean, and double:

[crayon-6768aa43cc65d722605636/]

To test parameters directions, I expanded the generic class with var and out parmeters:

[crayon-6768aa43cc65f793156178/]

Consult the sample server to see how I’ve implemented the “plumbing” to make these classes callable by a DataSnap client. The implementation is unconventional because the TDSServerClass component is not used.

The sample VCL client is built starting with a TSQLConnection component. After setting the port and host name, I right clicked on the TSQLConnection and selected “Generate DataSnap client classes” to generate a client proxy:

In the generated code, there is a “Client” class for every one of the server classes. For example, TTestBooleanClient calls the TTestBoolean class on the server:

[crayon-6768aa43cc660950732591/]

Here is the implementation of TTestBooleanClient.Echo.  Consult the sample code to see the complete proxy implementation.  

[crayon-6768aa43cc662270347864/]

The sample client tests the generated methods by calling them with sample values and verifying the results. Consult the sample for implementation details.

Here is screen shot of the running server and client:

 

The following table shows the parameter types and return types demonstrated in the sample client and server:

Type

(in)

var

out

Result

AnsiString

X

 

 

X

Boolean

X

X

X

X

Currency

X

X

X

X

TDateTime

X

X

X

X

DBXDate

X

X

X

X

DBXTime

X

X

X

X

Double

X

X

X

X

Int64

X

X

X

X

Integer

X

X

X

X

LongInt

X

X

X

X

OleVariant

X

X

X

 

Single

X

X

X

X

SmallInt

X

X

X

X

String

X

 

 

X

WideString

X

 

 

X

There are some Delphi types that you might expect to see in this list such as Byte and Cardinal. DataSnap currently doesn’t support these two nor LongWord, ShortInt, Word, TSQLTimeStamp, and TBcd. Support for var and out strings is coming (a workaround/alternative is to use TDBXStringValue in place of var String and TDBXAnsiStringValue in place of var AnsiString).

Thats all for now. I plan to cover more types in the future.

Exit mobile version