Page 1 sur 1

Set Doc = View.GetDocumentByKey(KEY, True) ne s'initialise p

MessagePublié: 22 Juin 2010 à 18:12
par mortanium
Bonjour,

Je dois construire une application qui recherche toutes les bases mail présent sur plusieurs serveurs et vérifier si il existe une fiche personne dans le NAB.

Dans un deuxième temps, j'ai un agent qui croise les informations entre le NAB et mon application.
C'est à dire que je recherche dans le NAB si une fiche personne serait absente de mon appli , dans ce cas là, je crée un nouveau document dans mon appli.
C'est là que je rencontre un problème.
Set Doc = View.GetDocumentByKey(KEY, True) ne s'initialise pas alors que tout me semble correct.

Voici le code que j'utilise :

Sub Initialize
Dim Session As NotesSession
Dim Db As NotesDatabase
Dim View As NotesView
Dim Doc As NotesDocument

Dim ViewPeople As NotesView
Dim DocPeople As NotesDocument

Dim DbNAB As New NotesDatabase( "", "" )
Dim ViewNAB As NotesView
Dim DocNAB As NotesDocument

Dim NABSrv, NABDb, NABView, EXTENSION, NABFORM, KEY As String
Dim Flag As Boolean

Set Session = New NotesSession
Set Db = Session.CurrentDatabase
Set View = Db.GetView("Admin\01 - Setup")
Set Doc = View.GetFirstDocument

'## Récupération des paramètres de profile
NABSrv = Doc.NAB_Admin_Serv(0)
NABDb = Doc.NAB_Annuaire(0)
NABView = Doc.NAB_View_Users(0)

'## Test Ouverture du NAB
Flag = DbNAB.Open(NABSrv,NABDb)
If Flag = False Then
Exit Sub
End If

'## Accès au premier document utilisateur du NAB
Set ViewNAB = DbNAB.GetView(NABView)
Set DocNAB = ViewNAB.GetFirstDocument

'## Accès aux documents suivants des utilisateurs du NAB
While Not DocNAB Is Nothing
NABFORM = DocNAB.Form(0)
If NABFORM<>"Person" Then
Goto SUIVANT
End If
EXTENSION = Right$(Ucase$(DocNAB.MailFile(0)),4)

If EXTENSION<>".NSF" Then
KEY= Cstr(Ucase$(DocNAB.FirstName(0)+" "+DocNAB.LastName(0)+"-"+DocNAB.MailServer(0)+"!!"+DocNAB.MailFile(0)+".nsf"))
Else
KEY= Cstr(Ucase$(DocNAB.FirstName(0)+" "+DocNAB.LastName(0)+"-"+DocNAB.MailServer(0)+"!!"+DocNAB.MailFile(0)))
End If

Set ViewPeople = Db.GetView("(VPeople)")
Set DocPeople = ViewPeople.GetDocumentByKey(KEY, True)
If (DocPeople Is Nothing) Then
'Msgbox ("creation doc")
DocPeople.Form = "People"
DocPeople.DbTitle = DocNAB.FirstName(0)+ " " + DocNAB.LastName(0)
DocPeople.FullName = DocNAB.FullName(0)
DocPeople.FirstName = DocNAB.FirstName(0)
DocPeople.LastName = DocNAB.LastName(0)
DocPeople.ShortName = DocNAB.ShortName(0)
DocPeople.Location = DocNAB.Location(0)
DocPeople.MailServer = DocNAB.MailServer(0)
DocPeople.MailPath = DocNAB.MailFile(0)
DocPeople.MailForwarding = DocNAB.MailAddress(0)
DocPeople.DbOnServer = DocNAB.MailServer(0)
DocPeople.DbMailPath = DocNAB.MailFile(0)
DocPeople.Clef =KEY
Call DocPeople.Save(True,False)
Else
'Msgbox ("suivant")
End If

SUIVANT :
Set DocNAB = ViewNAB.GetNextDocument(DocNAB)

Wend

End Sub


Merci.

MessagePublié: 23 Juin 2010 à 08:27
par stloje
As-tu remarqué s'il y avait une erreur lors de l'exécution?

Lorsque tu traces l'exécution du code, la chaîne de recherche est-elle bonne?

Dernière question : pourquoi tu forces l'affectation à être en string (cstr) quand ce dernier est déjà en string?

MessagePublié: 23 Juin 2010 à 08:37
par Michael DELIQUE
salut

vérifier que :

- la key est bien la permiere colonne de la vue
- la premiere colonne est bien trié
- attentention à la case

oh faite instanciation d'une vue dans une boucle "vade retro satanas" je te raconte pas le temp de traitement

MessagePublié: 23 Juin 2010 à 09:17
par mortanium
Bonjour,

Pour répondre à vos questions :
La vue est trié et la première colonne contient la clé de recherche. Ce champ est calculé à la création du document.
J'ai fait en sorte que ma clé soit créé tout en majuscule.
J'ai rajout Cstr pour être sûre que la chaine soit de type String.

L'objectif est de passé en revue toutes les fiches utilisateurs présente dans le NAB et vérifier que dans ma base elles sont également présente. Si ce n'est pas le cas, je créée le document.

En faisant tourné mon agent en utilisant le debegueur, la ligne suivante :
Set DocPeople = ViewPeople.GetDocumentByKey(KEY,TRUE)
ne s'initialise pas. En continuant le script il s'arrête à la ligne DocPeople.Form = "People" avec l'erreur "Object variable Not Set".

MessagePublié: 23 Juin 2010 à 09:35
par abertisch
Ah mais c'est normal !!

si le document n'existe pas il faut le créer non ? avec db.Createdocument() :D

MessagePublié: 23 Juin 2010 à 13:12
par LSong
If (DocPeople Is Nothing) Then
'Msgbox ("creation doc")
DocPeople.Form = "People"


ben s'il n'existe pas c'est qu'il est = nothing ...
faudrait le crée avant de l'utiliser


PS l'art de chercher un probleme la ou il n'y en a pas

MessagePublié: 23 Juin 2010 à 13:38
par mortanium
Oups...
ça doit être un oubli.

Merci ça fonctionne au poil...