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

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

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.