RTItem, comportement étrange.

Forum destiné aux questions sur le développement : Formules, LotusScript, Java ...

RTItem, comportement étrange.

Messagepar Ahamay » 05 Nov 2009 à 16:37

re :)

J'ai un bout de code (qui au demeurant fonctionne plutot bien) que je ne m'explique pas... c'est pas bloquant dans la mesure ou je contourne, mais j'aimerai bien piger ce qui déconne.

En bref au debut de dans mon code j'ai :


Dim s As New NotesSession
Dim doc As NotesDocument
Dim rtItem As NotesRichTextItem
Set db = s.CurrentDatabase
Set doc = view.GetFirstDocument

Do While Not (doc Is Nothing)

If Not doc.HasItem( "TestDbComment" ) Then
  If Not doc.HasItem( "TestDbComment" ) Then
      Set rtItem = doc.CreateRichTextItem( "TestDbComment" )
      Call doc.Save(True,True)
 End If
End If

[...]

Tout cela parce qu'après je mets a jour un champ qui n'existe pas dans tous les documents (car créé sur le tard)

Bon bref.... bin parfois Debug me retourne un Object Variable not set... alors que je vois bien mon Doc.TestDbComment dans mes Items du doc !

Du coup pour que cela fonctionne j'execute avant, un agent qui parcours tous les documents de ma vue et qui me fait :


Dim s As New NotesSession
Dim db As NotesDatabase
Dim view As NotesView
Dim doc As NotesDocument
Dim i As Integer, ii As Integer
Dim rtItem As NotesRichTextItem

'Base et doc en cours
Set db = s.CurrentDatabase
Set view = db.GetView("vwTmpByName")
Set doc = view.GetFirstDocument

i=0
ii=0

Do While Not (doc Is Nothing)
  Print ii
  If Not doc.HasItem( "TestDbComment" ) Then
     i=i+1
Set rtItem = doc.CreateRichTextItem( "TestDbComment" )
Call doc.Save(True,True)
  End If

ii=ii+1
Call doc.Save(True, True)
Set doc = view.GetNextdocument(doc)
Loop
Msgbox(Str$(ii)&" docs traités / "& Str$(i)& " docs corrigés")

???? Et là, tout baigne lorsque j'execute mon code initial.... pu d'object variable not set ! J'pige pas vu que c'est exactement la mème méthode pour tester l'existance du champ dans les 2 procédures !!???

Quelqu'un aurait il une idée ?
Dernière édition par Ahamay le 05 Nov 2009 à 16:56, édité 1 fois.
Avatar de l’utilisateur
Ahamay
Posteur expérimenté
Posteur expérimenté
 
Message(s) : 368
Inscrit(e) le : 27 Nov 2007 à 09:30
Localisation : Completement à l'ouest

Messagepar Michael DELIQUE » 05 Nov 2009 à 16:41

salut

deja evite de déclarer ton rtitm dans la boucle

si tu as besoin de le de-instancifier un set rtitem = nothing fais parfaitement l'affaire
Cordialement

Michael (SMS-Phobique)
----------------------------
"La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi."
Albert EINSTEIN
Avatar de l’utilisateur
Michael DELIQUE
Administrateur
Administrateur
 
Message(s) : 12183
Inscrit(e) le : 16 Déc 2004 à 10:36
Localisation : Paris/Cergy

Messagepar Ahamay » 05 Nov 2009 à 16:52

ok j'avoue c'est pas clean..... corrigé !
mais ça n'explique pas ce comportement étrange. Si ????
Si haut que l'on soit placé, on n'est jamais assis que sur son cul (Montaigne) 8)
Avatar de l’utilisateur
Ahamay
Posteur expérimenté
Posteur expérimenté
 
Message(s) : 368
Inscrit(e) le : 27 Nov 2007 à 09:30
Localisation : Completement à l'ouest

Messagepar Michael DELIQUE » 05 Nov 2009 à 16:55

d'une maniere générale

ne metre dans une boucle que le code qui dois faire quelque chose pour chaque boucle.

sinon essais tu verra bien

tu peux aussi passer par un set rtItem = New Notesrichtexitem(Doc,monchamp)
Cordialement

Michael (SMS-Phobique)
----------------------------
"La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi."
Albert EINSTEIN
Avatar de l’utilisateur
Michael DELIQUE
Administrateur
Administrateur
 
Message(s) : 12183
Inscrit(e) le : 16 Déc 2004 à 10:36
Localisation : Paris/Cergy

Messagepar Ahamay » 05 Nov 2009 à 16:57

ok j'vais essayer avec le New NotesRichTextItem....

merci Michael
Si haut que l'on soit placé, on n'est jamais assis que sur son cul (Montaigne) 8)
Avatar de l’utilisateur
Ahamay
Posteur expérimenté
Posteur expérimenté
 
Message(s) : 368
Inscrit(e) le : 27 Nov 2007 à 09:30
Localisation : Completement à l'ouest

Messagepar kochiz » 05 Nov 2009 à 16:58

Dans ton premier code tu scannes tous les documents de ta base alors que dans le second tu scannes tous les documents d'une vue, non ?
Patience et longueur de temps font plus que force ni que rage


Version Client 7
Version serveur 7 windows 2000/2003
Avatar de l’utilisateur
kochiz
Empereur des posts
Empereur des posts
 
Message(s) : 1232
Inscrit(e) le : 13 Jan 2005 à 11:01
Localisation : Hérault

Messagepar Ahamay » 05 Nov 2009 à 17:06

@kochiz : non, dans les 2 cas je traite tous les documents de ma vue.
Si haut que l'on soit placé, on n'est jamais assis que sur son cul (Montaigne) 8)
Avatar de l’utilisateur
Ahamay
Posteur expérimenté
Posteur expérimenté
 
Message(s) : 368
Inscrit(e) le : 27 Nov 2007 à 09:30
Localisation : Completement à l'ouest

Messagepar stloje » 06 Nov 2009 à 09:34

C'est peut être du vent ce que j'écris, mais je pense que le fait de passer par la méthode "CreateRichTextItem"du document lui-même ne crée pas nécessairement le champ s'il n'y a pas d'affectation de valeur, tandis qu'en passant par la classe "NotesRichTextItem", tu crée un véritable objet et l'affecte au document.

Lorsque tu fais fonctionner le débogueur, as-tu remarqué, après la sauvegarde du document, si le champ est bien créé?
Avatar de l’utilisateur
stloje
Posteur expérimenté
Posteur expérimenté
 
Message(s) : 335
Inscrit(e) le : 09 Sep 2008 à 13:18
Localisation : Orléans

Messagepar Ahamay » 06 Nov 2009 à 10:37

@stloje : 1) Mais justement j'affecte systematiquement un peu plus loin dans mon code... c'est un champ que j'utilise pour loguer le resultat des traitements de l'agent.

Et 2) Oui, c'est bien ça le pire.... en debug je vois bien mon champ dans les ITEM du DOC.... c'est bien ce qui me perturbe le Plus !

Bon dans certains cas, entre la declaration du RTItem et son affectation, je passe par des functions et procedures (qui elles aussi vont remplir le champ en question).... a croire que lors du passage d'un code a l'autre il egard ses petits :\
Si haut que l'on soit placé, on n'est jamais assis que sur son cul (Montaigne) 8)
Avatar de l’utilisateur
Ahamay
Posteur expérimenté
Posteur expérimenté
 
Message(s) : 368
Inscrit(e) le : 27 Nov 2007 à 09:30
Localisation : Completement à l'ouest

Messagepar Michael DELIQUE » 06 Nov 2009 à 10:42

a croire que lors du passage d'un code a l'autre il egard ses petits :\


smurf ! je serais curieux que tu m'envois ton code complet...

jamais eu ce genre de souci
Cordialement

Michael (SMS-Phobique)
----------------------------
"La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi."
Albert EINSTEIN
Avatar de l’utilisateur
Michael DELIQUE
Administrateur
Administrateur
 
Message(s) : 12183
Inscrit(e) le : 16 Déc 2004 à 10:36
Localisation : Paris/Cergy

Messagepar stloje » 06 Nov 2009 à 10:58

Tu ne passerais pas par le "Front-end" pour sauvegarder le document. J'ai eu souvent ce soucis lorsque je créais des champs de texte riche en "Back-end" à partir d'un document "Front-end". Je ne sais pas (pas encore essayé) avec les nouvelles fonctionnalités de la V6 si le rafraîchissement des champs texte riche en Front-end fonctionne correctement lorsqu'on créé le champ en Back-end.
Avatar de l’utilisateur
stloje
Posteur expérimenté
Posteur expérimenté
 
Message(s) : 335
Inscrit(e) le : 09 Sep 2008 à 13:18
Localisation : Orléans

Messagepar Ahamay » 06 Nov 2009 à 11:33

@Michael ........ envoyé en MP pour pas poluer.
Si haut que l'on soit placé, on n'est jamais assis que sur son cul (Montaigne) 8)
Avatar de l’utilisateur
Ahamay
Posteur expérimenté
Posteur expérimenté
 
Message(s) : 368
Inscrit(e) le : 27 Nov 2007 à 09:30
Localisation : Completement à l'ouest


Retour vers Développement

cron