Ver Mensaje Individual
  #2  
Antiguo 16-03-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Reputación: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
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
    { Public declarations }
  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
Responder Con Cita