Home Datapipelines
New Blog Posts: Merging Reports - Part 1 and Part 2

Using an ISAPI/DSO (read IntraWeb / EWF), RemObjects, and RB 10

edited February 2006 in Datapipelines
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

Comments

  • edited February 2006

    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
  • edited February 2006


    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
This discussion has been closed.