git-svn-id: https://192.168.0.254/svn/Componentes.Terceros.RemObjects@68 b6239004-a887-0f4b-9937-50029ccdca16
158 lines
4.5 KiB
ObjectPascal
158 lines
4.5 KiB
ObjectPascal
unit fClientForm;
|
|
|
|
interface
|
|
|
|
uses
|
|
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,
|
|
uROClient, uROClientIntf, uRORemoteService, uROBinMessage, Grids, DBGrids,
|
|
uROPoweredByRemObjectsButton, uDAPoweredByDataAbstractButton, ExtCtrls,
|
|
DASampleLibrary_Intf, uROTypes;
|
|
|
|
type
|
|
TClientForm = class(TForm, IUpdateEvent)
|
|
Panel1: TPanel;
|
|
DAPoweredByDataAbstractButton1: TDAPoweredByDataAbstractButton;
|
|
btLoad: TButton;
|
|
btEdit: TButton;
|
|
dgData: TDBGrid;
|
|
procedure FormCreate(Sender: TObject);
|
|
procedure btLoadClick(Sender: TObject);
|
|
procedure btEditClick(Sender: TObject);
|
|
procedure FormDestroy(Sender: TObject);
|
|
procedure dgDataDblClick(Sender: TObject);
|
|
private
|
|
{ Private declarations }
|
|
fService: IDASampleService;
|
|
procedure SetCurrentRowLock(aState: boolean);
|
|
procedure WaitChannelFree;
|
|
procedure OnUpdateBlock(const pkFields: AnsiString; const senderGuid: Guid);
|
|
procedure OnUpdateUnblock(const pkField: AnsiString; const senderGuid: Guid; const isReadRow: Boolean);
|
|
procedure OnUpdateAllBlock(const pkFields: AnsiStringArray);
|
|
public
|
|
{ Public declarations }
|
|
end;
|
|
|
|
var
|
|
ClientForm: TClientForm;
|
|
|
|
implementation
|
|
|
|
uses
|
|
fClientDataModule, fEditClient, uROClasses, uDAInterfaces, Variants;
|
|
|
|
{$R *.dfm}
|
|
|
|
procedure TClientForm.btEditClick(Sender: TObject);
|
|
var
|
|
editForm: TfmEditClient;
|
|
begin
|
|
if ClientDataModule.tbl_Clients.RecordCount > 0 then begin
|
|
if dgData.DataSource.DataSet.FieldByName('Locked').AsString <> 'X' then begin
|
|
editForm := TfmEditClient.Create(self);
|
|
try
|
|
SetCurrentRowLock(true);
|
|
if editForm.EditClient(dgData.DataSource)
|
|
then with ClientDataModule do RemoteDataAdapter.ApplyUpdates([tbl_Clients]);
|
|
SetCurrentRowLock(false);
|
|
finally
|
|
editForm.Free;
|
|
end;
|
|
end
|
|
else ShowMessage('Can''t edit - record locked.');
|
|
end;
|
|
end;
|
|
|
|
procedure TClientForm.btLoadClick(Sender: TObject);
|
|
begin
|
|
with ClientDataModule do begin
|
|
tbl_Clients.ClearRows(true);
|
|
WaitChannelFree;
|
|
RemoteDataAdapter.Fill([tbl_Clients]);
|
|
end;
|
|
fService.BlockSetOfRows;
|
|
end;
|
|
|
|
procedure TClientForm.FormCreate(Sender: TObject);
|
|
begin
|
|
Application.Title := ClientForm.Caption;
|
|
with ClientDataModule do begin
|
|
// TODO: Until until DynamicRequest bug fixed
|
|
//Login;
|
|
fService := RemoteService as IDASampleService;
|
|
fService.Login(PlatformEnum_peWindowsDelphi, Caption);
|
|
EventReceiver.RegisterEventHandler(EID_UpdateEvent, self);
|
|
EventReceiver.Active := true;
|
|
fService.Subscribe(true);
|
|
end;
|
|
end;
|
|
|
|
procedure TClientForm.FormDestroy(Sender: TObject);
|
|
begin
|
|
WaitChannelFree;
|
|
with ClientDataModule do begin
|
|
EventReceiver.Active := false;
|
|
fService.Subscribe(false);
|
|
EventReceiver.UnRegisterEventHandler(self);
|
|
end;
|
|
end;
|
|
|
|
procedure TClientForm.OnUpdateAllBlock(const pkFields: AnsiStringArray);
|
|
var
|
|
i: integer;
|
|
begin
|
|
for i := 0 to pkFields.Count - 1 do OnUpdateBlock(pkFields.Items[i], '');
|
|
end;
|
|
|
|
procedure TClientForm.OnUpdateBlock(const pkFields: AnsiString;
|
|
const senderGuid: Guid);
|
|
begin
|
|
with ClientDataModule do begin
|
|
LockRow(AnsiStringToWideString(pkFields));
|
|
end;
|
|
end;
|
|
|
|
procedure TClientForm.OnUpdateUnblock(const pkField: AnsiString;
|
|
const senderGuid: Guid; const isReadRow: Boolean);
|
|
var
|
|
wb: TDAWhereBuilder;
|
|
exp: TDAWhereExpression;
|
|
expArr: array of TDAWhereExpression;
|
|
begin
|
|
with ClientDataModule do begin
|
|
UnlockRow(AnsiStringToWideString(pkField));
|
|
if isReadRow then begin
|
|
wb := TDAWhereBuilder.Create;
|
|
exp := wb.NewBinaryExpression(
|
|
wb.NewField(tbl_Clients.LogicalName, 'ClientId'),
|
|
wb.NewConstant(pkField, datGuid),
|
|
dboEqual);
|
|
SetLength(expArr, 1);
|
|
expArr[0] := exp;
|
|
RemoteDataAdapter.Fill([tbl_Clients], expArr, true, false, false);
|
|
wb.Free;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TClientForm.SetCurrentRowLock(aState: boolean);
|
|
var
|
|
id: {$IFDEF UNICODE}AnsiString{$ELSE}string{$ENDIF};
|
|
begin
|
|
id := dgData.DataSource.DataSet.FieldByName('ClientId').{$IFDEF UNICODE}AsAnsiString{$ELSE}AsString{$ENDIF};
|
|
WaitChannelFree;
|
|
if aState then fService.BlockRow(id)
|
|
else fService.UnblockRow(id, true);
|
|
end;
|
|
|
|
procedure TClientForm.dgDataDblClick(Sender: TObject);
|
|
begin
|
|
btEdit.Click;
|
|
end;
|
|
|
|
procedure TClientForm.WaitChannelFree;
|
|
begin
|
|
repeat until not ClientDataModule.Channel.Busy;
|
|
end;
|
|
|
|
end.
|