Bonjour,


Actuellement dans mon entreprise, utilisant BO 4, pour accéder aux rapports, les utilisateurs disposent d'une URL de type :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
http://MonCMS:8080/BOE/CrystalReports/viewrpt.cwr?id=XXXX&apsuser=Monlogin&apspassword=Monpass&apsauthtype=secEnterprise&cmd=EXPORT&EXPORT_FMT=U2FPDF:0
.
Ils modifient l'id du rapport (id=XXXX ) manuellement pour accéder à leur rapport.

Pour des raisons de sécurité, je souhaiterais que l'utilisateur n'ait plus a rentrer le nom d'utilisateur , le password et si possible le type d'authentification.

J'ai téléchargé et installé le SDK. Après m'être documenté j'ai trouvé une procédure qui consiste à créer une Webapp qui utilise une page JSP pour transmettre les informations de connexion.
Dans la documentation du SDK on évoque la possibilité de créer une serialized session que l'on peux passer dans l'url opendocument.

Ma procédure :
1 ) Création d'un dossier "Test" dans tomcat6\webapps
2 ) Création d'un dossier "WEB-INF" dans tomcat6\webapps\Test
3 ) Copie du fichier "basic web.xml" depuis le developper guide du SDK et modification du paramètre WEB_APPLICATION_NAME = Test.
Ce qui donne :
Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
        PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<display-name>Test</display-name>
        <context-param>
       	        <param-name>crystal_servlet_uri</param-name>
        	        <param-value>/CrystalReportViewerHandler</param-value>
        </context-param> 
        <servlet>
      		        <servlet-name>CrystalReportViewerServlet</servlet-name>
        	       <servlet-class>com.crystaldecisions.report.web.viewer.CrystalReportViewerServlet</servlet-class>
        </servlet>
        <servlet-mapping>
       	        <servlet-name>CrystalReportViewerServlet</servlet-name>
               	<url-pattern>/CrystalReportViewerHandler</url-pattern>
        </servlet-mapping>
</web-app>


4 ) Création d'un dossier "lib" dans tomcat6\webapps\Test\WEB-INF et copie des .jar requis ( ceux indiqués dans le SDK developper guide pour BI Platform Application )
5 ) Création d'une page test.jsp placée dans tomcat6\webapps\Test contenant :
Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
<%@ page import="com.crystaldecisions.sdk.framwork.*" %>
 <%
 IEnterpriseSession es = CrystalEnterprise.getSessionMgr().logon("Monlogin","Monpass","<MonCMS>","<secEnterprise>");
 String serses = es.getSerializedSession();
 response.sendRedirect("http://MonCMS:8080/BOE/OpenDocument/opendoc/openDocument.jsp?serSes=" + java.net.URLEncoder.encode(serses) + "&cmd=EXPORT&EXPORT_FMT=U2FPDF:0");
 %>
J'utilise une licence de type nul donc j'ai choisi serialized session.

6) Je test en lançant http://localhost:8080/test/test.jsp

C'est ici que ça bloque j'obtiens l'erreur suivante :
Code x : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
description Le serveur a rencontré une erreur interne () qui l'a empêché de satisfaire la requête.

exception 

org.apache.jasper.JasperException: Impossible de compiler la classe pour la JSP: 

Une erreur s'est produite à la ligne: 3 dans le fichier jsp: /test.jsp
IEnterpriseSession cannot be resolved to a type
1: <%@ page import="com.crystaldecisions.sdk.framwork.*" %>
2: <%
3: IEnterpriseSession es = CrystalEnterprise.getSessionMgr().logon("Monlogin","Monpass","MonCMS","secEnterprise");
4: String serses = es.getSerializedSession();
5: response.sendRedirect("http://MonCMS:8080/BOE/OpenDocument/opendoc/1111021846/openDocument.jsp?serSes=" + java.net.URLEncoder.encode(serses)+ "&cmd=EXPORT&EXPORT_FMT=U2FPDF:0");
6: %>


Une erreur s'est produite à la ligne: 3 dans le fichier jsp: /test.jsp
CrystalEnterprise cannot be resolved
1: <%@ page import="com.crystaldecisions.sdk.framwork.*" %>
2: <%
3: IEnterpriseSession es = CrystalEnterprise.getSessionMgr().logon("Monlogin","Monpass","MonCMS","BOSUITE","secEnterprise");
4: String serses = es.getSerializedSession();
5: response.sendRedirect("http://MonCMS:8080/BOE/OpenDocument/opendoc/1111021846/openDocument.jsp?serSes=" + java.net.URLEncoder.encode(serses)+ "&cmd=EXPORT&EXPORT_FMT=U2FPDF:0");
6: %>


Stacktrace:
	org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:92)
	org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:330)
	org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:439)
	org.apache.jasper.compiler.Compiler.compile(Compiler.java:334)
	org.apache.jasper.compiler.Compiler.compile(Compiler.java:312)
	org.apache.jasper.compiler.Compiler.compile(Compiler.java:299)
	org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:589)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:317)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)


Mon problème : mon objectif étant de supprimer l'insertion par l'utilisateur de son login/password/typedesecurité l'objectif n'est pas atteint : par ailleurs je ne vois pas comment faire pour insérer le numéro de rapport ( viewrpt.cwr?id=XXXX dans la précédente url ) et donner la possibilité d'exporter le document dans un autre type que le pdf ( car actuellement ce paramètre est défini dans le JSP : &cmd=EXPORT&EXPORT_FMT=U2FPDF:0 ).

Mes questions :
1 ) Par rapport au log de l'erreur que j'obtiens j'ai l'impression que l'import de com.crystaldecisions.sdk.framwork.* est sujet à erreur : une recherche ne trouve aucun élément sur mon disque dur et ne connaissant pas le jsp j'ai des doutes quand à ma syntaxe et si l'import se réalise vraiment.

2 ) Au niveau de l'url de response.sendRedirect comment puis supprimer cmd=EXPORT&EXPORT_FMT=U2FPDF:0 pour pouvoir le définir dans l'url accédant au jsp et si possible insérer le numéro de rapport ? la syntaxe de l'URL est-elle correcte ?

3 ) Est-il possible de d'avoir un invite demandant le numéro de rapport désiré et le type d'export a renseigner par l'utilisateur, le minimum serait la suppression des informations d'authentification en clair dans l’adresse avec l'insertion manuelle du numéro de rapport et du type d'export ? Car je ne vois pas ou insérer ce numéro de rapport pourtant essentiel.

Merci d'avance !