Publishing with a COM or Java Provider
I've published a report using a COM (or Java) data provider to Crystal Enterprise, but I am getting errors when the report is run.
Whenever one of these types of reports is published to Crystal Enterprise, you need to make sure you copy the COM or Java component to the machines running the Page and Job servers. This component needs to be installed and registered properly before the report can invoke it.
I am receiving errors when I try to connect to the Java data provider.
Make sure that you have installed a Java Virtual Machine (JVM, also called the Java Runtime Environment). The JVM is required to connect to Java data providers.
Crystal Reports in the Real WorldLeveraging XML as a Data Source
With the emergence of XML as a data interchange format, many customers wanted to create reports on XML documents. So in Crystal Reports 8.5, a new driver was released that allowed just this scenario. This ODBC driver reads certain types of XML documents. Version 10 of Crystal Reports provides the capability to read multiple XML files, most commonly a folder of XML files that have the same schema. When using this driver, you specify either a folder name or a file path to an XML file. Once connected, XML elements at the first level are represented as fields that you can place on a report.
If you require more flexibility around reading XML files, a good approach to take is to write a COM or Java Data Provider to read the XML. This Data Provider can use one of the many readily available XML parsers to read in the XML and choose exactly what fields to return to Crystal Reports. Listing 15.3 is a sample Visual Basic COM Data Provider that reads in a simple XML file.
Listing 15.3. A COM Data Provider That Reads XML Data
' Loads an XML document with the following structure: ' ' ' X ' X ' X ' ' Public Function SimpleXML(fileName As String) As ADODB.Recordset Dim rs As New ADODB.Recordset Dim xmlDoc As New MSXML2.DOMDocument xmlDoc.Load (fileName) rs.fields.Append "Name", adBSTR rs.fields.Append "Dept", adBSTR rs.fields.Append "Salary", adCurrency rs.Open ' Loop through each employee element Dim employeeNode As MSXML2.IXMLDOMElement Dim childNode As MSXML2.IXMLDOMElement For Each employeeNode In xmlDoc.documentElement.childNodes rs.AddNew For Each childNode In employeeNode.childNodes rs(childNode.nodeName).Value = childNode.Text Next rs.Update Next Set SimpleXML = rs End Function