Page 1 sur 1

[RESOLU]Utiliser des variables à la place des noms de champs

MessagePublié: 25 Avr 2013 à 09:04
par Benimius
Bonjour à tous,

Je suis actuellement en train de développer un bout de code dans le Exiting d'un champ de type "Liste de dialogue", afin de prendre le contenu et de le remplir dans un autre champ de même type, mon code fonctionne parfaitement, mais étant donné que je dois l'utiliser à plusieurs endroits, j'aurais voulu en faire une fonction global de mon masque. pour ce, j'ai essayé d'utiliser des variables comme nom de champ, pour pouvoir rendre dynamique le code, mais je n'arrive pas a faire passer un champ de type liste, cela fonctionne sur un string normal, mais je ne trouve pas le moyen/ la méthode, pour la liste


Voici mon code de base :

Code : Tout sélectionner
Sub Exiting(Source As Field)
   
   Dim UIWork As New NotesUIWorkspace
   Dim UIDoc As NotesUIDocument
   Dim doc As NotesDocument
   
   Dim i_x As Integer
   Dim s_VarLM As String
   Dim sl_LieuM() As String
   Dim s_NomVarLM As String
   
   Set UIdoc = UIWork.CurrentDocument
   Set doc = uidoc.Document
   
   s_VarLM =  doc.fldInterB1LieuMes_1(0)
   i_x = Ubound(doc.fldInterB1LieuMes_1)
   
   If i_x = 0 Then
      If s_VarLM = "" Then
         i_x = 0
      Else
         i_x = 1
      End If
   Else
      i_x = i_x + 1
   End If
   
   If i_x > 0 Then
      
      Redim sl_LieuM(0 To i_x-1)
      
      For i = 0 To i_x-1
         sl_LieuM(i) = doc.fldInterB1LieuMes_1(i)
      Next
      
   '''''''''Code test pour utiliser une variable comme nom de champ    
   '''''''''Fonctionne uniquement pour du String
   '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
   's_NomVarLM = "bonjour"
   'Dim bbb As String
   'bbb =" bbb"
   'Call uidoc.FieldSetText(s_NomVarLM,bbb)
   'uidoc.Refresh
   '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
      
      
      
      doc.fldInterB2LieuMes_1 = sl_LieuM
      doc.fldInterB3LieuMes_1 = sl_LieuM
      doc.fldInterB4LieuMes_1 = sl_LieuM
      doc.fldInterB5LieuMes_1 = sl_LieuM
      doc.fldInterB6LieuMes_1 = sl_LieuM
      doc.fldInterB8LieuMes_1 = sl_LieuM
      doc.fldInterB9LieuMes_1 = sl_LieuM
      doc.fldInterB10LieuMes_1 = sl_LieuM
      doc.fldInterB11LieuMes_1 = sl_LieuM
      doc.fldInterB12LieuMes_1 = sl_LieuM
      doc.fldInterB13LieuMes_1 = sl_LieuM
      doc.fldInterB14LieuMes_1 = sl_LieuM
      doc.fldInterB15LieuMes_1 = sl_LieuM
      
   End If
End Sub


Donc la question est :
Comment remplacer les noms de champs par des variables pour pouvoir remplir un champ de type "liste dialogue" avec le contenu d'un autre...

Et pouvoir utiliser un appel de fonction en ne passant que l'indice ...

Pour avoir par exemple :

sub UpdateLieu(i_i as Integer)
Dim s_VarNom as String
Dim sl_LieuM() as String

s_VarNom = "fldInterB15LieuMes_"
doc.s_VarNom+i = sl_LieuM...
en sub




Merci d'avoir pris le temps de me lire,
Bonne journée

Re: Utiliser des variables à la place des noms de champs

MessagePublié: 25 Avr 2013 à 09:09
par Michael DELIQUE
salut

oula tu mélange développement frontale (notesui) et dorsal (notes) ça va beugger.

je te suggère de lire ceci, ça devrait répondre à quelqu'une de tes questions => viewtopic.php?f=68&t=12997

Re: Utiliser des variables à la place des noms de champs

MessagePublié: 25 Avr 2013 à 09:13
par Benimius
Le code fonctionne parfaitement, et dans le schéma des classes frontales, on voit que NotesDocument hérite de NotesUIDocument, donc cela reste un objet frontal non ?

Re: Utiliser des variables à la place des noms de champs

MessagePublié: 25 Avr 2013 à 09:14
par Michael DELIQUE
non !

les class frontales fonctionnent en frontales et les dorsales en dorsales. tu peux utiliser les 2 en même temps mais ya des effets de bords.

Re: Utiliser des variables à la place des noms de champs

MessagePublié: 25 Avr 2013 à 09:17
par Benimius
Je pensais que NotesDocument était une classe frontale et dorsale, vu quelle était dans les deux schémas,

Le problème est que la gestion de champ ne fonctionne pas avec le uidoc et les listes et que tout a fonctionne en utilisant NotesDocument


Code : Tout sélectionner
      Call uidoc.FieldSetText(uidoc.fldInterB2LieuMes_1,sl_LieuM)
            Call uidoc.FieldSetText(fldInterB2LieuMes_1,sl_LieuM)
      uidoc.fldInterB2LieuMes_1 = sl_LieuM


Ces lignes génères des erreurs

Re: Utiliser des variables à la place des noms de champs

MessagePublié: 25 Avr 2013 à 09:21
par Michael DELIQUE
normale,

uidoc.fldInterB2LieuMes_1 ça fonctionne pas. lit ce que je t'ai passé

Re: Utiliser des variables à la place des noms de champs

MessagePublié: 25 Avr 2013 à 09:29
par Benimius
J'ai vu,

Mais si je ne dois faire que du frontal, il n'y a rien dans le guide pour l'utilisation de liste dans la déclaration :

Call uidoc.FieldSetText(fldInterB2LieuMes_1,"texte") fonctionne

mais dés que je met une liste, il y a eu une erreur, et je ne vois rien d'autres dans les fonctions de uidoc pour passer une liste...

Re: Utiliser des variables à la place des noms de champs

MessagePublié: 25 Avr 2013 à 09:32
par Michael DELIQUE
les classes frontales ne fonctionnent pas comme les classes dorsales. tu ne peux passer de tableau.

dans ton champs regarde quelle est le séparateur de valeur et génère un texte bien formater

ça donne un truc du genre "valeur1;valeur2;valeur3"

Call uidoc.FieldSetText(fldInterB2LieuMes_1,"valeur1;valeur2;valeur3")

Re: Utiliser des variables à la place des noms de champs

MessagePublié: 25 Avr 2013 à 09:38
par Benimius
D'accord, merci pour ton aide,
Je vais donc essayer de remplir une variable String avec mes valeurs de champs.

Question théorique, Quel type de problème puis-je avoir avec mon code de base ? car après plusieurs tests, tout a parfaitement fonctionné

Re: Utiliser des variables à la place des noms de champs

MessagePublié: 25 Avr 2013 à 09:54
par Michael DELIQUE
c'est expliqué dans le tuto que je t'ai passé en référence

Re: Utiliser des variables à la place des noms de champs

MessagePublié: 25 Avr 2013 à 10:54
par Benimius
D'accord, risque de perte d'information.

En tout cas merci de tes conseils, au final mon code est grandement allégé et parfaitement efficace pour mon problème de départ, je copie mon code au cas où cela peut aider un autre novice,

Code : Tout sélectionner
Sub UpdateLieu(i_i As Integer)
   
   Dim UIWork As New NotesUIWorkspace
   Dim UIDoc As NotesUIDocument
   
   Dim s_VarLM As String
   
   Set UIdoc = UIWork.CurrentDocument
   
   
   s_VarLM = uidoc.FieldGetText("fldInterB1LieuMes_"+Cstr(i_i))
   
   
   For cpt = 2 To 15
      If cpt <> 7 Then
         Call uidoc.FieldSetText("fldInterB"+Cstr(cpt)+"LieuMes_"+Cstr(i_i),s_VarLM)
      End If
   Next
   
End Sub