Page 1 sur 1

Generer un fichier texte

MessagePublié: 15 Oct 2003 à 14:55
par PAT
Voici mon besoin : j'ai une base Notes avec certains documents, tous créés avec un même masque contenant un champs type Texte et un champs de type Liste.Je voudrais mettre dans ce masque un bouton permettant de générer sur le disque de l'utilisateur un fichier texte contenant :Texte1 (contenu du champs Texte du 1er document) (contenu du champs liste du 1er document : -------- -------- --------Texte2 (contenu du champs Texte du 2e document) (contenu du champs liste du 2e document : -------- -------- --------....Comment faire (je debute en dev) ?

Re: Generer un fichier texte

MessagePublié: 17 Oct 2003 à 12:25
par PAT
Personne ne peut m'aider ? C'est si compliqué cela ?

Re: Generer un fichier texte

MessagePublié: 17 Oct 2003 à 13:04
par Raziel
Salut,voici un bout de code qui devrait pouvoir t'aider.Tu place ce code soit dans un agent soit derrière un bouton.Soit CH1 mon champ texte et CH2 mon champ listeSoit MaVue le nom de la vue qui liste les docs devant être exportés.dim session as new notessessiondim db as notesdatabasedim vue as notesviewdim doc as notesdocumentDim fileNumber As Integerdim buffer as stringset db = session.currentdatabaseset vue = db.getview("MaVue")set doc = vue.getfirstdocument' Ouverture du fichierOpen "c:\export.txt" For OutPut As fileNumberwhile not doc is nothingbuffer = doc.getitemvalue("CH1")(0) + chr$(13)buffer = buffer + doc.getitemvalue("CH2")(0)' Ecriture dans le fichierPrint #fileNumber, buffer' Passage au doc suivantset doc = vue.getnextdocument (doc)wend' Fermeture du fichierclose #fileNumberJe ne l'ai pas testé mais je pense qu'il devrait fonctionner.

Re: Generer un fichier texte

MessagePublié: 24 Oct 2003 à 10:37
par PAT
Merci, mais le pb c'est que ton code me renvoit que la premiere valeur du champs Liste.Comment obtenir toutes les valeurs de ce champs de type liste ?

Re: Generer un fichier texte

MessagePublié: 24 Oct 2003 à 11:02
par Droad
remplaces:buffer = buffer + doc.getitemvalue("CH2")(0)par:buffer = buffer + doc.getfirstitem("CH2").Textça devrait le faire.[%sig%]

Re: Generer un fichier texte

MessagePublié: 24 Oct 2003 à 11:05
par Raziel
Tout dépend de comment tu veux gérer ton champ multi val :Veux tu avoir une ligne pour chaque valeur du champ ?Veux tu toutes les valeurs du champ les une à côté des autres ? Dans ce cas, quelle sérateur utilisé ?

Re: Generer un fichier texte

MessagePublié: 24 Oct 2003 à 11:13
par PAT
Je voudrais une ligne pour chaque valeur du champs.

Re: Generer un fichier texte

MessagePublié: 24 Oct 2003 à 13:50
par Raziel
Choix CH1 mon champ multi evaluédim session as new notessessiondim db as notesdatabasedim vue as notesviewdim doc as notesdocumentDim fileNumber As Integerdim buffer as stringdim indice as integerset db = session.currentdatabaseset vue = db.getview("MaVue")set doc = vue.getfirstdocument' Ouverture du fichierOpen "c:\export.txt" For OutPut As fileNumberwhile not doc is nothingfor indice=0 to ubound(doc.getitemvalue("CH1"))buffer = doc.getitemvalue("CH1")(indice) + chr$(13)buffer = buffer + doc.getitemvalue("CH2")(0)' Ecriture dans le fichierPrint #fileNumber, buffernext' Passage au doc suivantset doc = vue.getnextdocument (doc)wend' Fermeture du fichierclose #fileNumber

Re: Generer un fichier texte

MessagePublié: 24 Oct 2003 à 14:05
par PAT
Super, merci bien !Si ce n'est pas trop demander, comment faire en sorte que cette boucle n'agisse pas sur tous les documents de la vue mais seulement sur ceux sélectionnés par l'utilisateur ?

Re: Generer un fichier texte

MessagePublié: 24 Oct 2003 à 14:29
par Raziel
Dans ce cas il faut que tu mettes le code dans un agent dont les propriétés sont les suivantes : "Exécuter sur les documents sélectionnées"Ensuite tu met le code suivant :dim session as new notessessiondim db as notesdatabasedim docCol as notesdocumentcollectiondim doc as notesdocumentDim fileNumber As Integerdim buffer as stringdim indice as integerset db = session.currentdatabaseset docCol = db.UnprocessedDocumentsset doc = docCol.getfirstdocument' Ouverture du fichierOpen "c:\export.txt" For OutPut As fileNumberwhile not doc is nothingfor indice=0 to ubound(doc.getitemvalue("CH1"))buffer = doc.getitemvalue("CH1")(indice) + chr$(13)buffer = buffer + doc.getitemvalue("CH2")(0)' Ecriture dans le fichierPrint #fileNumber, buffernext' Passage au doc suivantset doc = docCol.getnextdocument (doc)wend' Fermeture du fichierclose #fileNumber

Re: Generer un fichier texte

MessagePublié: 24 Oct 2003 à 15:01
par PAT
Je voulais eviter de faire un agent (j'ai mis ce code dans un bouton d'action rattaché à ma vue) ...J'avais entendu parlé d'une fonction du type UnprocessedDocuments.J'ai regardé l'aide en ligne mais n'y ai rien compris ...La connais tu ? Penses-tu qu'elle pourrait resoudre mon pb ?Sinon, comment programmer le bouton pour lui demander de lancer l'agent en question ?

Re: Generer un fichier texte

MessagePublié: 24 Oct 2003 à 15:13
par Raziel
Pour ce qui est tu unprocesseddocument, je l'utilise dans le dernier code que je t'ai envoyé.Pour ce qui est de l'agent, je m'aperçois que je t'ai dis une bétise : tu peux mettre le dernier code derrière un bouton, ça marchera aussi.

Re: Generer un fichier texte

MessagePublié: 27 Oct 2003 à 11:50
par PAT
Merci de ton aide precieuse Raziel. J'ai eu quand même quelques soucis avec ton dernier code, surtout dans le fichier généré qui cotenait des données un peu farfelues (certaines lignes se marchaient les unes sur les autres).Pour ceux que cela interesse, voici le code final :Sub Click(Source As Button) Dim session As New notessession Dim db As notesdatabase Dim docCol As notesdocumentcollection Dim doc As notesdocument Dim fileNumber As Integer Dim buffer As String Dim buffer2 As Variant Set db=session.currentdatabase Set docCol=db.UnprocessedDocuments Set doc = docCol.getfirstdocument fileNumber% = Freefile() 'Ouverture du fichier Open "c:\export.txt" For Output As fileNumber% While Not doc Is Nothing buffer=doc.getitemvalue("ListName")(0) + Chr$(13) 'Ecriture dans le fichier Print #fileNumber%, buffer buffer="" buffer2=doc.getitemvalue("Members") Forall m In buffer2 buffer=m + Chr$(13) 'Ecriture dans le fichier Print #fileNumber%, buffer buffer="" End Forall buffer=Chr$(13) 'Ecriture dans le fichier Print #fileNumber%, buffer buffer="" 'Passage au doc suivant Set doc=docCol.getnextdocument(doc) Wend 'Fermeture du fichier Close #fileNumber% End Sub