Componentes.Terceros.RemObj.../official/5.0.24.615/Data Abstract for Delphi/Samples/Memory Data/NewService_Impl.pas

174 lines
5.6 KiB
ObjectPascal

unit NewService_Impl;
{----------------------------------------------------------------------------}
{ This unit was automatically generated by the RemObjects SDK after reading }
{ the RODL file associated with this project . }
{ }
{ This is where you are supposed to code the implementation of your objects. }
{----------------------------------------------------------------------------}
interface
uses
{vcl:} Classes, SysUtils,
{RemObjects:} uROClientIntf, uROTypes, uROServer, uROServerIntf, uROSessions,
{Ancestor Implementation:} DataAbstractService_Impl,
{Used RODLs:} DataAbstract4_Intf,
{Generated:} MemoryDataLibrary_Intf, uDAScriptingProvider, uDADataTable,
uDACDSDataTable, uDAClasses, uDADataStreamer, uDABinAdapter, uDAInterfaces;
const
{ Dataset names for Schema }
ds_Employees = 'Employees';
ds_Customers = 'Customers';
ds_Regions = 'Regions';
type
{ TNewService }
TNewService = class(TDataAbstractService, INewService)
BinAdapter: TDABinDataStreamer;
dtComboDataset: TDACDSDataTable;
dtWindowsDir: TDACDSDataTable;
Schema: TDASchema;
procedure DataAbstractServiceBeforeGetDatasetData(aSender: TObject;
const aDataset: IDADataset; const aIncludeSchema: Boolean;
const aMaxRecords: Integer);
procedure DataAbstractServiceValidateDatasetAccess(Sender: TObject;
const aConnection: IDAConnection; const aDatasetName: string;
const aParamNames: array of string;
const aParamValues: array of Variant; aSchema: TDASchema;
var Allowed: Boolean);
private
procedure FillComboDataset(const aDataset: IDAEditableDataset);
procedure FillWinDirDataset(const aDataset: IDAEditableDataset);
protected
{ INewService methods }
end;
implementation
{$R *.dfm}
uses
{Generated:} MemoryDataLibrary_Invk, MemoryData_ServerData, Dialogs;
procedure Create_NewService(out anInstance: IUnknown);
begin
anInstance := TNewService.Create(nil);
end;
procedure TNewService.FillComboDataset(const aDataset: IDAEditableDataset);
var
employees,
customers,
regions: IDADataset;
textfield: TDAField;
begin
with aDataset do begin
// Opens the in memory data table
Open;
textfield := FieldByName('TextField');
// Adds 3 dummy records
Insert;
textfield.AsString := 'String A';
Post;
Insert;
textfield.AsString := 'String B';
Post;
Insert;
textfield.AsString := 'String C';
Post;
// Fetches data from other datasets, according to the value of the parameter "CustomParameter"
if (Pos('EMPLOYEES', UpperCase(ParamByName('CustomParameter').AsString)) > 0) then begin
employees := Schema.NewDataset(Connection, ds_Employees, [], [], TRUE);
while not employees.EOF do begin
Insert;
textfield.AsString := employees.FieldByName('FirstName').AsString + ' ' + employees.FieldByName('LastName').AsString;
Post;
employees.Next;
end;
employees:=nil;
end;
if (Pos('CUSTOMERS', UpperCase(ParamByName('CustomParameter').AsString)) > 0) then begin
customers := Schema.NewDataset(Connection, ds_Customers, [], [], TRUE);
while not customers.EOF do begin
Insert;
textfield.AsString := customers.FieldByName('CompanyName').AsString;
Post;
customers.Next;
end;
customers := nil;
end;
if (Pos('REGIONS', UpperCase(ParamByName('CustomParameter').AsString)) > 0) then begin
regions := Schema.NewDataset(Connection, ds_Regions, [], [], TRUE);
while not regions.EOF do begin
Insert;
textfield.AsString := regions.FieldByName('RegionDescription').AsString;
Post;
regions.Next;
end;
regions := nil;
end;
end;
end;
procedure TNewService.FillWinDirDataset(const aDataset: IDAEditableDataset);
var
dirinfo: TSearchRec;
begin
aDataset.Open;
if (FindFirst(IncludeTrailingPathDelimiter(aDataset.ParamByName('Directory').AsString) + '*.*', faArchive, dirinfo) = 0) then repeat
aDataset.Insert;
aDataset.FieldByName('FileName').AsString := dirinfo.Name;
aDataset.FieldByName('FileSize').AsInteger := dirinfo.Size;
aDataset.Post;
until (FindNext(dirinfo) <> 0);
end;
procedure TNewService.DataAbstractServiceBeforeGetDatasetData(
aSender: TObject; const aDataset: IDADataset;
const aIncludeSchema: Boolean; const aMaxRecords: Integer);
begin
if SameText(aDataset.LogicalName, dtComboDataset.LogicalName) then
FillComboDataset((dtComboDataset as IDAEditableDataset))
else if SameText(aDataset.LogicalName, dtWindowsDir.LogicalName) then
FillWinDirDataset((dtWindowsDir as IDAEditableDataset));
end;
procedure TNewService.DataAbstractServiceValidateDatasetAccess(
Sender: TObject; const aConnection: IDAConnection;
const aDatasetName: string; const aParamNames: array of string;
const aParamValues: array of Variant; aSchema: TDASchema;
var Allowed: Boolean);
procedure FillParameters(aDataSet: TDACDSDataTable);
var
i: integer;
begin
for i := Low(aParamNames) to High(aParamNames) do
aDataset.ParamByName(aParamNames[i]).Value := aParamValues[i];
end;
begin
if SameText(aDatasetName, dtComboDataset.LogicalName) then
FillParameters(dtComboDataset)
else if SameText(aDatasetName, dtWindowsDir.LogicalName) then
FillParameters(dtWindowsDir)
end;
initialization
TROClassFactory.Create('NewService', Create_NewService, TNewService_Invoker);
finalization
end.