I've used the following approach to solve the SQL Reporting issue. InfoPath forms are submitted to a centralized web service, which performs the following checks:
- authenticates the submitting user
- checks against AD roles to ensure the user is authorized to submit
- validates the form based on the InfoPath schema
- validates the version information to see if it's allowable/supported
I use a custom Web Service extension to pass the SOAP payload (the InfoPath form) directly to the web service as a stream.
Once the form passes muster, it is either saved to a network share on our SAN, or else PUT to a SharePoint form or document library (depending on how that form was configured).
Then the form is passed to a separate SQL Server in a parameterized Stored Procedure. It's shredded using OpenXML into one or more transactional updates to the database. Of course, the database is updated with as little or as much of the InfoPath form data as desired.
The whole web service form post is treated as a single transaction. If the DB update fails, the form is deleted from the filesystem or SharePoint library. If the form cannot be saved to SharePoint or the filesystem, the DB update never happens. In either case, an error message is constructed and returned to the InfoPath client.
Authorized Users can browse the forms via SharePoint as usual, but the data contained within the forms is also available via SQL Server Reporting Services. The reports generated from that data also contain links to the original forms in SharePoint (or the filesystem).
Everything is configurable via custom configuration handlers in the Web Service so that each form can post to a different database, if needed.
The nice part is that this backend stuff is all hidden from the user. They open an InfoPath template from a SharePoint form library (or any other source, for that matter), they fill out the form, they submit it.
Regards,
Mike Sharp