IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenOffice & LibreOffice Discussion :

[UNO] Changer la base de données d'un document [OpenOffice][Texte]


Sujet :

OpenOffice & LibreOffice

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 21
    Points : 13
    Points
    13
    Par défaut [UNO] Changer la base de données d'un document
    Bonjour,
    je souhaite, pour un modèle de document, changer la base de données, comme le propose l'éditeur de texte Open office
    avec la commande Edition -> changer de base de données, mais de manière programmative avec l'API UNO.

    La documentation UNO ne semble pas proposer d'équivalent. Et je n'ai rien trouvé de simple qui me garantisse le même fonctionnement.
    Si vous avez déjà été confronté au problème, je serai preneur de la solution!

    Merci.

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 21
    Points : 13
    Points
    13
    Par défaut
    Je précise mon besoin, je dispose de modèles de document pour faire des publipostage pour lesquels j'aimerais pouvoir modifier la source de données qui y est référencée.

    Des champs autres que des champs de base de données peuvent y faire références comme les champs de type "enregistrement suivant", les champs "texte conditionnel", "texte masqué" et "paragraphe masqué".
    La commande édition->Changer de base de données transforme bien l'ensemble de ces champs si nécessaire. J'aimerais faire de même par programmation.

    Pour répondre à ma question, j'ai trouvé une solution parmi d'autre, en utilisant l'api UNO.
    J'ai listé les différents éléments à mon sens pouvant contenir une référence à la base.
    En plus des éléments de type textfieldmaster.database (correspondant à un champ de fusion c'est-à-dire à une colonne d'une table de la base)
    il y a aussi les éléments de type
    • textfield.DatabaseNextSet(permettant de passer à l'enregistrement suivant d'une table de la base)
    • textfield.HiddenText
    • textfield.HiddenParagraph
    • textfield.ConditionalText

    les trois derniers peuvant avoir une condition faisant référence à un champ d'une table de la base.


    Une réponse possible en utilisant l'api UNO :
    Code : 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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    XTextDocument xDoc = getInterface(XTextDocument.class, oDoc);
    XTextFieldsSupplier tfs = getInterface(XTextFieldsSupplier.class, oDoc);
    XEnumeration fields = tfs.getTextFields().createEnumeration();
    XRefreshable xRefreshable = (XRefreshable) UnoRuntime.queryInterface(XRefreshable.class, tfs.getTextFields());
     
    String[] fieldMasters = tfs.getTextFieldMasters().getElementNames();
    if (fieldMasters != null) {
    	for (String fieldMaster : fieldMasters) {
    	XPropertySet props = getInterface(XPropertySet.class, tfs.getTextFieldMasters().getByName(fieldMaster));			
    		if (isSupportedService("com.sun.star.text.fieldmaster.Database", tfs.getTextFieldMasters().getByName(fieldMaster))) {
    			if (oldDataSourceName.equals(props.getPropertyValue("DataBaseName"))
    								&& oldDataTableName.equals(props.getPropertyValue("DataTableName"))) {
    				props.setPropertyValue("DataBaseName", dataSourceName);
    				props.setPropertyValue("DataTableName", dataTableName);
    			}
    		}
     
    	}
    }
     
     
    while (fields.hasMoreElements()) {
    	Object o = fields.nextElement();
    	XPropertySet props = ConnexionOO.getInterface(XPropertySet.class, o);
     
    	if (isSupportedService("com.sun.star.text.textfield.DatabaseNextSet", o)) {
    		if (oldDataSourceName.equals(props.getPropertyValue("DataBaseName"))
    							&& oldDataTableName.equals(props.getPropertyValue("DataTableName"))) {
     
    			props.setPropertyValue("DataBaseName", dataSourceName);
    			props.setPropertyValue("DataTableName", dataTableName);
     
    		}
    	}
     
    	if (isSupportedService("com.sun.star.text.textfield.HiddenText", o)
    						|| isSupportedService("com.sun.star.text.textfield.HiddenParagraph", o)
    						|| isSupportedService("com.sun.star.text.textfield.ConditionalText", o)) {
    		String condition = (String) props.getPropertyValue("Condition");			
    		props.setPropertyValue("Condition", condition.replaceAll(oldDataSourceName + "\\." + oldDataTableName, dataSourceName + "."
    							+ dataTableName));
     
    	}
    }
     
    xRefreshable.refresh();
    getStorable(oDoc).store();

  3. #3
    Provisoirement toléré Avatar de sparthane777
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    318
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 318
    Points : 431
    Points
    431
    Par défaut
    C'est pour le nouveau pare-feux de Albanel ?
    In CODE we trust
    Loppsi (Brice, Sarkozy);
    fatal error : cannot call to unprivated function !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. changer la base de données du membership provider
    Par michaelyere dans le forum ASP.NET
    Réponses: 20
    Dernier message: 14/10/2009, 18h03
  2. [OpenOffice][Texte] changer de base de données
    Par Invité dans le forum OpenOffice & LibreOffice
    Réponses: 1
    Dernier message: 06/10/2009, 19h01
  3. Changer la base de Données
    Par pere_noel00 dans le forum Wildfly/JBoss
    Réponses: 6
    Dernier message: 18/06/2009, 23h41
  4. Réponses: 5
    Dernier message: 16/07/2008, 16h44
  5. [JBOSS] comment changer de base de données avec jboss?
    Par khokho dans le forum Wildfly/JBoss
    Réponses: 5
    Dernier message: 13/03/2006, 15h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo