Page 1 sur 2
doc.remove dans une boucle getfirst - getnext(doc)

Publié:
19 Nov 2003 à 11:37
par phil
Salut à tous.j'ai une boucle de traitement sur une vue et je voudrais supprimercertains docs dans cette vue.Est-il possible de mettre un "doc.remove" dans une boucle getfirstdocumentgetnextdocument(doc) en contournant l'erreur "missing argument ADT" lorsque on fait un getnetxdocument sur un doc qu'on vient de "remover" ?(en d'autres termes sans en passer par une collection)Merci à vous.
C'est bon perdez pas votre temps merci qd meme...

Publié:
19 Nov 2003 à 12:15
par phil
j'ai retrouvé un script qui le faisait et qui le fait donc toujours bien...
Re: C'est bon perdez pas votre temps merci qd meme...

Publié:
20 Nov 2003 à 09:44
par PAT
Peux-tu nous fournir ce scriopt, histoire que les autres soient au courant ...Merci.
Re: doc.remove dans une boucle getfirst - getnext(doc)

Publié:
20 Nov 2003 à 13:14
par Earthquake
Moi je marque le doc pour suppression, je fais une collection en fonction de mon marquage et je purge la collection
Re: doc.remove dans une boucle getfirst - getnext(doc)

Publié:
20 Nov 2003 à 14:09
par polbusse
perso je le ferais comme ca :set view = db.GetView("NomVue")set doc = view.GetFirstDocument()While not (doc is nothing) set doctmp = view.GetNextDocument(doc) call doc.remove(true) set doc = doctmpwend
Re: C'est bon perdez pas votre temps merci qd meme...

Publié:
20 Nov 2003 à 14:14
par Droad
Ex:Cle= Inputbox("Clé: ", "Suppression", "")Set doc = view.GetFirstDocument()While Not doc Is Nothing Set nextDoc = view.GetNextDocument(doc) if doc.Cle(0)=cle Then Call doc.Remove(True) Set doc = nextDocWend(Exemple bidon. Dans ce cas, mieux vaut avoir une vue par clé et utiliser GetAllDocumentsByKey + RemoveAll)[%sig%]
Re: doc.remove dans une boucle getfirst - getnext(doc)

Publié:
21 Nov 2003 à 06:04
par phil
dim a_deleter as variantdim doc as notesdocumentdim docToRemove as notesdocumentdim bla bla etc...Set Doc = Vue.getfirstdocumentIf Not(Doc Is Nothing) Then Do a_deleter = False Set DocToRemove = Doc ' ICI LES CHTIS TESTS POUR VOIR SI LE DOC EST A VIRER... ' if Doc.MonChamp(0) = "oh oui!...vire moi" then a_deleter = true end if Set Doc = Vue.getnextdocument(Doc) If a_deleter Then Call DocToRemove.remove(True) a_deleter = false End If Loop Until Doc Is NothingEnd Ify'a evidemment plus compact et plus rusé mais n'importe qui peutmaintenir - même moi après une année sabbatique et un CIFcuisine mexicaine...

Re: doc.remove dans une boucle getfirst - getnext(doc)

Publié:
05 Déc 2003 à 13:44
par AdminExpert
il faut passer par une collection et utiliser la proprété count et utiliser la méthode getnthdocument(i)i étant le numéro duc dans la collection---> c'est une méthode y en a d'autres
Re: doc.remove dans une boucle getfirst - getnext(doc)

Publié:
05 Déc 2003 à 13:48
par polbusse
oui, mais le GetNextDocument() est plus rapide en particulier qd il y a grand nbre de documents.
Re: doc.remove dans une boucle getfirst - getnext(doc)

Publié:
05 Déc 2003 à 13:59
par AdminExpert
Oui j'oubliais....Comment obtenir cette collection qui en fait comporte le ou les documents à supprimer....Set maCollection = maDB.UnprocessedDocumentsc'est la méthode UnprocessedDocuments qui renvoie une collectionil suffit de faire une boucle pour balayer la collectionalllez je vous le donne...Dim Session as NotesSessionDim maDB as notesDataBaseDim n as integerDim maCollection as NotesDocumentCollectionDim delDoc as NotesDocumentSet Session= new NotesSessionSet maDb=Session.CurrentDataBaseSet maCollection = maDB.UnprocessedDocumentsfor n=1 to maCollection.Countset delDoc=myCollection.getNthDocument(n)Call delDoc.Remove(true)next nmsgbox "suppression effectuée"voici en gros dans les grandes lignes et pendant la boucle on peut faire une dlg qui demande la confirmation de la suppressionça évite tout ce "mic mac" comme je l'ai plus haut et ça marche pour un ou n document sélectionnés
Re: doc.remove dans une boucle getfirst - getnext(doc)

Publié:
05 Déc 2003 à 14:00
par AdminExpert
Oui j'oubliais....Comment obtenir cette collection qui en fait comporte le ou les documents à supprimer....Set maCollection = maDB.UnprocessedDocumentsc'est la méthode UnprocessedDocuments qui renvoie une collectionil suffit de faire une boucle pour balayer la collectionalllez je vous le donne...Dim Session as NotesSessionDim maDB as notesDataBaseDim n as integerDim maCollection as NotesDocumentCollectionDim delDoc as NotesDocumentSet Session= new NotesSessionSet maDb=Session.CurrentDataBaseSet maCollection = maDB.UnprocessedDocumentsfor n=1 to maCollection.Countset delDoc=myCollection.getNthDocument(n)Call delDoc.Remove(true)next nmsgbox "suppression effectuée"voici en gros dans les grandes lignes et pendant la boucle on peut faire une dlg qui demande la confirmation de la suppressionça évite tout ce "mic mac" comme je l'ai plus haut et ça marche pour un ou n document sélectionnés
Re: doc.remove dans une boucle getfirst - getnext(doc)

Publié:
05 Déc 2003 à 14:05
par AdminExpert
Oui en effet, parfois il faut peut être privilièéiuer la simplicité à la puissanceje te comprends parfaitement
Re: doc.remove dans une boucle getfirst - getnext(doc)

Publié:
05 Déc 2003 à 19:55
par Raisin
Tu peux même faire directement:Call notesDocumentCollection.RemoveAll( force ) - cf aide designerSi tu n'as pas besoin de confirmation de suppréssion

Et je confirme les propos de polbusse.Bon c'est vrai que je ne suis pas DevExpert lololol

Re: doc.remove dans une boucle getfirst - getnext(doc)

Publié:
07 Déc 2003 à 18:19
par AdminExpert
D'accord pour le RemoveAll, je sais...Mon dév s'appuyait sur une suppression de documents via l'UI et elle est effectuée pas à pas (doc par doc) en donnant la possibilité à l'utilisateur de confirmer sa suppression (il peut se tromper...)il est vrai que le RemoveAll est plus propre mais la confirmation dans ce cas vaut pour la totalitébref ça dépend du cahier des charges qui t'es remis, car dans une application le client souhaitez pouvoir changer de décision au moment de la suppression, j'y avais donc inclu la fonction MessageBox( ) avec un OUI/NON/ANNULER et de plus je devais bloquer le bouton Suppr dans le script de la base (Querydocumentdelete) - le bouton Suppr étant seulement autorisé aux administrateurs fonctionnels de l'application, voici donc pourquoi j'ai du développé une suppression de document assistée avec possibilité de reprise... et pour aller plus loin j'ai du développé un système de suppression logique et donner la possibilité aux administrateurs de restorer un document supprimé (précision : c'est en notes 4.6) - et pour conclure l'administrateur avait alors la possibilité de puger les doc supprimés logiquement... (je peux te dire que ça été du sport !!!) - y a vraiment des clients tordus mais bon c'est notre gagne pain... chutttt....ps : pour ceux qui seraient amenés à reproduire ceci (suppression logique), voici l'astuce que j'ai utilisée :j'avais en fait deux masques identiques presque~j'ai dupliqué le masque EndUser en DocDeleted (nom donné au Form)qd l'utilisateur supprimait un doc, je faisais tout simplement FIELD Form:=DocDeletej'ai créé une vue spécifique sur DocDelete et celle-ci était accessible via un navigateur réserver aux administrateurx (accès contrôlé par des rôles)Le masque DocDelete présentait les données en mode consultation uniquement et j'y avais interdit toutes modification (lock du queryopen et postopen), champ en mode display, etc. pour la fonction restore il suffisait de faire l'inverse FIELD Form:=EndUseril devait y avoir plus mais quand on vous demande cela presque la veille de la mise en prod... (enfin vous connaissez aussi comme moi, on fait au plus rapide pour faire plaisir au client)
Re: doc.remove dans une boucle getfirst - getnext(doc)

Publié:
08 Déc 2003 à 09:21
par polbusse
En résumé, je pense que le meilleur code c qd même celui proposé par Draod (méga-simple et archi-rapide):Cle= Inputbox("Clé: ", "Suppression", "")Set doc = view.GetFirstDocument()While Not doc Is NothingSet nextDoc = view.GetNextDocument(doc)if doc.Cle(0)=cle Then Call doc.Remove(True)Set doc = nextDocWend