Automatisation exécution crystal report avec passage de paramètres

Soyez le premier à donner votre avis sur cette source.

Snippet vu 45 706 fois - Téléchargée 30 fois

Contenu du snippet

Ce programme permet d'exécuter des Crystal Reports en passant comme paramètres :

1. le nom du rapport
2. le type de sortie (1 = impression / 2 = sauvegarde sur le disque)
3. le nom de l'imprimante ou le répertoire de sauvegarde (selon l'option choisie au point 2)
4. une date de début (format jj/MM/aaaa)
5. une date de fin (format jj/MM/aaaa)


Explications détaillées :

J'utilise dans mon code la méthode Environment.GetCommandLineArgs qui permet de passer les paramètres à mon application sur la ligne de commande (Menu Démarrer - Exécuter).

Exemple d'appel à taper sur la ligne de commande :
"C:\Program Files\CR\CR.exe" rapportMensuel 2 C:\Mensuel\ 07/04/2004 07/05/2004

J'ai donc ajouté à ma solution un projet de déploiement, afin de pouvoir installer l'exécutable sur mon disque, de pouvoir faire les appels via la ligne de commande, et passer des paramètres.


Pour appeler ce programme dans un autre programme, il suffit d'employer un shell.

Exemple :
Dim cmd As String = """C:\Program Files\CR\CR.exe""" & " rptXXX 1 hp0001 " & dateDebut & " " & dateFin

Shell(cmd, AppWinStyle.NormalFocus, True)

Source / Exemple :


Imports CRAXDRT
Imports CrystalDecisions.Shared

Const DIR_RPT As String = "C:\rpt\"   'répertoire où sont stockés les .rpt à exécuter
Const SERVER As String = "Nom serveur"
Const DB As String = "Nom BD"
Const USER As String = "Nom utilisateur"
Const PWD As String = "Mot de passe"

Private Sub frmCR_Load()
        Me.Hide()
        Call executeCrystal()
        Me.Close()
End Sub

Private Sub executeCrystal()
        Dim crApplication As CRAXDRT.Application
        Dim crReport As CRAXDRT.Report
        Dim crTables As CRAXDRT.DatabaseTables
        Dim crTable As CRAXDRT.DatabaseTable
        Dim crParameterFieldDefs As CRAXDRT.ParameterFieldDefinitions
        Dim crParameterFieldDef As CRAXDRT.ParameterFieldDefinition

        Dim crConnectionInfo As New ConnectionInfo
        Dim crTableLogonInfos As New TableLogOnInfos
        Dim crTableLogonInfo As New TableLogOnInfo

        Dim cpt As Integer
        Dim i As Integer
        Dim nbreParam As Integer

        Dim orientationPapier
        Dim nomDLL
        Dim nomServeur
        Dim nomBD
        Dim userName
        Dim password

        Dim paramNomReport As String
        Dim paramTypeSortie As Integer
        Dim paramSortie As String
        Dim paramDate As Date
        Dim paramDate1 As String
        Dim paramDate2 As String

        Try
            For cpt = 0 To UBound(Environment.GetCommandLineArgs)
                Select Case cpt
                    Case 1
                        'Nom du Crystal Report (sans l'extension .rpt)
                        paramNomReport = Environment.GetCommandLineArgs(1)
                    Case 2
                        '1 = impression
                        '2 = sauvegarde sur le disque
                        paramTypeSortie = Environment.GetCommandLineArgs(2)
                    Case 3
                        'Selon paramTypeSortie : 
                        ' 1 = nom de l'imprimante
                        ' 2 = Chemin du répertoire de sauvegarde (avec "\" à la fin)
                        paramSortie = Environment.GetCommandLineArgs(3)
                    Case 4
                        'Date de Début (format jj/MM/aaaa)
                        paramDate1 = Environment.GetCommandLineArgs(4)
                    Case 5
                        'Date de Fin (format jj/MM/aaaa)
                        paramDate2 = Environment.GetCommandLineArgs(5)
                End Select
            Next

            If paramDate1 <> "" Then
                paramDate = CDate(paramDate1)
            End If

            With crConnectionInfo
                .ServerName = SERVER
                .DatabaseName = DB
                .UserID = USER
                .Password = PWD
            End With

            nomDLL = "Dll de la DB"
            nomServeur = crConnectionInfo.ServerName
            nomBD = crConnectionInfo.DatabaseName
            userName = crConnectionInfo.UserID
            password = crConnectionInfo.Password

            crApplication = CreateObject("CrystalRuntime.Application")
            crReport = crApplication.OpenReport(DIR_RPT & paramNomReport & ".rpt", OpenReportMethod.OpenReportByTempCopy)
            crParameterFieldDefs = crReport.ParameterFields

            '************* TABLES *************
            crTables = crReport.Database.Tables

            For Each crTable In crReport.Database.Tables
                crTable.SetLogOnInfo(nomServeur, nomBD, USER, PWD)
            Next crTable

            '************* PARAMETRES *************
            crReport.EnableParameterPrompting = False
            nbreParam = crParameterFieldDefs.Count

            For i = 1 To nbreParam

                crParameterFieldDef = crParameterFieldDefs.Item(i)

                If crParameterFieldDef.ReportName = "" Then
                    crParameterFieldDef.SetCurrentValue(paramDate)
                    If paramDate2 <> "" Then
                        paramDate = CDate(paramDate2)
                    End If
                End If
            Next i

            '************* CONNECTION BD *************
            crApplication.LogOnServer(nomDLL, nomServeur, nomBD, USER, PWD)

            If paramTypeSortie = 1 Then
                '************* IMPRESSION *************
                orientationPapier = crReport.PaperOrientation

                With crReport
                    .SelectPrinter("", paramSortie, "")
                    .PaperOrientation = orientationPapier
                    .PaperSource = crReport.PaperSource.crPRBinMiddle
                    .PrintOut(False, 1)
                End With

            Else
                If paramTypeSortie = 2 Then
                    '************* EXPORTATION *************
                    With crReport
                        .ExportOptions.FormatType = CRExportFormatType.crEFTCrystalReport
                        .ExportOptions.DestinationType = CRExportDestinationType.crEDTDiskFile

                        .ExportOptions.DiskFileName = paramSortie & paramNomReport & ".rpt"
                        .Export(False)
                    End With
                End If
            End If

        Catch ex As Exception
            MsgBox("ERREUR :" & ex.Message, MsgBoxStyle.Information, "Exécution du rapport " & paramNomReport)
        End Try

End Sub

Conclusion :


REMARQUES IMPORTANTES :

Ce programme nécessite la dll CRAXDRT.dll, fournie avec Crystal. Il vous faut donc une licence et avoir Crystal installé sur votre poste pour pouvoir exécuter ce programme.

Ne pas oublier de modifier les constantes + le nom de la dll de votre BD dans le code.

A voir également

Ajouter un commentaire

Commentaires

Messages postés
1
Date d'inscription
mardi 27 avril 2010
Statut
Membre
Dernière intervention
26 octobre 2010

merci pour votre code mais je voudrais le télécharger mais je n'arrive pas à le faire!!
Messages postés
1
Date d'inscription
vendredi 8 août 2008
Statut
Membre
Dernière intervention
8 août 2008

J'ai effectué les tâches suivantes pour pouvoir appeller en automatique de Crystal Report avec passage de paramètres d'entrée :
1) j'ai installé Crystal Report XI sur mon poste en local, j'ai copié la dll 'CRAXDRT' dans le répertoire ou j'ai l'exécutable "crw32.exe".
2) j'ai copié un modèle de document RPT "letcolrap_012" dans mon répertoire d:\tmp\ en local.
3) j'ai simplement exécuté la commande suivante via menu "démarrer - exécuter" sans code source avant ni après cette ligne de commande :
"D:\Program Files\Business Objects\Crystal Reports 11\crw32.exe" letcolrap_012 2 d:\tmp\
4) suite à l'exécution de cette commande, j'ai le message d'erreur suivant :
"impossible de trouver ce fichier. Vérifier que le chemin et le nom du fichier sont corrects".
Je ne comprends pas ce message d'erreur car le nom du modèle est correct et le répertoire est correct.
Le nom du répertoire correspond-t-il au répertoire de stockage du modèle RPT ou au répertoire de sauvegarde du fichier résultat ?
Merci d'avance pour vos réponses.
Messages postés
1
Date d'inscription
mercredi 20 juin 2007
Statut
Membre
Dernière intervention
20 juin 2007

Bonjour.

Cet exemple est exactement ce qui me faut mais je ne comprends pas ce que vous voulez dire par nomDLL (ligne 81 et 115).
Je dois faire tourner des rapports Crystal Report sur plusieurs Oracle 10g.

Pouvez vous m'éclairer sur ce point ?
Merci.
Messages postés
8
Date d'inscription
mardi 14 janvier 2003
Statut
Membre
Dernière intervention
9 septembre 2008

CRAXDRT.dll
tu cherches sur ta machine ce fichier, un fois trouver le chmein tu rajoutes la ref a ton projet...
Vla
A+
Messages postés
9
Date d'inscription
samedi 24 décembre 2005
Statut
Membre
Dernière intervention
18 août 2006

merci pour votre code mais qu'est ce que vous voulez dire par 'le nom de la dll de votre BD dans le code'.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.