unit fClientForm; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, uROClient, uROClientIntf, uRORemoteService, uROBinMessage, ExtCtrls, uROPoweredByRemObjectsButton, uDAPoweredByDataAbstractButton, ComCtrls, Grids, DBGrids, DBCtrls, uDADataTable, uDAInterfaces, uDADataAdapter; type TClientForm = class(TForm) Panel1: TPanel; DAPoweredByDataAbstractButton1: TDAPoweredByDataAbstractButton; rgFailureBehavior: TRadioGroup; rgReducedDelta: TRadioGroup; pcSamples: TPageControl; tsClientsOrders: TTabSheet; tsProducts: TTabSheet; tsAddress: TTabSheet; Panel2: TPanel; Label1: TLabel; Memo1: TMemo; btLoadCustomersOrders: TButton; btDeleteCustomer: TButton; btApplyChangesCustomers: TButton; Label2: TLabel; dgClients: TDBGrid; Splitter1: TSplitter; Panel3: TPanel; Panel4: TPanel; Splitter2: TSplitter; dgOrderDetails: TDBGrid; Label3: TLabel; Panel5: TPanel; Label4: TLabel; dgOrders: TDBGrid; Panel6: TPanel; Label5: TLabel; Memo2: TMemo; btLoadProducts: TButton; btApplyChangesProducts: TButton; Label6: TLabel; dgProducts: TDBGrid; Label7: TLabel; Panel7: TPanel; Label8: TLabel; Memo3: TMemo; btLoadAddresses: TButton; btApplyChangesAddresses: TButton; dgAddresses: TDBGrid; Panel8: TPanel; cbGroups: TDBLookupComboBox; procedure FormCreate(Sender: TObject); procedure btLoadCustomersOrdersClick(Sender: TObject); procedure btDeleteCustomerClick(Sender: TObject); procedure btApplyChangesCustomersClick(Sender: TObject); procedure pcSamplesChange(Sender: TObject); procedure btLoadProductsClick(Sender: TObject); procedure btApplyChangesProductsClick(Sender: TObject); procedure btLoadAddressesClick(Sender: TObject); procedure btApplyChangesAddressesClick(Sender: TObject); procedure cbGroupsCloseUp(Sender: TObject); private { Private declarations } procedure AdjustBehavior; procedure HandleUpdate(const aTables: array of TDADataTable); procedure SelectedGroupChanged(Sender: TObject); public { Public declarations } end; var ClientForm: TClientForm; implementation uses fClientDataModule, DB; {$R *.dfm} procedure TClientForm.AdjustBehavior; begin with ClientDataModule do begin case rgFailureBehavior.ItemIndex of 0: RemoteDataAdapter.FailureBehavior := fbShowReconcile; 1: RemoteDataAdapter.FailureBehavior := fbRaiseException; 2: RemoteDataAdapter.FailureBehavior := fbBoth; 3: RemoteDataAdapter.FailureBehavior := fbNone; end; if rgReducedDelta.ItemIndex = 0 then begin RemoteDataAdapter.DynamicSelect := True; DataStreamer.SendReducedDelta := True; end else begin RemoteDataAdapter.DynamicSelect := False; DataStreamer.SendReducedDelta := False; end; end; end; procedure TClientForm.btApplyChangesAddressesClick(Sender: TObject); begin AdjustBehavior; HandleUpdate([ClientDataModule.tbl_UnionAddresses]); end; procedure TClientForm.btApplyChangesCustomersClick(Sender: TObject); begin AdjustBehavior; with ClientDataModule do HandleUpdate([tbl_BPClients]); end; procedure TClientForm.btApplyChangesProductsClick(Sender: TObject); begin AdjustBehavior; with ClientDataModule do HandleUpdate([tbl_Products]); end; procedure TClientForm.btDeleteCustomerClick(Sender: TObject); begin with ClientDataModule do if tbl_BPClients.RecordCount > 0 then tbl_BPClients.Delete; end; procedure TClientForm.btLoadAddressesClick(Sender: TObject); begin AdjustBehavior; with ClientDataModule do begin tbl_UnionAddresses.ClearRows(true); RemoteDataAdapter.Fill([tbl_UnionAddresses]); end; end; procedure TClientForm.btLoadCustomersOrdersClick(Sender: TObject); begin with ClientDataModule do begin if tbl_BPClients.Active then tbl_BPClients.Close; tbl_BPClients.Open; end; end; procedure TClientForm.btLoadProductsClick(Sender: TObject); begin AdjustBehavior; with ClientDataModule do begin tbl_SelectedGroup.ClearRows(true); tbl_Products.ClearRows(true); tbl_Groups.ClearRows(true); RemoteDataAdapter.Fill([tbl_SelectedGroup]); RemoteDataAdapter.Fill([tbl_Groups]); end; SelectedGroupChanged(nil); end; procedure TClientForm.FormCreate(Sender: TObject); begin // TODO: until DynamicRequest bug fixed //ClientDataModule.Login; Application.Title := ClientForm.Caption; pcSamples.ActivePageIndex := 0; ClientDataModule.OnSelectedGroupChange := SelectedGroupChanged; end; procedure TClientForm.HandleUpdate(const aTables: array of TDADataTable); var i: integer; begin try for i := Low(aTables) to High(aTables) do if aTables[i].State <> dsBrowse then aTables[i].Post; ClientDataModule.RemoteDataAdapter.ApplyUpdates(aTables); except on E: Exception do ShowMessage('Exception raised: ' + E.Message); end; end; procedure TClientForm.pcSamplesChange(Sender: TObject); begin case pcSamples.ActivePageIndex of 1: begin rgReducedDelta.ItemIndex := 0; rgReducedDelta.Enabled := false; end; 2: begin rgReducedDelta.ItemIndex := 1; rgReducedDelta.Enabled := false; end; else rgReducedDelta.Enabled := true; end; end; procedure TClientForm.SelectedGroupChanged(Sender: TObject); var wb: TDAWhereBuilder; expArray: array of TDAWhereExpression; begin wb := TDAWhereBuilder.Create; with wb, ClientDataModule do begin Expression := NewBinaryExpression(tbl_Products.LogicalName, 'ProductGroup', dboEqual, tbl_SelectedGroup.FieldValues[0], datInteger); tbl_Products.ClearRows(true); SetLength(expArray, 1); expArray[0] := Expression; RemoteDataAdapter.Fill([tbl_Products], expArray); end; wb.Free; end; procedure TClientForm.cbGroupsCloseUp(Sender: TObject); begin SelectedGroupChanged(Sender); end; end.