![]() |
Rave: CustomConnection zur Laufzeit hinzufügen?
Hiho!
Ist es wohl möglich - und wenn ja, wie - zur Laufzeit einem Rave-Project eine Custom-Connection zuzuweisen? Hintergrund ist folgender: Ich habe ein Programm mit IntraWeb geschrieben, welches je Sitzung ein Protokoll ausgeben soll (via Rave). Das funktioniert an sich auch wunderbar, das 1. Protokoll wird einwandfrei geschrieben, jedoch sind sämtliche Protokolle danach (aus der 2. Sitzung z.B.) leer. Allerdings mit der Anzahl der Sätze aus der 1. Sitzung (also muss dort noch irgendwie ein Rest herumschwirren...) Jetzt war meine Vermutung, dass es daran liegt, dass ich die Rave-Komponenten in der Anwendung als solches hatte. Daraufhin habe ich diese in die User-Session verschoben, das hat aber nichts gebracht. Als Nächstes hab ich versucht die Komponenten zur Laufzeit in meiner UserSession zu Erzeugen und dann auszuführen. Das resultiert dann darin, dass er gar nichts mehr anzeigte, weil er die Custom-Connection nich mehr finden konnte. Also habe ich diese wieder fest als Komponente in meiner User-Session eingebunden, den Rest(rvProject etc.) zur Laufzeit erzeugt und bin jetzt wieder bei der Ausgangssituation.... :-/ Von daher möchte ich jetzt versuchen, auch die CustomConnection zur Laufzeit zu erzeugen und diese dann dem Rave-Projekt zuzuweisen. Ist das möglich und wenn ja, wie?
Delphi-Quellcode:
// generates the output as a pdf-document
procedure TIWUserSession.generatePDF(pdfName: String; ravName: String); var rvProject: TRvProject; rvSystem: TRvSystem; rvPDF: TRvRenderPDF; begin // init components rvProject := TRvProject.Create(self); rvSystem := TRvSystem.Create(self); rvCcOutputs := TRvCustomConnection.Create(self); rvPDF := TRvRenderPDF.Create(self); // apply events to custom-connection rvCcOutputs.OnEOF := rvCcOutputsEOF; rvCcOutputs.OnFirst := rvCcOutputsFirst; rvCcOutputs.OnGetCols := rvCcOutputsGetCols; rvCcOutputs.OnGetRow := rvCcOutputsGetRow; rvCcOutputs.OnNext := rvCcOutputsNext; rvCcOutputs.OnOpen := rvCcOutputsOpen; // modify custom connection rvCcOutputs.DataIndex := 0; rvCcOutputs.DataRows := outputSets.Count; // modify rave-system-properties rvSystem.SystemOptions := rvSystem.SystemOptions - [soShowStatus]; rvSystem.SystemSetups := rvSystem.SystemSetups - [ssAllowSetup]; rvSystem.DefaultDest := rdFile; rvSystem.DoNativeOutput := false; rvSystem.RenderObject := rvPDF; rvSystem.OutputFileName := pdfName; // modify rave-project rvProject.Engine := rvSystem; rvProject.ProjectFile := ravName; // execute report rvProject.Execute(); // reset report & custom-connection rvProject.Close(); rvCcOutputs.DataRows := 0; rvCcOutputs.DataIndex := 0; end; Danke im Voraus cu Patrick |
Re: Rave: CustomConnection zur Laufzeit hinzufügen?
Ok, habs rausgefunden:
Delphi-Quellcode:
Das behebt mein Problem aber leider immer noch nich. :-/
procedure TIWUserSession.generatePDF(pdfName: String; ravName: String);
var rvProject: TRvProject; rvSystem: TRvSystem; rvPDF: TRvRenderPDF; rvCcOutputs: TRvCustomConnection; dvOutputs: TRaveDataView; dcOutputs: TRaveDataConnection; rvPage: TRavePage; bndOutputs: TRaveDataBand; begin // init components rvProject := TRvProject.Create(self); rvSystem := TRvSystem.Create(self); rvCcOutputs := TRvCustomConnection.Create(self); rvPDF := TRvRenderPDF.Create(self); // apply event-hanlders to custom-connection rvCcOutputs.OnEOF := rvCcOutputsEOF; rvCcOutputs.OnFirst := rvCcOutputsFirst; rvCcOutputs.OnGetCols := rvCcOutputsGetCols; rvCcOutputs.OnGetRow := rvCcOutputsGetRow; rvCcOutputs.OnNext := rvCcOutputsNext; rvCcOutputs.OnOpen := rvCcOutputsOpen; // modify custom connection rvCcOutputs.DataIndex := 0; rvCcOutputs.DataRows := outputSets.Count; // modify system-properties rvSystem.SystemOptions := rvSystem.SystemOptions - [soShowStatus]; rvSystem.SystemSetups := rvSystem.SystemSetups - [ssAllowSetup]; rvSystem.DefaultDest := rdFile; rvSystem.DoNativeOutput := false; rvSystem.RenderObject := rvPDF; rvSystem.OutputFileName := pdfName; // modify project rvProject.Engine := rvSystem; rvProject.ProjectFile := ravName; rvProject.Open(); // build & modify data view for the report dcOutputs := CreateDataCon(rvCcOutputs); dvOutputs := rvProject.ProjMan.NewDataObject(TRaveDataView) as TRaveDataView; dvOutputs.Name := 'dvOutputs'; dvOutputs.ConnectionName := dcOutputs.name; dvOutputs.DataCon := dcOutputs; CreateFields(dvOutputs, nil, nil, true); // get data-band & apply data-view rvPage := rvProject.ProjMan.FindRaveComponent('Report1.Page1', nil) as TRavePage; bndOutputs := rvProject.ProjMan.FindRaveComponent('bndOutputs', rvPage) as TRaveDataBand; bndOutputs.DataView := dvOutputs; // execute report rvProject.Execute(); // reset report & custom-connection rvProject.Close(); rvCcOutputs.DataRows := 0; rvCcOutputs.DataIndex := 0; end; Das 1. Dokument is nach wie vor einwandfrei, beim 2. passiert gar nix mehr. |
Re: Rave: CustomConnection zur Laufzeit hinzufügen?
So, hab auch das Problem gelöst:
Delphi-Quellcode:
Wenn ich die ganzen Objekte wieder manuell mit Free frei gebe, kommt bei der 2. Datei auch wieder alles richtig bei raus.
// ... ganz viel kram
// execute report rvProject.Execute(); rvProject.Close(); // clean up rvPDF.Free(); rvCcOutputs.Free(); rvSystem.Free(); rvProject.Free(); Dazu habe ich aber 1 Frage: Normalerweise kenne ich das so, dass Delphi lokale Variable im Var-Teil einer Funktion am Ende automatisch wieder frei gibt. Warum hier nicht?
Delphi-Quellcode:
procedure TIWUserSession.generatePDF();
var rvProject: TRvProject; rvSystem: TRvSystem; rvPDF: TRvRenderPDF; rvCcOutputs: TRvCustomConnection; begin // init components rvProject := TRvProject.Create(self); rvSystem := TRvSystem.Create(self); rvCcOutputs := TRvCustomConnection.Create(self); rvPDF := TRvRenderPDF.Create(self); // ... ganz viel Kram // clean up rvPDF.Free(); rvCcOutputs.Free(); rvSystem.Free(); rvProject.Free(); end; cu Patrick |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz