Componentes.Terceros.RemObj.../internal/5.0.24.615/1/Data Abstract for Delphi/Source/IDE/uDADataTableMasterLinkWizardForm.pas

392 lines
12 KiB
ObjectPascal

unit uDADataTableMasterLinkWizardForm;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, Buttons, uDADataTable, uEWWizard, ExtCtrls,
DesignIntf;
type
TDADataTableMasterLinkWizard = class(TEWWizardForm)
ts_Fields: TTabSheet;
ts_MethodCall: TTabSheet;
ts_Params: TTabSheet;
labMasterFields: TLabel;
labDetailFields: TLabel;
Label13: TLabel;
Label14: TLabel;
lbMaster: TListBox;
lbDetail: TListBox;
eMasterFields: TEdit;
eDetailFields: TEdit;
bbAddFieldMapping: TBitBtn;
BitBtn4: TBitBtn;
labMasterFields2: TLabel;
labDataReqParams: TLabel;
Label7: TLabel;
lbMaster2: TListBox;
lbDataReqParams: TListBox;
mMappings: TMemo;
bbAddDataReqMapping: TBitBtn;
bbClearDataReqMapping: TBitBtn;
Label11: TLabel;
Label12: TLabel;
Label15: TLabel;
lbMaster3: TListBox;
lbParams: TListBox;
mParamsMappings: TMemo;
bbAddParamMappingXXX: TBitBtn;
bbClearParamMappingsXXX: TBitBtn;
ts_MasterSource: TTabSheet;
Label8: TLabel;
Label9: TLabel;
Label18: TLabel;
Label19: TLabel;
Label20: TLabel;
Label21: TLabel;
cb_DataSources: TComboBox;
Label10: TLabel;
Label17: TLabel;
rb_Params: TRadioButton;
rb_Method: TRadioButton;
lbl_Params1: TLabel;
lbl_Params2: TLabel;
lbl_Method1: TLabel;
lbl_Method2: TLabel;
Label22: TLabel;
Label23: TLabel;
lbl_Params3: TLabel;
Label24: TLabel;
Label25: TLabel;
Label26: TLabel;
Label27: TLabel;
Label28: TLabel;
Label29: TLabel;
rb_Where: TRadioButton;
lbl_Where1: TLabel;
lbl_Where2: TLabel;
procedure bbAddFieldMappingClick(Sender: TObject);
procedure bbAddDataReqMappingClick(Sender: TObject);
procedure bbClearDataReqMappingClick(Sender: TObject);
procedure BitBtn4Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure bbAddParamMappingXXXClick(Sender: TObject);
procedure bbClearParamMappingsXXXClick(Sender: TObject);
procedure cb_DataSourcesChange(Sender: TObject);
procedure btn_FinishClick(Sender: TObject);
procedure OnFieldMappingChange(Sender: TObject);
private
fDataTable: TDADataTable;
fMasterSource: TDADataSource;
fDesigner: IDesigner;
procedure GetDataTables(const aName: string);
procedure Initialize;
protected
constructor Create(aOwner : TComponent); reintroduce;
procedure AfterEnterPage(aPage:TTabSheet; aMovingForward:boolean); override;
procedure OnLeavePage(aPage:TTabSheet; aMovingForward:boolean); override;
public
class function ExecuteWizard(aDataTable: TDADataTable; aDesigner: IDesigner): boolean;
end;
var
DADataTableMasterLinkWizard: TDADataTableMasterLinkWizard;
implementation
uses uROClasses, TypInfo, uDARemoteDataAdapter, uRODynamicRequest, uRODL;
{$R *.dfm}
procedure TrimNamesAndValues(aSL: TStrings);
var
i: Integer;
begin
for i := 0 to aSL.Count - 1 do begin
aSL[i] := Trim(aSL.Names[i]) + {$IFDEF DELPHI7UP}aSL.NameValueSeparator{$ELSE}'='{$ENDIF} + Trim(aSL.Values[aSL.Names[i]]);
end;
end;
{ TDataTableMasterLink }
class function TDADataTableMasterLinkWizard.ExecuteWizard(aDataTable: TDADataTable; aDesigner: IDesigner): boolean;
begin
with TDADataTableMasterLinkWizard.Create(NIL) do try
fDataTable := aDataTable;
fDesigner := aDesigner;
Initialize();
result := Execute();
finally
Free;
end;
end;
constructor TDADataTableMasterLinkWizard.Create(aOwner: TComponent);
begin
inherited;
end;
procedure TDADataTableMasterLinkWizard.Initialize;
var
i : integer;
begin
cb_DataSources.Items.Clear();
fDesigner.GetComponentNames(GetTypeData(TypeInfo(TDADataSource)), GetDataTables);
if assigned(fDataTable.MasterSource) then begin
cb_DataSources.ItemIndex := cb_DataSources.Items.IndexOf(fDataTable.MasterSource.Name);
//lMasterTable := fDataTable.MasterSource.DataTable;
//Check(mast=NIL, 'MasterSource doesn''t point to a datatable');
end;
cb_DataSourcesChange(nil);
Caption := Format(Caption, [fDataTable.Name]);
eMasterFields.Text := fDataTable.MasterFields;
eDetailFields.Text := fDataTable.DetailFields;
mMappings.Lines.Text := fDataTable.MasterRequestMappings.Text;
mParamsMappings.Lines.Text := fDataTable.MasterParamsMappings.Text;
for i := 0 to (fDataTable.FieldCount-1) do
lbDetail.Items.Add(fDataTable.Fields[i].Name);
for i := 0 to (fDataTable.Params.Count-1) do
lbParams.Items.Add(fDataTable.Params[i].Name);
case fDataTable.MasterMappingMode of
mmParams: rb_Params.Checked := true;
mmDataRequest: rb_Method.Checked := true;
mmWhere: rb_Where.Checked := true;
end;
end;
procedure TDADataTableMasterLinkWizard.cb_DataSourcesChange(Sender: TObject);
var
lMasterTable: TDADataTable;
lCall: TRODynamicRequest;
i: integer;
begin
inherited;
fMasterSource := fDesigner.GetComponent(cb_DataSources.Text) as TDADataSource;
if assigned(fMasterSource) and assigned(fMasterSource.DataTable) then begin
lMasterTable := fMasterSource.DataTable;
rb_Params.Enabled := fDataTable.Params.Count > 0;
lbl_Params1.Enabled := rb_Params.Enabled;
lbl_Params2.Enabled := rb_Params.Enabled;
rb_Method.Enabled := assigned(lMasterTable.RemoteDataAdapter) and
assigned(fDataTable.RemoteDataAdapter) and
(lMasterTable.RemoteDataAdapter <> fDataTable.RemoteDataAdapter);
lbl_Method1.Enabled := rb_Method.Enabled;
if (not rb_Params.Enabled and rb_Params.Checked) or (not rb_Method.Enabled and rb_Method.Checked) then
rb_Where.Checked := true;
lbMaster.Items.Clear();
lbMaster2.Items.Clear();
lbMaster3.Items.Clear();
for i := 0 to (lMasterTable.FieldCount-1) do begin
lbMaster.Items.Add(lMasterTable.Fields[i].Name);
lbMaster2.Items.Add(lMasterTable.Fields[i].Name);
lbMaster3.Items.Add(lMasterTable.Fields[i].Name);
end;
if assigned(fDataTable.RemoteDataAdapter) then begin
lCall := (fDataTable.RemoteDataAdapter as TDARemoteDataAdapter).GetDataCall;
lbDataReqParams.Items.Clear();
for i := 0 to lCall.Params.Count-1 do
if lCall.Params[i].Flag in [fIn, fInOut] then
lbDataReqParams.Items.Add(lCall.Params[i].Name);
end
else begin
lbDataReqParams.Enabled := false;
end;
if pc_Pages.ActivePage = ts_MasterSource then
btn_Next.Enabled := (rb_Where.Enabled and rb_Where.Checked) or (rb_Params.Enabled and rb_Params.Checked) or (rb_Method.Enabled and rb_Method.Checked);
end
else begin
if pc_Pages.ActivePage = ts_MasterSource then
btn_Next.Enabled := false;
end;
end;
procedure TDADataTableMasterLinkWizard.GetDataTables(const aName: string);
var
lDataSource: TDADataSource;
begin
lDataSource := fDesigner.GetComponent(aName) as TDADataSource;
if assigned(lDataSource.DataTable) and assigned(lDataSource.DataTable) and (lDataSource.DataTable <> fDataTable) then
cb_DataSources.Items.Add(aName);
end;
procedure TDADataTableMasterLinkWizard.bbAddFieldMappingClick(Sender: TObject);
var x : integer;
begin
if (lbMaster.SelCount=0) or (lbMaster.SelCount<>lbDetail.SelCount) then begin
Beep;
Exit;
end;
for x := 0 to (lbMaster.Items.Count-1) do
if lbMaster.Selected[x] then begin
if (eMasterFields.Text<>'')
then eMasterFields.Text := eMasterFields.Text+';';
eMasterFields.Text := eMasterFields.Text+lbMaster.Items[x];
end;
for x := 0 to (lbDetail.Items.Count-1) do
if lbDetail.Selected[x] then begin
if (eDetailFields.Text<>'')
then eDetailFields.Text := eDetailFields.Text+';';
eDetailFields.Text := eDetailFields.Text+lbDetail.Items[x];
end;
OnFieldMappingChange(nil);
end;
procedure TDADataTableMasterLinkWizard.bbAddDataReqMappingClick(Sender: TObject);
var x, i : integer;
s : TStringList;
begin
if (lbMaster2.SelCount=0) or (lbDataReqParams.SelCount<>lbMaster2.SelCount) then begin
Beep;
Exit;
end;
s := TStringList.Create;
try
for x := 0 to (lbDataReqParams.Items.Count-1) do
if lbDataReqParams.Selected[x] then s.Add(lbDataReqParams.Items[x]+'=');
i := 0;
for x := 0 to (lbMaster2.Items.Count-1) do
if lbMaster2.Selected[x] then begin
s[i] := s[i]+lbMaster2.Items[x];
Inc(i);
end;
mMappings.Lines.AddStrings(s);
finally
s.Free;
end;
end;
procedure TDADataTableMasterLinkWizard.bbClearDataReqMappingClick(Sender: TObject);
begin
mMappings.Lines.Clear
end;
procedure TDADataTableMasterLinkWizard.BitBtn4Click(Sender: TObject);
begin
eMasterFields.Text := '';
eDetailFields.Text := '';
OnFieldMappingChange(nil);
end;
procedure TDADataTableMasterLinkWizard.OnFieldMappingChange(
Sender: TObject);
begin
inherited;
if pc_Pages.ActivePage = ts_Fields then
btn_Next.Enabled := (eMasterFields.Text <> '') and (eDetailFields.Text <> '');
end;
procedure TDADataTableMasterLinkWizard.FormCreate(Sender: TObject);
begin
inherited;
//PageControl1.ActivePageIndex := 0
end;
procedure TDADataTableMasterLinkWizard.bbAddParamMappingXXXClick(Sender: TObject);
var x, i : integer;
s : TStringList;
begin
if (lbMaster3.SelCount=0) or (lbParams.SelCount<>lbMaster3.SelCount) then begin
Beep;
Exit;
end;
s := TStringList.Create;
try
for x := 0 to (lbParams.Items.Count-1) do
if lbParams.Selected[x] then s.Add(lbParams.Items[x]+'=');
i := 0;
for x := 0 to (lbMaster3.Items.Count-1) do
if lbMaster3.Selected[x] then begin
s[i] := s[i]+lbMaster3.Items[x];
Inc(i);
end;
mParamsMappings.Lines.AddStrings(s);
finally
s.Free;
end;
end;
procedure TDADataTableMasterLinkWizard.bbClearParamMappingsXXXClick(Sender: TObject);
begin
mParamsMappings.Lines.Clear
end;
procedure TDADataTableMasterLinkWizard.btn_FinishClick(Sender: TObject);
begin
inherited;
fDataTable.MasterSource := fMasterSource;
fDataTable.MasterFields := eMasterFields.Text;
fDataTable.DetailFields := eDetailFields.Text;
TrimNamesAndValues(mMappings.Lines);
TrimNamesAndValues(mParamsMappings.Lines);
fDataTable.MasterRequestMappings.Text := mMappings.Lines.Text;
fDataTable.MasterParamsMappings.Text := mParamsMappings.Lines.Text;
if rb_Where.Checked then
fDataTable.MasterMappingMode := mmWhere
else if rb_Params.Checked then
fDataTable.MasterMappingMode := mmParams
else if rb_Method.Checked then
fDataTable.MasterMappingMode := mmDataRequest;
end;
procedure TDADataTableMasterLinkWizard.AfterEnterPage(aPage: TTabSheet;
aMovingForward: boolean);
begin
inherited;
if (aPage = ts_MasterSource) and aMovingForward then begin
cb_DataSourcesChange(nil);
end
else if (aPage = ts_Fields) and aMovingForward then begin
OnFieldMappingChange(nil);
end;
end;
procedure TDADataTableMasterLinkWizard.OnLeavePage(aPage: TTabSheet;
aMovingForward: boolean);
begin
inherited;
if (aPage = ts_Fields) and aMovingForward then begin
if rb_Where.Checked then NextPage := ts_Finish.PageIndex
else if rb_Params.Checked then NextPage := ts_Params.PageIndex
else if rb_Method.Checked then NextPage := ts_MethodCall.PageIndex;
end
else if (aPage = ts_Params) or (aPage = ts_MethodCall) then begin
NextPage := ts_Finish.PageIndex;
PreviousPage := ts_Fields.PageIndex;
end;
end;
end.