рдпрд╣ рдХреНрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рд╣реИ:
рдбреЗрдЯрд╛рд╕реНрдиреЗрдк рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдПрдХ рдбреЗрдЯрд╛ рд╕рд░реНрд╡рд░ рд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд░рдирд╛ рдФрд░ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реИ:
- рд╕рд░реНрд╡рд░ (рдбреЗрдЯрд╛рд╕реЗрдЯ) рд╕реЗ рдЙрддреНрдкрд╛рджреЛрдВ рдХреА рд╕реВрдЪреА рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдВ
- рдПрдХ рдирдпрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдмрдирд╛рдПрдВ
- рдЗрд╕рдореЗрдВ рдЖрдЗрдЯрдо рдЬреЛрдбрд╝реЗрдВ
- рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдмрдВрдж рдХрд░реЗрдВ
рдХрднреА-рдХрднреА рдЬрдм рдЖрдк рдПрдХ рд╕реНрдерд┐рддрд┐ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рдХрд▓реНрдк рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдХрдВрд╕рд╛рдЗрдирдореЗрдВрдЯ рдпрд╛ рдХрдЯ рдЪреБрдиреЗрдВред
рдпрд╣ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЛрдб (рдХреБрдЫ рддреИрдпрд╛рд░ рдХрд░реЗрдВ / рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ) рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЧреНрд░рд╛рд╣рдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд░реЗ рдФрд░ рдлрд┐рд░ рд╕реЗ рдСрдкрд░реЗрд╢рди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗред
рдпрд╛ рд╕рд░реНрд╡рд░ рдХреЛ рдСрдкрд░реЗрд╢рди рдХреЗ рджреМрд░рд╛рди рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рд╕реАрдзреЗ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЙрд╕реЗ рд╕рднреА рдбреЗрдЯрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛред

рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
рдкрд╣рд▓реЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рддреНрд░реБрдЯрд┐ рдХреЛрдб рдХреА рдПрдХ рд╕реВрдЪреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рджреВрд╕рд░реЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд▓рд┐рдП рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ рд╕рд░реНрд╡рд░ рдХреЙрд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рд╕рд░реНрд╡рд░ рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓ рдХреЗ рд╕рд╛рде, рдпрд╣ рднреА рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рд╕рд░реНрд╡рд░ рдХреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдХреБрдЫ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ (рдФрд░ рдпрд╣ рдЕрдиреБрд░реЛрдз рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдиреЗ рдкрд░ рдмреНрд▓реЙрдХ рдХрд░рдиреЗ рдХреА рдзрдордХреА рджреЗрддрд╛ рд╣реИ)ред рдПрдХрд▓-рдереНрд░реЗрдбреЗрдб рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕рд╛рде рдХреЛрдИ рд▓реЙрдХ рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рд░реНрд╡рд░ рдкрд░ рдХреЙрд▓ рдПрдХ рдЕрд▓рдЧ рдереНрд░реЗрдб рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП - рдлрд┐рд░ рд╕рд░реНрд╡рд░ рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реА рдХреЙрд▓ рдХреЛ рдореБрдЦреНрдп рдереНрд░реЗрдб рдХреЗ рд╕рд╛рде рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЬреЛ рдореВрд▓ рд╕рд░реНрд╡рд░ рд╡рд┐рдзрд┐ рдХреЙрд▓ рд╕реЗ рд╡рд╛рдкрд╕ рд▓реМрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдпрдВрддреНрд░рдг рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ)ред рдФрд░ рд╕рд░реНрд╡рд░ рдХреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдЖрдИрдбреА рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдордд рднреВрд▓рдирд╛ред
рдХреЙрд▓ рдХрд░реЗрдВ:
procedure TForm2.btnRegisterWareClick(Sender: TObject); begin TThread.CreateAnonymousThread( procedure() begin clmClient.ServerMethods1Client.RegisterWare(seWareID.Value, clmClient.DSClientCallbackChannelManager1.ManagerId) end).Start; end;
рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рд╕реНрд╡рдпрдВ:
TmyCallback = class(TDBXCallback) protected FSelectedString: Integer; procedure SelectString(const Arg: TJSONValue); public function Execute(const Arg: TJSONValue): TJSONValue; override; end; { TmyCallback } function TmyCallback.Execute(const Arg: TJSONValue): TJSONValue; begin TThread.Synchronize(nil, procedure() // - begin SelectString(Arg); end); Result := TJSONNumber.Create(FSelectedString); end; procedure TmyCallback.SelectString(const Arg: TJSONValue); var strs: TStringList; enum: TJSONPairEnumerator; val, str: string; begin enum := TJSONObject(Arg).GetEnumerator; if Assigned(enum) then begin strs := TStringList.Create; try while enum.MoveNext do begin Val:= enum.Current.JsonString.Value; str := enum.Current.JsonValue.Value; strs.AddObject(str, TObject(val.ToInteger())); end; FSelectedString := TfrmSelectString.SelectString(strs); finally strs.Free; end; end; enum.Free; end;
рдФрд░ рдпрд╣рд╛рдБ рд╕рд░реНрд╡рд░ рдкрд░ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ:
procedure TServerMethods1.RegisterWare(ID: Integer; ClientID: string); var Params, ParamsServ: TJSONObject; ResObj: TJSONValue; temp: TJSONValue; begin ResObj := nil; Params := TJSONObject.Create; Params.AddPair(TJSONPair.Create('1', ' 42')); Params.AddPair(TJSONPair.Create('2', ' 43')); Params.AddPair(TJSONPair.Create('3', ' 44')); ParamsServ := TJSONObject(Params.Clone); ServerContainer1.DSServer1.NotifyCallback(ClientID, 'SelectString', Params, ResObj); if Assigned(ResObj) then begin temp := ParamsServ.GetValue(ResObj.Value); if Assigned(temp) then Form1.QueueLogMsg(Format('RegisterWare %d %s', [ID, temp.ToString])) else Form1.QueueLogMsg(Format('RegisterWare %d ', [ID])); ResObj.Free; ParamsServ.Free; end else Form1.QueueLogMsg(Format('RegisterWare %d ', [ID])); end;
рдФрд░ рдЕрдВрдд рдореЗрдВ, рдПрдХ рдЕрдиреБрд╕реНрдорд╛рд░рдХ:
- рд╕реНрдерд╛рдиреАрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЪрд░ - рдЖрд░рдВрднреАрдХреГрдд рдирд╣реАрдВ
- рдЬреЛ рдХреБрдЫ рднреА рдЖрдк рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВ - рдЖрдк рдЙрдиреНрд╣реЗрдВ рдЕрд▓рд╡рд┐рджрд╛ рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдореБрдлреНрдд рдирд╣реАрдВ
- рд╡рд╣ рд╕рдм рдЬреЛ рдЖрдкрдХреЛ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдорд┐рд▓рддрд╛ рд╣реИ - рдЖрдкрдХреЛ рдЗрд╕реЗ рдореБрдХреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдЖрдЦрд┐рд░рдХрд╛рд░, рдпрд╣рд╛рдВ рдПрдЖрд░рд╕реА рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЖрдкрдХреЛ рдореЛрдмрд╛рдЗрд▓ рдлреЛрди рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)
рдЖрдк рдХреЙрд▓рдмреИрдХ рдХреЗ рд╕рд╛рде рдХреБрдЫ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдЗрд╕рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдбреЗрдЯрд╛ рд╕реЗрдЯ рдпрд╛ SQL рдХреНрд╡реЗрд░реА рдкрд╛рд╕ рдХрд░реЗрдВ, рдпрд╛ рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХрд╛ рдирд╛рдо рдЬрд╣рд╛рдВ рд╕реЗ рд╕рдВрдЧреНрд░рд╣реАрдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЪрдпрди рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрдЧреАред
рдХреЛрдб:
http://code.google.com/p/datasnap-callback-with-ui/source/browse/рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ Datasnap рдореЗрдВ рдХреЙрд▓рдмреИрдХ рдХреА рддрдХрдиреАрдХ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╕рд░реНрд╡рд░ рдЕрдиреБрд░реЛрдз рдХреЗ рджреМрд░рд╛рди рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдРрд╕рд╛ рдХреЙрд▓рдмреИрдХ
рдЪреВрдВрдХрд┐ рдореИрдВрдиреЗ рдЕрднреА рддрдХ рддрдХрдиреАрдХ рдкрд░ рдирд┐рд░реНрдгрдп рдирд╣реАрдВ рд▓рд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП RealThinClient рдРрд╕реА рддрдХрдиреАрдХ рдХреЗ рдЕрдзреНрдпрдпрди рдореЗрдВ рдЕрдЧрд▓рд╛ рд╣реЛрдЧрд╛