git-svn-id: https://192.168.0.254/svn/Componentes.Terceros.RemObjects@68 b6239004-a887-0f4b-9937-50029ccdca16
183 lines
5.0 KiB
ObjectPascal
183 lines
5.0 KiB
ObjectPascal
unit fClientForm;
|
|
|
|
interface
|
|
|
|
uses
|
|
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,
|
|
uROClient, uROClientIntf, uRORemoteService, uROBinMessage,
|
|
uROPoweredByRemObjectsButton, uDAPoweredByDataAbstractButton, ExtCtrls, Grids,
|
|
DBGrids, uDAInterfaces;
|
|
|
|
type
|
|
TClientForm = class(TForm)
|
|
Panel1: TPanel;
|
|
DAPoweredByDataAbstractButton1: TDAPoweredByDataAbstractButton;
|
|
Label1: TLabel;
|
|
cbConditions: TComboBox;
|
|
Panel2: TPanel;
|
|
Label2: TLabel;
|
|
edXML: TMemo;
|
|
Panel4: TPanel;
|
|
btLoad: TButton;
|
|
btValidate: TButton;
|
|
dgData: TDBGrid;
|
|
procedure FormCreate(Sender: TObject);
|
|
procedure cbConditionsChange(Sender: TObject);
|
|
procedure btValidateClick(Sender: TObject);
|
|
procedure btLoadClick(Sender: TObject);
|
|
private
|
|
{ Private declarations }
|
|
function GetTemplateWhereExpression: TDAWhereExpression;
|
|
procedure ShowXML(aExpr: TDAWhereExpression);
|
|
public
|
|
{ Public declarations }
|
|
end;
|
|
|
|
var
|
|
ClientForm: TClientForm;
|
|
|
|
implementation
|
|
|
|
uses
|
|
fClientDataModule;
|
|
|
|
{$R *.dfm}
|
|
|
|
procedure TClientForm.btLoadClick(Sender: TObject);
|
|
var
|
|
wb: TDAWhereBuilder;
|
|
expr: TDAWhereExpression;
|
|
expArr: array of TDAWhereExpression;
|
|
begin
|
|
wb := TDAWhereBuilder.Create;
|
|
try
|
|
with ClientDataModule do begin
|
|
tbl_Workers.ClearRows(true);
|
|
if Trim(edXML.Text) <> ''
|
|
then expr := wb.XMLToExpression(edXML.Text)
|
|
else expr := nil;
|
|
SetLength(expArr, 1);
|
|
expArr[0] := expr;
|
|
RemoteDataAdapter.Fill([tbl_Workers], expArr);
|
|
end;
|
|
except
|
|
on E: Exception do ShowMessage('Error loading data: ' + E.Message);
|
|
end;
|
|
wb.Free;
|
|
end;
|
|
|
|
procedure TClientForm.btValidateClick(Sender: TObject);
|
|
var
|
|
expr: TDAWhereExpression;
|
|
wb: TDAWhereBuilder;
|
|
begin
|
|
wb := TDAWhereBuilder.Create;
|
|
try
|
|
try
|
|
expr := wb.XMLToExpression(edXML.Text);
|
|
expr.Validate;
|
|
ShowMessage('XML Where expression is valid');
|
|
except
|
|
on E: Exception do ShowMessage('XML Where expression is INVALID: ' + E.Message);
|
|
end;
|
|
finally
|
|
wb.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TClientForm.cbConditionsChange(Sender: TObject);
|
|
var
|
|
expr: TDAWhereExpression;
|
|
begin
|
|
expr := GetTemplateWhereExpression;
|
|
ShowXML(expr);
|
|
end;
|
|
|
|
procedure TClientForm.FormCreate(Sender: TObject);
|
|
begin
|
|
// TODO: until DynamicRequest bug fixed
|
|
//ClientDataModule.Login;
|
|
Application.Title := ClientForm.Caption;
|
|
cbConditionsChange(nil);
|
|
end;
|
|
|
|
function TClientForm.GetTemplateWhereExpression: TDAWhereExpression;
|
|
var
|
|
wb: TDAWhereBuilder;
|
|
begin
|
|
Result := nil;
|
|
wb := TDAWhereBuilder.Create;
|
|
with wb, ClientDataModule.tbl_Workers do
|
|
case cbConditions.ItemIndex of
|
|
//Position is Sales Manager
|
|
0: Result := NewBinaryExpression(
|
|
NewField(LogicalName, 'WorkerPosition'),
|
|
NewConstant('Sales Manager', datString),
|
|
dboEqual);
|
|
//Job is Sales Manager And City is Chicago
|
|
1: Result := NewBinaryExpression(
|
|
NewBinaryExpression(
|
|
NewField(LogicalName, 'WorkerPosition'),
|
|
NewConstant('Sales Manager', datString),
|
|
dboEqual),
|
|
NewBinaryExpression(
|
|
NewField(LogicalName, 'WorkerCity'),
|
|
NewConstant('Chicago IL', datString),
|
|
dboEqual),
|
|
dboAnd);
|
|
//City is Chicago or Atlanta
|
|
2: Result := NewBinaryExpression(
|
|
NewField(LogicalName, 'WorkerCity'),
|
|
NewList([NewConstant('Chicago IL', datString), NewConstant('Atlanta CA', datString)]),
|
|
dboIn);
|
|
//FirstName doesn't begin with A
|
|
3: Result := NewUnaryExpression(
|
|
NewBinaryExpression(
|
|
NewField(LogicalName, 'WorkerFirstName'),
|
|
NewConstant('A%', datString),
|
|
dboLike),
|
|
duoNot);
|
|
//(Position is Sales Representative Or Zip is NULL) And (City is Kirkland or Seattle)
|
|
4: Result := NewBinaryExpression(
|
|
NewBinaryExpression(
|
|
NewBinaryExpression(
|
|
NewField(LogicalName, 'WorkerPosition'),
|
|
NewConstant('Sales Representative', datString),
|
|
dboEqual),
|
|
NewBinaryExpression(
|
|
NewField(LogicalName, 'WorkerZip'),
|
|
NewNull,
|
|
dboEqual),
|
|
dboOr),
|
|
NewBinaryExpression(
|
|
NewField(LogicalName, 'WorkerCity'),
|
|
NewList(
|
|
[NewConstant('Kirkland', datString),
|
|
NewConstant('Seattle', datString)]
|
|
),
|
|
dboIn),
|
|
dboAnd);
|
|
// Wrong condition - incorrect field name
|
|
6: Result := NewBinaryExpression(
|
|
NewField(LogicalName, 'Country_Name'),
|
|
NewConstant('UK', datString),
|
|
dboEqual);
|
|
end;
|
|
wb.Free;
|
|
end;
|
|
|
|
procedure TClientForm.ShowXML(aExpr: TDAWhereExpression);
|
|
var
|
|
wb: TDAWhereBuilder;
|
|
begin
|
|
edXML.Clear;
|
|
if Assigned(aExpr) then begin
|
|
wb := TDAWhereBuilder.Create;
|
|
wb.Expression := aExpr;
|
|
edXML.Text := wb.Xml;
|
|
wb.Free;
|
|
end;
|
|
end;
|
|
|
|
end.
|