OVH Cloud OVH Cloud

Lecture champ document Lotus Notes en vbscript

10 réponses
Avatar
TiMike45
Bonjour a toutes et a tous,
Dans un Carnet d'adresses de Lotus Notes je veux lire un champ correspondant
a une valeur de cle:
Set Session = CreateObject("Notes.NotesSession")
Set DB = Session.GETDATABASE(CA_Server, CA_BAse,False)
Set V = DB.GETVIEW(CA_View)
aKey(0) = aTemp(1) & " , " & aTemp(2)
Set Doc = V.GETDOCUMENTBYKEY(aKey, True)
If Not Doc Is Nothing Then
aNames = Doc.GETITEMVALUE("FullName")
En VB, ma variable aNames (variant) recoit bien un tableau
mais en vbscript elle reste obstinement Empty
Est-ce que quelqu'un aurait deja rencontre ce probleme?
D'avance merci
--
TiMike

10 réponses

Avatar
Jean
aNames = Doc.GETITEMVALUE("FullName")


probablement en mettant

Set aNames = Doc.GETITEMVALUE("FullName")


Amicalement,

--
Jean - JMST
Belgium

Avatar
Jean
probablement en mettant

Set aNames = Doc.GETITEMVALUE("FullName")


Sinon en énumérant directement la collection, un truc du genre :

...
For Each sName In Doc.GETITEMVALUE("FullName")
WScript.Echo sName
Next
...

Amicalement,

--
Jean - JMST
Belgium

Avatar
jbongran
TiMike45 wrote:
Bonsoir Jean
La solution Set = ne convient pas puisque aNames n'est pas un objet
(je veux lire la valeur)
L'autre solution (For each ...), je l'avais aussi essaye sans resultat
(sName est Empty)
Si tu as d'autres idees, je suis preneur
Merci beaucoup


Le tableau aKey est bien initialisé avec sa dimension dans ton code?
Du style Dim aKey(1)
Sinon il faut faire usage des mots clés ReDim et Preserve

Cette routine affichant le type de variable retournée peut être utile pour
lever le doute:
WScript.Echo "Type de la variable aNames: " &
ConvertAsString(VarType(aNames))
Function ConvertAsString(IntCode)
Dim strTmp
Select Case intCode
Case 0 strTmp = "Empty (non initialisée)"
Case 1 strTmp = "Null (aucune donnée valide)"
Case 2 strTmp = "Entier"
Case 3 strTmp = "Entier long"
Case 4 strTmp = "Nombre en virgule flottante en simple précision"
Case 5 strTmp = "Nombre en virgule flottante en double précision"
Case 6 strTmp = "Monétaire"
Case 7 strTmp = "Date"
Case 8 strTmp = "Chaîne"
Case 9 strTmp = "Objet Automation"
Case 10 strTmp = "Erreur"
Case 11 strTmp = "Booléen"
Case 12 strTmp = "Variant (utilisé seulement avec des tableaux de
Variants)"
Case 13 strTmp = "Objet non Automation"
Case 17 strTmp = "Octet"
Case 8192 strTmp = "Tableau"
Case Else strTmp = ""Aucune idée du type de variable correspondant
au code " & intCode
End Select
ConvertAsString = strTmp
End Function

Avatar
Gilles LAURENT
"TiMike45" a écrit dans le message
de news:
| Bonjour a toutes et a tous,

Bonsoir,

| Dans un Carnet d'adresses de Lotus Notes je veux lire un champ
| correspondant a une valeur de cle:
| Set Session = CreateObject("Notes.NotesSession")
| Set DB = Session.GETDATABASE(CA_Server, CA_BAse,False)
| Set V = DB.GETVIEW(CA_View)
| aKey(0) = aTemp(1) & " , " & aTemp(2)
| Set Doc = V.GETDOCUMENTBYKEY(aKey, True)
| If Not Doc Is Nothing Then
| aNames = Doc.GETITEMVALUE("FullName")
| En VB, ma variable aNames (variant) recoit bien un tableau
| mais en vbscript elle reste obstinement Empty

La méthode GetItemValue renvoie un tableau de Strings et non un tableau
de Variants. VBScript ne permet pas la manipulation de ce type de
valeur. Une solution de contournement consiste à écrire une petite
fonction 'helper' permettant de contourner cette limitation :

+++ Exemple
WScript.Echo GetItemValue (doc, "FullName")

--- Coupez ici ---

Function GetItemValue (oDoc, strItem)
For Each oItem In oDoc.Items
If oItem.Name = strItem Then GetItemValue = oItem.Text
Next
End Function

--- Coupez ici ---

--
Gilles LAURENT
http://glsft.free.fr
Avatar
Jean
Si tu as d'autres idees, je suis preneur


En fait j'utilise SmartSuite depuis des années mais je n'ai
malheureusement pas Notes, je ne sais donc pas tester.

La réponse de Gilles Laurent me semble logique.

Sinon, à tout hasard et en complément, en faisant une recherche web
j'ai touvé ceci :
http://www-10.lotus.com/ldd/46dom.nsf/4d21f120f5a2cf4985256a150076d0d5/d0468e6a11659b5c85256eee00742c69?OpenDocument

dans le fil de discussion :
http://www-10.lotus.com/ldd/46dom.nsf/4d21f120f5a2cf4985256a150076d0d5/db7418be40b938cc85256eef00001785?OpenDocument

qui indique que pour que GetDocumentByKey fonctionne en automation il
faut que la colonne clef soit la première colonne triée dans la vue.

Mais ça dépend peut être de la version.

Amicalement,

--
Jean - JMST
Belgium

Avatar
Gilles LAURENT
"jbongran" a écrit dans le message de
news:
| Function ConvertAsString(IntCode)
| Dim strTmp
| Select Case intCode
| Case 0 strTmp = "Empty (non initialisée)"
| Case 1 strTmp = "Null (aucune donnée valide)"
| Case 2 strTmp = "Entier"
| Case 3 strTmp = "Entier long"
| Case 4 strTmp = "Nombre en virgule flottante en simple
| précision" Case 5 strTmp = "Nombre en virgule flottante en
| double précision" Case 6 strTmp = "Monétaire"
| Case 7 strTmp = "Date"
| Case 8 strTmp = "Chaîne"
| Case 9 strTmp = "Objet Automation"
| Case 10 strTmp = "Erreur"
| Case 11 strTmp = "Booléen"
| Case 12 strTmp = "Variant (utilisé seulement avec des
| tableaux de Variants)"
| Case 13 strTmp = "Objet non Automation"
| Case 17 strTmp = "Octet"
| Case 8192 strTmp = "Tableau"
| Case Else strTmp = ""Aucune idée du type de variable
| correspondant au code " & intCode
| End Select
| ConvertAsString = strTmp
| End Function

Je me permet d'apporter une petite correction car une valeur supérieure
ou égale à 8192 indique un tableau du type de la valeur modulo 8192 :

--- Coupez ici ---

Function ConvertAsString (intCode)
Dim strTmp, nCode: nCode = intCode Mod 8192
If intCode => 8192 Then strTmp = "Tableau de type "

Select Case nCode
Case 0 strTmp = strTmp + "Empty (non initialisée)"
Case 1 strTmp = strTmp + "Null (aucune donnée valide)"
Case 2 strTmp = strTmp + "Entier"
Case 3 strTmp = strTmp + "Entier long"
Case 4 strTmp = strTmp + "flottant en simple précision"
Case 5 strTmp = strTmp + "flottant en double précision"
Case 6 strTmp = strTmp + "Monétaire"
Case 7 strTmp = strTmp + "Date"
Case 8 strTmp = strTmp + "Chaîne"
Case 9 strTmp = strTmp + "Objet Automation"
Case 10 strTmp = strTmp + "Erreur"
Case 11 strTmp = strTmp + "Booléen"
Case 12 strTmp = strTmp + "Variant"
Case 13 strTmp = strTmp + "Objet non Automation"
Case 17 strTmp = strTmp + "Octet"
Case Else strTmp = "Type inconnu: " & intCode
End Select
ConvertAsString = strTmp
End Function

--- Coupez ici ---

--
Gilles LAURENT
http://glsft.free.fr
Avatar
Jean
Cette routine affichant le type de variable retournée peut être utile pour
lever le doute:


C'est un bon reflexe effectivement.
Personnellement j'utilise d'abord TypeName qui a l'avantage de
retourner aussi les interfaces.
Ca permet soit de retrouver facilement les méthodes et propriétés
disponibles pour un objet ou de corriger son code.

Par ex. :

WScript.Echo TypeName(CreateObject("Shell.Application").Windows)
-> interface IShellWindows (que l'on trouve dans la classe Miscrosoft
Internet Control)

Amicalement,

--
Jean - JMST
Belgium

Avatar
TiMike45
Chapeau bas! Bravo! Bravissimo!
La méthode GetItemValue renvoie effectivement un tableau de chaine
(VarType‚00) et la fonction GetItemValue renvoie une chaine avec séparateur
;
(un split finit le travail)
Un tres tres grand merci a tous!
--
TiMike



"TiMike45" a écrit dans le message
de news:
| Bonjour a toutes et a tous,

Bonsoir,

| Dans un Carnet d'adresses de Lotus Notes je veux lire un champ
| correspondant a une valeur de cle:
| Set Session = CreateObject("Notes.NotesSession")
| Set DB = Session.GETDATABASE(CA_Server, CA_BAse,False)
| Set V = DB.GETVIEW(CA_View)
| aKey(0) = aTemp(1) & " , " & aTemp(2)
| Set Doc = V.GETDOCUMENTBYKEY(aKey, True)
| If Not Doc Is Nothing Then
| aNames = Doc.GETITEMVALUE("FullName")
| En VB, ma variable aNames (variant) recoit bien un tableau
| mais en vbscript elle reste obstinement Empty

La méthode GetItemValue renvoie un tableau de Strings et non un tableau
de Variants. VBScript ne permet pas la manipulation de ce type de
valeur. Une solution de contournement consiste à écrire une petite
fonction 'helper' permettant de contourner cette limitation :

+++ Exemple
WScript.Echo GetItemValue (doc, "FullName")

--- Coupez ici ---

Function GetItemValue (oDoc, strItem)
For Each oItem In oDoc.Items
If oItem.Name = strItem Then GetItemValue = oItem.Text
Next
End Function

--- Coupez ici ---

--
Gilles LAURENT
http://glsft.free.fr





Avatar
jbongran
Gilles LAURENT wrote:
"jbongran" a écrit dans le message de
news:
Function ConvertAsString(IntCode)
Dim strTmp
Select Case intCode
Case 0 strTmp = "Empty (non initialisée)"
Case 1 strTmp = "Null (aucune donnée valide)"
Case 2 strTmp = "Entier"
Case 3 strTmp = "Entier long"
Case 4 strTmp = "Nombre en virgule flottante en simple
précision" Case 5 strTmp = "Nombre en virgule flottante en
double précision" Case 6 strTmp = "Monétaire"
Case 7 strTmp = "Date"
Case 8 strTmp = "Chaîne"
Case 9 strTmp = "Objet Automation"
Case 10 strTmp = "Erreur"
Case 11 strTmp = "Booléen"
Case 12 strTmp = "Variant (utilisé seulement avec des
tableaux de Variants)"
Case 13 strTmp = "Objet non Automation"
Case 17 strTmp = "Octet"
Case 8192 strTmp = "Tableau"
Case Else strTmp = ""Aucune idée du type de variable
correspondant au code " & intCode
End Select
ConvertAsString = strTmp
End Function



Joli, comme d'hab (a part peut être les +, mais c'est affaire de goût ;-)


Avatar
jbongran
jbongran wrote:
Gilles LAURENT wrote:
Et toute mes excuses pour avoir laissé mon code et supprimé le tient, ce

n'était pas intentionnel, je voulai faire exactement le contraire.
Désolé