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

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

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

Messagepar phil » 19 Nov 2003 à 11:37

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.
phil
 

C'est bon perdez pas votre temps merci qd meme...

Messagepar phil » 19 Nov 2003 à 12:15

j'ai retrouvé un script qui le faisait et qui le fait donc toujours bien...
phil
 

Re: C'est bon perdez pas votre temps merci qd meme...

Messagepar PAT » 20 Nov 2003 à 09:44

Peux-tu nous fournir ce scriopt, histoire que les autres soient au courant ...Merci.
PAT
 

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

Messagepar Earthquake » 20 Nov 2003 à 13:14

Moi je marque le doc pour suppression, je fais une collection en fonction de mon marquage et je purge la collection
Earthquake
 

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

Messagepar polbusse » 20 Nov 2003 à 14:09

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
polbusse
 

Re: C'est bon perdez pas votre temps merci qd meme...

Messagepar Droad » 20 Nov 2003 à 14:14

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%]
Droad
 

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

Messagepar phil » 21 Nov 2003 à 06:04

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... :)
phil
 

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

Messagepar AdminExpert » 05 Déc 2003 à 13:44

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
AdminExpert
 

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

Messagepar polbusse » 05 Déc 2003 à 13:48

oui, mais le GetNextDocument() est plus rapide en particulier qd il y a grand nbre de documents.
polbusse
 

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

Messagepar AdminExpert » 05 Déc 2003 à 13:59

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
AdminExpert
 

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

Messagepar AdminExpert » 05 Déc 2003 à 14:00

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
AdminExpert
 

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

Messagepar AdminExpert » 05 Déc 2003 à 14:05

Oui en effet, parfois il faut peut être privilièéiuer la simplicité à la puissanceje te comprends parfaitement
AdminExpert
 

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

Messagepar Raisin » 05 Déc 2003 à 19:55

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 ;-)
Raisin
 

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

Messagepar AdminExpert » 07 Déc 2003 à 18:19

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)
AdminExpert
 

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

Messagepar polbusse » 08 Déc 2003 à 09:21

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
polbusse
 

Suivant

Retour vers Développement

cron