Ayuda con JAVA + Crystal report

Iniciado por ly0n, 2 Junio 2014, 19:45 PM

0 Miembros y 1 Visitante están viendo este tema.

ly0n

Buen dia, queria pedir ayuda, ya tengo 4 dias sin lograr conseguir cambiar el origen de datos de un reporte en crystal report desde JSP (En el caso mas basico)

El escenario es el siguiente
-Reportes creados en crystal 9.0
-IDE JAVA Eclipse con integracion del plugin SAP

JSP + Reporte

El intento mas basico que quiero hacer es cambiar el origen de datos un pequeño fragmento de el codigo que estoy utilizando

<%@ page contentType="text/html;charset=UTF-8"
   import="com.crystaldecisions.reports.reportengineinterface.*,
           com.crystaldecisions.report.web.viewer.*"  %>
           <%@page import="java.util.Date"%>
<%@ page import="com.crystaldecisions.report.web.viewer.*" %>
<%@ page import="com.crystaldecisions.report.web.viewer.CrystalReportViewer" %>
<%@ page import="com.crystaldecisions.reports.reportengineinterface.JPEReportSourceFactory" %>
<%@ page import="com.crystaldecisions.reports.sdk.ReportClientDocument" %>
<%@ page import="com.crystaldecisions.sdk.occa.report.data.*" %>
<%@ page import="com.crystaldecisions.sdk.occa.report.data.ConnectionInfo" %>
<%@ page import="com.crystaldecisions.sdk.occa.report.data.ConnectionInfos" %>
<%@ page import="com.crystaldecisions.sdk.occa.report.data.Fields" %>
<%@ page import="com.crystaldecisions.sdk.occa.report.data.IConnectionInfo" %>
<%@ page import="com.crystaldecisions.sdk.occa.report.data.ParameterField" %>
<%@ page import="com.crystaldecisions.sdk.occa.report.data.ParameterFieldDiscreteValue" %>
<%@ page import="com.crystaldecisions.sdk.occa.report.data.Values" %>
<%@ page import="com.crystaldecisions.sdk.occa.report.reportsource.IReportSource" %>
<%@ page import="com.crystaldecisions.sdk.occa.report.reportsource.IReportSourceFactory2" %>
<%@ page import="com.crystaldecisions.sdk.occa.report.application.*"%>
<%@ page import="com.crystaldecisions.sdk.occa.report.data.*"%>
<%@ page import="com.crystaldecisions.sdk.occa.report.document.*"%>
<%@ page import="com.crystaldecisions.sdk.occa.report.definition.*"%>
<%@ page import="com.crystaldecisions.sdk.occa.report.lib.*" %>
<%@ page import="javax.naming.InitialContext"%>
<%@ page import="javax.sql.DataSource"%>


<html>
<head>
<title>Change Database Connection - ODBC</title>
</head>
<body>

<%
String ipo=request.getParameter("fecha1");
String reportName = "CrystalReport1.rpt";

try {

   IReportSourceFactory2 rptsrcFac=new JPEReportSourceFactory();
   IReportSource reportSource=(IReportSource)rptsrcFac.createReportSource(reportName,request.getLocale());

   ConnectionInfos connInfos = new ConnectionInfos();
   IConnectionInfo connInfo1 = new ConnectionInfo();
   String DBUSERNAME = "usuario";
   String DBPASSWORD = "pass";

   String SERVER =  "192.168.1.12";
   String CONNECTION_URL = "jdbc:postgresql://192.168.1.12:5432/dbname";
   String DATABASE_CLASSNAME = "org.postgresql.Driver";
   String DATABASE_DLL = "crdb_jdbc.dll";
   String JDBC_CONNECTION_STRING =  "Use JDBC=b(true);Connection URL=s(jdbc:postgresql://192.168.1.12:5432/dbname);" +
           "Database Class Name=s(org.postgresql.Driver);Server=s(servername) ;" +
           "Trusted_Connection=b(false) ;" +
           "JDBC Connection String=s(!org.postgresql.Driver!jdbc:postgresql://192.168.1.12:5432/dbname;" +
           "DatabaseName={database};user={userid};password={password}!)";


   PropertyBag propertyBag = new PropertyBag();
   propertyBag.put("Use JDBC", "true");
   propertyBag.put("Connection URL", CONNECTION_URL);
   propertyBag.put("Database Class Name", DATABASE_CLASSNAME);
   propertyBag.put("Database DLL", DATABASE_DLL);
   propertyBag.put("Server Type", "JDBC (JNDI)");
   propertyBag.put("Server", SERVER);
   propertyBag.put("Trusted_Connection", "False");
   propertyBag.put("JDBC Connection String", JDBC_CONNECTION_STRING);


   connInfo1.setUserName(DBUSERNAME);
   connInfo1.setPassword(DBPASSWORD);
   
   
   connInfo1.setAttributes(propertyBag);
   connInfos.add(connInfo1);
   String pop = "01/01/2014";
   Fields fields=new Fields();
   ParameterField paramfield=new ParameterField();
   Values vals=new Values();
   ParameterFieldDiscreteValue val=new ParameterFieldDiscreteValue();
   paramfield.setName("fecha1");
   val.setValue(pop);
   vals.add(val);
   paramfield.setCurrentValues(vals);
   fields.add(paramfield);

   CrystalReportViewer viewer=new CrystalReportViewer();
   viewer.refresh();
   viewer.setDatabaseLogonInfos(connInfos);
   viewer.setReportSource(reportSource);
   viewer.setParameterFields(fields);
   viewer.setReuseParameterValuesOnRefresh(true);
   viewer.setHasPageBottomToolbar(false);
   viewer.setHasLogo(false);
   viewer.setOwnPage(true);
   viewer.setOwnForm(true);
   viewer.processHttpRequest(request, response, getServletConfig().getServletContext(), null);
   viewer.dispose();
 
}

catch(ReportSDKException e) {
   out.print("ERROR in the connection"+e);

}
catch(Exception ex) {
out.println(ex);  
}
%>

</body>
</html>

No se si se puede cambiar la conexion al origen de datos el error que obtengo es:


He intentado configurar tomcat para que use JNDI y se configura exitosamente, el problema es que los reportes estan con conexion ODBC por que estan hechos en crystal report 9 y por problemas de licencia no se puede cambiar de opcion, este es un problema que tengo y no puedo resolverlo, alguien ha logrado cambiar la fuente de datos desde codigo para crystal report en JAVA muchas gracias ojala puedan ayudarme.