Accueil
Accueil Le Club Delphi Kylix C C++ Java J2EE DotNET & C# Visual Basic Access Pascal Dev Web PHP ASP XML UML SQLSGBD Windows Linux Autres
logo

precedent    sommaire    suivant   


Comment récupérer les réponses utilisateur aux invites ?
auteur : Bruno2r
Pour cet exemple on suppose que l'utilisateur répond à deux invites :

  • "Année ?" qui retourne une réponse de type numérique
  • "Sur combien de mois ?" qui retourne une réponse de type numérique
Public Sub mesinvites()
'Bruno Roman-Ruiz http://bruno-roman-ruiz.developpez.com/index/
'20080207 22:00 BO V6.5.1
'Lister les variables crées par l'utilisateur
Dim Doc As Document
Dim DpVars As Variables
Dim DpVar As Variable
Dim txt As String
Dim nbv As Integer

Application.Interactive = True
Set Doc = Application.ActiveDocument
Set DpVars = Doc.Variables
txt = ""
nbv = 0

For Each DpVar In DpVars
nbv = nbv + 1
txt = Chr(10)& Chr(10) & " [" & nbv & "] Variable "& DpVar.Name & Chr(10) & "Valeur : " & DpVar.Value
Debug.Print txt
Next

Debug.Print Chr(10) & Chr(10) & Doc.Name & " contient " & nbv & " variables :"
End Sub
Les réponses stockées dans anref et moisref sont alors utilisables dans la suite du script


Comment lister les variables créées dans le document ?
auteur : Bruno2r
Voici un petit script de procédure qui établit la liste dans la fenêtre d'exécution des variables créées par l'utilisateur :
Public Sub mesvariables()
'Bruno Roman-Ruiz http://bruno-roman-ruiz.developpez.com/index/
'20080207 22:00 BO V6.5.1
'Lister les variables crées par l'utilisateur
Dim Doc As Document
Dim DocVars As DocumentVariables
Dim DocVar As DocumentVariable
Dim txt As String
Dim nbv As Integer

Application.Interactive = True
Set Doc = Application.ActiveDocument
Set DocVars = Doc.DocumentVariables

txt = ""
nbv = 0
For Each DocVar In DocVars

If DocVar.Name élt; > "" Then
nbv = nbv + 1
txt = Chr(10) & Chr(10) & " [" & nbv & "] Variable " & DocVar.Name & Chr(10) & DocVar.Formula
Debug.Print txt
End If
Next
Debug.Print Chr(10) & Chr(10) & Doc.Name & " contient " & nbv & " variables :"

End Sub
warning Attention ! Ne pas confondre :
Application.ActiveDocument.DocumentVariables Collection des objets Variables créées dans le document par l'utilisateur Application.ActiveDocument.Variables Collection des objets Variables créées dans le fournisseur de données (requête)

Comment supprimer le message : La requête ne retourne aucune donnée ?
auteur : Bruno2r
Utiliser la propriétée Application.Interactive

Cette méthode supprime ou autorise (False/True) les demandes de confirmation et les notifications à l'utilisateur.
Private Sub Document_BeforeRefresh(Cancel As Boolean)
Application.Interactive = False
End Sub

Private Sub Document_AfterRefresh()
Application.Interactive = True
End Sub
warningAttention ! Cette désactivation
* porte sur le rafraichissement du document (plus de message La Requête ne retourne pas de données)
* supprime également l'affichage des invites ! (conservant les réponses antérieures)
* ne fonctionne pas si on fait exécuter dans l'éditeur de requête
ideaPour désactiver l'interaction sur le SQL à la carte sans invite,
et la réactiver sur les autres requêtes avec invite,
il faudrait à l'ouverture par exemple :
* parcourir les dataproviders * et avec un select case basé sur le nom ou le type faire précéder le refresh d'une gestion de l'interactivité

Comment produire un pdf par rapport ?
auteur : Bruno2r
Dès la version 5 de Business Objects, il est possible d'appliquer la méthode ExportAsPdf à chaque rapport.
On peut également poser un test sur le non du rapport pour ne pas appliquer cet export à l'un d'entre eux.
Utiliser le script suivant :
Private Sub Document_AfterRefresh()
Dim Doc As Document
Dim reps As Reports
Dim rep As Report
Dim repname As String
Dim chemin As String
 
chemin = "C:\"
Set Doc = Application.ActiveDocument
'------- Récupération de la collection
Set reps = Doc.Reports
 
' -------- Récupérer les rapports -------
' -----Parcourir les objets de la collection rapports
For Each rep In reps
' ----- Limitation au rapports à exporter
    repname = rep.Name
    repname = Replace(repname, Chr(34), "_")
    repname = Replace(repname, Chr(42), "_")
    repname = Replace(repname, Chr(47), "_")
    repname = Replace(repname, Chr(58), "_")
    repname = Replace(repname, Chr(60), "_")
    repname = Replace(repname, Chr(62), "_")
    repname = Replace(repname, Chr(63), "_")
    repname = Replace(repname, Chr(92), "_")
    repname = Replace(repname, Chr(124), "_")
    If repname < > "PasCeluiLà" Then
        rep.ExportAsText chemin & repname & ".pdf"
    End If
Next

Quels formats d'Export en VBA selon les versions ?
auteur : Bruno2r
En Version 5 les exports possibles en VBA sont :
  • DataProvider.ExportToRDBMS
  • Document.ExportAsPDF
  • Document.ExportSheetsAsHtml
  • Report.ExportAsHtml
  • Report.ExportAsPDF
  • Report.ExportAsRtf
  • Report.ExportAsText
A partir de la Version 6 sont ajoutés :
  • Document.ExportAsXML
  • Report.ExportAsExcel
  • Report.ExportAsHtmlPage

Comment poser un filtre complexe et exporter en pdf ?
auteur : Bruno2r
L'objectif est de réaliser automatiquement après chaque rafraichissement les tâches suivantes :

  • Déterminer le nombre de rapports (onglets) dans le document.
  • Parcourir ces différents rapports.
  • Appliquer sur chacun d'eux un filtre.
  • Recalculer le document BO.
  • Exporter en pdf.
Document_AfterRefresh()
 
Dim Dpc As Document
Dim Reps As Reports, Rep As Report
Dim nbr As Integer, nir As Integer
 
'ces 3 premières déclarations seraient mieux positionnées
' dans Général Déclarations
 
Dim AnneeRef As String
 
Set Doc = Application.ActiveDocument

Set Reps = Doc.Reports
nbr = Reps.Count


'pour exemple on posera un filtre sur l'année 2008
AnneeRef = "2008"

'pose du filtre sur chaque rapport 
For Each Rep In Reps
Rep.Activate
Rep.AddComplexFilter "Exercice", "[Exercice] = " & AnneeRef

'recalcul de l'ensemble du document
Rep.ForceCompute
Next

'export du document
Rep.ExportAsPDF ("C:\le chemin....\DocsPDF\NomFichier_" & AnneeRef & ".pdf")
 
End Sub

Comment exécuter des requêtes BOXI R2 depuis du code VBA ?
auteur : Runs59
Comment exécuter des mises à jour et exports de requêtes BO depuis des macros VBA dans des documents Microsoft Office.

Tout cela fonctionnait très bien à l'époque de BO V5 mais depuis le passage à BO XI R2 et son mode d'authentification différent, les lignes de code ne fonctionnent plus.
Voici la ligne de commande qui fonctionne sous BO XI R2:
VariableApplicationBO.Logon "Identifiant", "MotDePasse", "Ce que l'on trouve dans la case système de la fenêtre de login BOXI R2", "LDAP", False, False
Pour savoir quoi mettre dans "Ce que l'on trouve dans la case système de la fenêtre de login BOXI R2" si votre société utilise un lanceur pour s'authentifier à BO, il peut être nécessaire de double-cliquer sur la requête .rep pour obtenir la fenêtre d'authentification de BO plutôt que le lanceur "maison".
Un exemple sous forme de code:

Dim Appli_BO As busobj.Application 'Charger la référence "Business Objects 11.5 Object Library"'
Dim Document_BO As busobj.Document

Set Appli_BO = New busobj.Application

Appli_BO.Interactive = False 'Pour ne pas avoir d invite inutiles de la part de BO.'
Appli_BO.Logon "L123456", "toto1900", "NOMSERVEUR:NuméroPort", "LDAP", False, False

'Ci dessous, on ouvre un fichier BO:'
Set Document_BO = Appli_BO.Documents.Open("c:\Fichier_requete_BO.rep")

'On lance le rafraîchissement:'
Document_BO.Refresh

'Ici, pour l exemple j exporte le premier rapport en PDF mais on peut exporter dans d autres formats:'
Document_BO.Reports(1).ExportAsPDF "c:\Nom_en_PDF"

'Pour mes besoins, j enregistre aussi mon .rep:'
Document_BO.Close boSaveIfModified

'Je quitte l application:'
Appli_BO.Quit

'Et je libère l objet application BO:'
Set Appli_BO = Nothing

precedent    sommaire    suivant   

Consultez les autres F.A.Q's


Les sources présentés sur cette pages sont libre de droits, et vous pouvez les utiliser à votre convenance. Par contre cette page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright ©2008  Developpez LLC. Tout droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérets. Cette page est déposée à la SACD.

Vos questions techniques : forum d'entraide Accueil - Publiez vos articles, tutoriels, cours et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones. Nous contacter - Copyright 2000..2005 www.developpez.com