He utilizado el asistente para crear un server datasnap; le he dejado tildada la opcion para inlcuir los metodos de prueba (EchoString y ReveseString)
Luego modifique la implementacion de esos dos metodos para que devuelvan tambien el nombre de la clase que "hace el trabajo":
Código Delphi
[-]
function TServerMethods1.EchoString(Value: string): string;
begin
Result := ClassName + ', ' + Value;
end;
function TServerMethods1.ReverseString(Value: string): string;
begin
Result := ClassName + ', ' + StrUtils.ReverseString(Value);
end;
Luego puse el server en ejecucion, y cree el cliente, simplemente con el componente TSQLConnection y puse la propiedad DriverName a "Datasnap"; por ultimo hice click derecho y seleccione "generate DataSnap client classes"
Esto genera una nueva unidad con la clase proxy "
TServerMethods1Client"
A partir de esto, puedo escribir este codigo sencillo en el form principal del cliente:
Código Delphi
[-]
procedure TForm2.FormCreate(Sender: TObject);
begin
Methods1 := TServerMethods1Client.Create(SQLConnection1.DBXConnection);
end;
procedure TForm2.Button1Click(Sender: TObject);
begin
Edit1.Text := Methods1.EchoString('Hola');
Edit2.Text := Methods1.ReverseString(Edit1.Text);
end;
Hasta aca es el tipico tutorial Datasnap
Para agregar un nuevo modulo de datos, solamente basta con volver al projecto del servidor, agregar un nuevo TDataModule; no hay que olvidarse de la directiva {$METHODINFO}, eso te podes fijar como lo genera el asistente. Esa directiva basicamente controla que metodos se exponen y cuales no
Llame a este nuevo modulo de datos TServerMethods2, que esta implementado igual que el TServerMethods1:
Código Delphi
[-]
{$METHODINFO ON}
TServerMethods2 = class(TDataModule)
public
function EchoString(Value: string): string;
function ReverseString(Value: string): string;
end;
{$METHODINFO OFF}
function TServerMethods2.EchoString(Value: string): string;
begin
Result := ClassName + ', ' + Value;
end;
function TServerMethods2.ReverseString(Value: string): string;
begin
Result := ClassName + ', ' + StrUtils.ReverseString(Value);
end;
Volvi a mi cliente, y volvi a "generate DataSnap client classes", y en este caso la unit generada ahora 2 clases:
Código Delphi
[-]
TServerMethods1Client = class(TDSAdminClient)
[...]
TServerMethods2Client = class(TDSAdminClient)
[...]
Asi que es muy facil modificar el codigo para usar una u otra, este es el Form de la aplicacion cliente:
Código Delphi
[-]
type
TForm2 = class(TForm)
SQLConnection1: TSQLConnection;
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
Methods1: TServerMethods1Client;
Methods2: TServerMethods2Client;
public
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
procedure TForm2.FormCreate(Sender: TObject);
begin
Methods1 := TServerMethods1Client.Create(SQLConnection1.DBXConnection);
Methods2 := TServerMethods2Client.Create(SQLConnection1.DBXConnection);
end;
procedure TForm2.Button1Click(Sender: TObject);
begin
Edit1.Text := Methods1.EchoString('Hola');
Edit2.Text := Methods1.ReverseString(Edit1.Text);
end;
procedure TForm2.Button2Click(Sender: TObject);
begin
Edit1.Text := Methods2.EchoString('Hola');
Edit2.Text := Methods2.ReverseString(Edit1.Text);
end;
Saludos