[Résolu][Basic] Erreur: Variable indéfini sur EnumerableMap

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
Tiogran
Membre lOOyal
Membre lOOyal
Messages : 27
Inscription : 16 nov. 2016 18:31

[Résolu][Basic] Erreur: Variable indéfini sur EnumerableMap

Message par Tiogran »

Bonjour,

Récemment, j'ai appris la connaissance du service "EnumerableMap" qui offre des méthodes .get sur une structure similaire à un Array.
Les méthodes exposées par Hubert Lambert et rassemblées par Churay ici: https://forum.openoffice.org/fr/forum/v ... ap#p287721 ont fini de me convaincre de l'utiliser afin d'écrire un code générique au possible.
Malheureusement cela débute mal pour moi car d'emblée sur le code suivant.

Code : Tout sélectionner

SUB TESTER_ENUMERABLE_MAP
em = com.sun.star.container.EnumerationMap.create("string","[]string")
END SUB
Il m'est renvoyé l'erreur "Erreur d'execution Basic, variable non définie"; si j'ajoute une déclaration Dim cela ne change rien.

J'ai tenté une autre possibilité

Code : Tout sélectionner

SUB TESTER_UNO_EM
Dim em as object
em = createunoservice("com.sun.star.container.EnumerableMap")
END SUB
Sur ce dernier objet "em", j'ai lançé un xray; toutes les méthodes et propriétés sont bien présentes telles qu'elles sont décrites par Churay, Hubert Lambert et bm92 mais si j'essaie n'importe quelle méthode j'ai un message qui me signifie que l'initialisation n'est pas correcte
Message exacte:

Code : Tout sélectionner

Une exception s'est produite Type com.sun.star.lang.NotInitializedException Message: .
Je veux bien le croire car mes connaissances en structures UNO sont encore très faibles et l'omniprésence de l'anglais est un frein important à son apprentissage.

J'aimerai vraiment arriver à faire fonctionner l'une ou l'autre méthode. Si je peux bénéficier d'éclaircissement çà serait extra, je pratique quotidiennement le Basic et ce service me semble une petite merveille très prometteuse.

Bien à vous,

Tiogran

edit Un détail semble avoir fait la différence sur la première routine, en enlevant l'option explicit au module; cela fonctionne normalement. Je peux utiliser la méthode .put() et le reste sans problème: c'est à n'y rien comprendre. :fou:
Dernière modification par Tiogran le 27 mai 2017 14:19, modifié 1 fois.
Libre Office 6.3.4.2
Linux Mint et Windows 7,8 et 10
Piaf
GourOOu
GourOOu
Messages : 5622
Inscription : 25 nov. 2011 18:07
Localisation : Guyane

Re: [Basic] Erreur: Variable indéfini sur EnumerableMap

Message par Piaf »

Bonjour
Loin d'être un spécialiste mais il doit y avoir du monde qui fait le pont, je m'y colle donc :lol:
Ta procédure TESTER_ENUMERABLE_MAP ne créé pas le bon service, EnumerationMap au lieu de EnumerableMap.
Une fois le service crée, il faut alimenter le container (lui donner la clé et les valeurs)
Quand le container est alimenté, tu peux utiliser une énumération sur les différents éléments le composant.
Dans la dernière macro de Churay place un Xray sur em puis sur enu.
 Ajout : Option Explicit t'oblige à déclarer toutes les variables, si tu l'utilises tu obtiendra le même code d'erreur pour chaque variable non déclarée. 
A+
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
Tiogran
Membre lOOyal
Membre lOOyal
Messages : 27
Inscription : 16 nov. 2016 18:31

Re: [Basic] Erreur: Variable indéfini sur EnumerableMap

Message par Tiogran »

Bonjour Piaf,
Loin d'être un spécialiste mais il doit y avoir du monde qui fait le pont, je m'y colle donc :lol:
Kewaaa ? dans le bénévolat aussi! je suis choqué, heureusement que tu es là :bravo:
Ta procédure TESTER_ENUMERABLE_MAP ne créé pas le bon service, EnumerationMap au lieu de EnumerableMap.
aie, c'est une erreur de retranscription du code vers ce message. L'erreur reste valable même avec le bon nom de service.

Aux dernières nouvelles: cela a l'air de fonctionner correctement avec ce code

Code : Tout sélectionner

Option explicit
Sub Main
Dim em as object
em = com.sun.star.container.EnumerableMap.create("string", "string")
em.put("test_key", "test_val")
print em.get("test_key")(0)
End Sub
Dans la dernière macro de Churay place un Xray sur em puis sur enu.
fait, alors si je prends la routine "main" complète de churay avec l'option explicit; cela me renvoit également l'erreur.
Normal puisque comme tu le soulignes "Option explicit" oblige à déclarer les variables. Je me demande si justement le fait qu'il ne déclare pas em ne va pas être source d'erreur si l'on s'en tient strictement à son code.

quoiqu'il en soit merci de ton aide; promis je ne te dérange plus aujourd'hui; pour que tu puisses becqueter tranquillement un rafraîchissement :wink:

A+
Libre Office 6.3.4.2
Linux Mint et Windows 7,8 et 10
Avatar de l’utilisateur
Churay
ManitOOu
ManitOOu
Messages : 2668
Inscription : 30 avr. 2009 04:54
Localisation : CATALUNYA

Re: [Basic] Erreur: Variable indéfini sur EnumerableMap

Message par Churay »

Bonjour,
Je me demande si justement le fait qu'il ne déclare pas em ne va pas être source d'erreur si l'on s'en tient strictement à son code.
OOops... corrigé :wink:
 Ajout : Le code fonctionnait tel quel parce que Option Explicit était absente.

Bien sûr, si on active Option Explicit, la déclaration doit inclure em

Code : Tout sélectionner

Dim enu AS Object, elem, aNom(), em
Mais à déclarer les variables, autant toutes les déclarer : c'est plus cohérent, avec ou sans Option Explicit 
cOOordialement
---
AOO 4.0.1 W7-PRO & LO 5.1.6.2 Debian 7.8 & Ubuntu 16.04 LTS
---
F1 : ça aide...
XRay + SDK :super:
---
Quand le NOT CONFIRMED sera corrigé (OOo et LO) , je serai heureux...