Sur DATASNAP, la méthode distante prend en charge les objets personnalisés en tant que paramètres

Sur DATASNAP, la méthode distante prend en charge les objets personnalisés en tant que paramètres

Les méthodes distantes DATASNAP peuvent déjà prendre en charge des objets personnalisés en tant que paramètres, ce qui constitue une fonctionnalité très pratique.

1) Objets personnalisés

tapez
TMyInfo = class(TObject)
public
AccountNo: string;
SQL : chaîne ;
Paramètres : chaîne ;
fin;

2) Définition de la méthode à distance

fonction TServerMethods1.QuerySql4(const myInfo : TMyInfo) : TFDJSONDataSets ;
var
d : TfrmDB ;
début
Résultat := nul ;
si ce n'est pas attribué (myInfo), alors
quittez ;
if (myInfo.accountNo = '') ou (myInfo.sql = '') then
Quitter ;
d := GetDBPool(myInfo.accountNo).Lock;
s'il n'est pas affecté (d), alors
quittez ;
essayez
, essayez
SetTraceOn(d);
d.qryOpen.Close;
d.qryOpen.sql.Clear;
d.qryOpen.sql.Text := monInfo.sql;
si myInfo.params <> '' alors
StrToFDParams(myInfo.params, d.qryOpen.params);
d.qryOpen.Open;
Résultat := TFDJSONDataSets.Create;
TFDJSONDataSetsWriter.ListAdd(Result, '1', d.qryOpen);
sauf
sur e : Exception do
start
Résultat := nul;
Log.WriteLog('TServerMethods1.QuerySql4 ' + e.Message);
fin;
fin;
enfin
d.qryOpen.Close ;
GetDBPool(myInfo.accountNo).Unlock(d);
SetTraceOff(d);
fin;
fin;

3) Interface de méthode distante générée automatiquement par le client

fonction TServerMethods1Client.QuerySql4(myInfo : TMyInfo) : TFDJSONDataSets ;
commencez
si FQuerySql4Command = nil alors
commencez
FQuerySql4Command := FDBXConnection.CreateCommand;
FQuerySql4Command.CommandType := TDBXCommandTypes.DSServerMethod;
FQuerySql4Command.Text := 'TServerMethods1.QuerySql4';
FQuerySql4Command.Prepare ;
fin;
sinon Assigned(myInfo) alors
FQuerySql4Command.Parameters[0].Value.SetNull
sinon
commencez
FMarshal := TDBXClientCommand(FQuerySql4Command.Parameters[0].ConnectionHandler).GetJSONMarshaler;
essayez
FQuerySql4Command.Parameters[0].Value.SetJSONValue(FMarshal.Marshal(myInfo), True);
si FInstanceOwner alors
myInfo.Free
enfin
FreeAndNil(FMarshal)
end
end ;
FQuerySql4Command.ExecuteUpdate ;
sinon FQuerySql4Command.Parameters[1].Value.IsNull alors
commencez
FUnMarshal := TDBXClientCommand(FQuerySql4Command.Parameters[1].ConnectionHandler).GetJSONUnMarshaler;
essayez
Résultat := TFDJSONDataSets(FUnMarshal.UnMarshal(FQuerySql4Command.Parameters[1].Value.GetJSONValue(True)));
si FInstanceOwner alors
FQuerySql4Command.FreeOnExecute(Result);
enfin
FreeAndNil(FUnMarshal)
end
end
else
Résultat := nil;
fin;

Comme le montre le code, DATASNAP sérialise et restaure automatiquement nos objets personnalisés à l'aide de JSON.

4) Démonstration d'appel client

procédure TForm1.Button3Click(Expéditeur : TObject);
var
LDataSets : TFDJSONDataSets ;
LDataSet : TFDDataSet ;
monInfo : TMonInfo ;
commencer
DataSource1.DataSet := FDMemTable1;
monInfo := TMyInfo.Create;
monInfo.AccountNo := '0';
myInfo.SQL := 'select * from t1 où c1=:c1';
monInfo.params := 'c1:55';
LDataSets := méthodes.QuerySql4(myInfo);
LDataSet := TFDJSONDataSetsReader.GetListValueByName(LDataSets, '1');
FDMemTable1.Fermer ;
FDMemTable1.Data := LDataSet;
fin;

Guess you like

Origin blog.csdn.net/tjsoft/article/details/132151407