Датаснап наследования серверных методов. и используя их через разные клиентские приложения
Я создаю 3 сервера данных, которые подключаются к одной базе данных и используют одну и ту же процедуру входа в систему.
Моя первая мысль заключается в том, что я должен унаследовать свои методы сервера от базового класса метода сервера, который имеет процедуру входа в систему. см. псевдокод:
tsimplemethods
procedure login:virtual
tserver1 = class(tsimplemethods)
procedure doseomething
tserver2 = class(tsimplemethods)
procedure dosomethingelse
Это работает, и я могу генерировать методы клиента datasnap для 2 серверов. Проблема в том, когда я хочу использовать процедуру входа в систему в модуле входа, который я хочу использовать для 3 разных клиентских приложений, которые подключаются к 3 разным серверам с одной и той же процедурой входа в систему. псевдокод:
unit login
procedure login
var
tmpM:tsimplemethodsclient
begin
tmpM.login;
end;
но это дает исключение, что TSimpleservermethods.login не предоставляется на сервере. Это работает, если я делаю в клиенте для 1 из серверов. например:
unit client1
procedure login
var
tmpM:TServer1Methods;
begin
tmpM.login;
end;
Я думал, что модуль входа должен знать, какие методы сервера использовать. может быть через событие или используя класс Template для входа в систему.
* РЕДАКТИРОВАТЬ: * возможный обходной путь: я изменил ServerMethodClient, чтобы включить ServerClassname, который я могу изменить на производный serverclass.
procedure TSimpleServerMethodsClient.Login();
begin
if FPW_LoginCommand = nil then
begin
FPW_LoginCommand := FDBXConnection.CreateCommand;
FPW_LoginCommand.CommandType := TDBXCommandTypes.DSServerMethod;
//I changed this
FPW_LoginCommand.Text := MyServerClassname+'.Login';
// instead of 'TSimpleserverMethods.login
FPW_LoginCommand.Prepare;
end;
FPW_LoginCommand.ExecuteUpdate;
end;
Это похоже на работу.