Using an ISAPI/DSO (read IntraWeb / EWF), RemObjects, and RB 10
Digital-Metaphors Peer Support,
Perhaps I am expecting too much from RB ? Especially as a newbie to RB.
Let me explain.
OBJECTIVE:
I am attempting to deliver within the context of an ISAPI/DSO
application a RB 10 report (eg. PDF) that receives both its data and its
template from RemObjects (RODA) via a webservice. The immediate
question one might ask is why not use the RBServer for this task. Answer...
a) That would require maintaining the queries both in the application
and in the DADE views within the reports.
b) Furthermore, the data to report on has already been queried and is
sitting in a memory dataset.
c) And there is the parameter issue, which as I understand RBServer
will not produce parameters prompts (out of the box) for querys that
were not built with the RB query wizard (read procedures or edited SQL
queries).
ROUGH ARCHITECTURE
N-Tier
Database : MS SQLServer 2000
Middle-Tier : RemObjects (Delphi 7)
Client : ISAPI/DSO (EWF /Intraweb)
CURRENT PROGRESS
1) Opened up the simple MSSQL ADO demo and explored modifying it to
enable designing reports via a DADE driver for RODA. Realized that for
my immediate problem, this path would have to wait.
QUESTION: What is the status on the DADE driver for RODA? I for one
would greatly appreciate this feature and am sure others would as well.
I see one for MIDAS, but midas is dead. There was talk of work on
this behalf over a year ago.
2) Developed a report via simple MSSQL ADO report demo using Delphi
2006. No problems.
NOTE: Minus the bugs that have cropped up in version 10.
1) I receive a "List Index" error when attempting to edit an
existing query.
2) The modified object inspector (which BTW HAD to be done) loses
itself in its scrolling mechanism.
This report was developed using DADE with a very complicated report
that spans multiple databases within SQL Server, and ultimately needs
SQL parameters. Then I threw in a couple of calculation events. Ran a
preview, and viewed the report with the data. I am happy.... Minus the
bugs and the inability to develop via RODA
3) Save the report to SQL Server. No problems.
4) Now to the ISAPI. On a given user's session data module (using EWF
with Delphi 7) I create a TppReport and two TppDBPipeline in runtime,
and perform the appropriate plumbing. I had a problem using the
LoadFromDatabase method, so I streamed the template instead using
LoadFromStream. I then used GetSQLObject and SetSQLObject to swaps out
the dataview stored in the report with my DA dataview. Testing produced
an error stating "TdaSession.GetDatabaseForName; No TADOConnection
object found for specified name, adoRaptor. A seperate database
connection is required for each tread". So as a test I modified the
report by deleting the DataView. This time the above error went away to
be replaced by an RAP event error indicating it couldn't find the
appropriate pipeline, which I thought curious since the data pipeline I
created on the fly had the same Username. So I deleted all events,
which then resulted in successfully producing PDFed data.
QUESTION:
1) Am I going about this entirely wrong?
2) What steps am I missing that will enable me to design reports
against ADO (until a RODA DADE driver is made available ) and deliver
the report via RODA?
3) How can one swap pipelines and still have the various RAP events
compile and fire correctly?
Your attention on this matter is appreciated.
Kind Regards,
Monte Carver
Perhaps I am expecting too much from RB ? Especially as a newbie to RB.
Let me explain.
OBJECTIVE:
I am attempting to deliver within the context of an ISAPI/DSO
application a RB 10 report (eg. PDF) that receives both its data and its
template from RemObjects (RODA) via a webservice. The immediate
question one might ask is why not use the RBServer for this task. Answer...
a) That would require maintaining the queries both in the application
and in the DADE views within the reports.
b) Furthermore, the data to report on has already been queried and is
sitting in a memory dataset.
c) And there is the parameter issue, which as I understand RBServer
will not produce parameters prompts (out of the box) for querys that
were not built with the RB query wizard (read procedures or edited SQL
queries).
ROUGH ARCHITECTURE
N-Tier
Database : MS SQLServer 2000
Middle-Tier : RemObjects (Delphi 7)
Client : ISAPI/DSO (EWF /Intraweb)
CURRENT PROGRESS
1) Opened up the simple MSSQL ADO demo and explored modifying it to
enable designing reports via a DADE driver for RODA. Realized that for
my immediate problem, this path would have to wait.
QUESTION: What is the status on the DADE driver for RODA? I for one
would greatly appreciate this feature and am sure others would as well.
I see one for MIDAS, but midas is dead. There was talk of work on
this behalf over a year ago.
2) Developed a report via simple MSSQL ADO report demo using Delphi
2006. No problems.
NOTE: Minus the bugs that have cropped up in version 10.
1) I receive a "List Index" error when attempting to edit an
existing query.
2) The modified object inspector (which BTW HAD to be done) loses
itself in its scrolling mechanism.
This report was developed using DADE with a very complicated report
that spans multiple databases within SQL Server, and ultimately needs
SQL parameters. Then I threw in a couple of calculation events. Ran a
preview, and viewed the report with the data. I am happy.... Minus the
bugs and the inability to develop via RODA
3) Save the report to SQL Server. No problems.
4) Now to the ISAPI. On a given user's session data module (using EWF
with Delphi 7) I create a TppReport and two TppDBPipeline in runtime,
and perform the appropriate plumbing. I had a problem using the
LoadFromDatabase method, so I streamed the template instead using
LoadFromStream. I then used GetSQLObject and SetSQLObject to swaps out
the dataview stored in the report with my DA dataview. Testing produced
an error stating "TdaSession.GetDatabaseForName; No TADOConnection
object found for specified name, adoRaptor. A seperate database
connection is required for each tread". So as a test I modified the
report by deleting the DataView. This time the above error went away to
be replaced by an RAP event error indicating it couldn't find the
appropriate pipeline, which I thought curious since the data pipeline I
created on the fly had the same Username. So I deleted all events,
which then resulted in successfully producing PDFed data.
QUESTION:
1) Am I going about this entirely wrong?
2) What steps am I missing that will enable me to design reports
against ADO (until a RODA DADE driver is made available ) and deliver
the report via RODA?
3) How can one swap pipelines and still have the various RAP events
compile and fire correctly?
Your attention on this matter is appreciated.
Kind Regards,
Monte Carver
This discussion has been closed.
Comments
Welcome to the ReportBuilder community
Our goal is to produce the best quality product and support possible - so
that our customers can build world class reporting solutions. To do that we
need the help of the ReportBuilder community. I view the entire community as
a team working together.
Please modify your newsreader settings to post using your first and last
name, rather than MRCarver. We like to know the names of the developers that
we are collaborating with.
Newsgroup guidelines can be found in the support | newsgroups section of our
web site.
If at all possible, we ask the ReportBuilder community to help us by
providing detailed bug reports. To fix bugs, we need to be able to recreate
them. Many customer email bug reports to support@digital-metaphors.com and
include detailed steps to recreate the issuse or a small focused example
project that we can run here in the debugger. These are the bugs that we
attack we first, because we can quickly focus on fixing the problem.
Thanks in advance for any help you can provide in this regard.
(Note: If you encounter an exception or AV, we recommend saving your work
and exiting Delphi, otherwise the corrupted environment can become very
unstable.)
I will create a separate post to reply to your questions.
Thanks for supporting RB!
Best regards,
Nard Moseley
Digital Metaphors
www.digital-metaphors.com
Make sense.
As for (c), you can programmatically create Report.AutoSearchFields[], which
will result in RB displaying the AutoSearch dialog for you. Basically you
would use the Report.OnInitializeParameters event to create the
AutoSearchFields, then use the Report.BeforeOpenDataPipelines event to
programmatically modify the query. In an RB Server environment the required
event-handler code would be at the back end server level. The RB WebTier
would handle everything else (getting the params off the server, displaying
the web form, and sending the param values back to the server).
Regretfully we have not had the resources to complete this project.
Allessandro and I had colloborated and discussed some strategies for
implementing a solution. A standard DADE plug-in can usually be created by
copying one of the existing plug-ins and performing some minor
modifications. For RODA, much more work is required. The population of DADE
plug-ins included with the product and listed on our web site have been a
joint effort between DM, the publishers of the third party data access
components, and the developer community.
One approach that you might consider is to create one of more Custom
DataView classes. A DataView class acts as a container for a set of data
access components required by a report. For an example, see
RBuilder\Demos\EndUser\Custom DataViews (and see the DADE thread of the tech
tips newsgroups for an overview of the architecture).
Any steps you can provide would be helpful. I do not understand what you
mean by 'modified object inspector'.
If you want to use RODA rather than ADO, there are two options:
1. Use external data access components
For each report that want to use in your web app, create a DataModule that
contains the TppReport, TppDBPipeline(s) and associated RODA client data
access components.
2. Create custom dataview classes. As described above.
I recommend using the "external data access components" approach as a
starting point. Then you you could convert to the custom dataview approach,
if desired.
1. Check out the DADE thread of the Tech Tips newsgroups for an overview of
the architecture. When you use the RB Query tools to with ADO, a
TdaADOQueryDataView will be created. The query data view is a container for
a set of data access components that can be used to supply the report with
data:
TdaADOQueryDataView
- TdaSQL (generates a SQL string)
- TADOQuery (get assigned the SQL string generated by TdaSQL)
- TDataSource
- TppDBPipeline
As shown above, the DBPipelines are part of the DataView (there is no need
to create any at runtime.)
2. When using the Report Designer to create the queries, use a
TADOConnection on the same form/datamodule as the report. Configure its
connection settings. The TADOConnection.Name value is saved by the TdaSQL
object as part of the query definition. At run-time when you load the
report, you need to have a TADOConnection with the same Name. The
ADOConnection should have the same owner as the TppReport (typically this is
a datamodule or form).
3. If you want to perform run-time modification of the SQL associated with a
query, use the TdaSQLBuilder class. See the RBuilder.hlp for TdaSQLBuilder
and then traverse to subtopics that contain code examples.
Hope this helps...
Best regards,
Nard Moseley
Digital Metaphors
www.digital-metaphors.com