Page 1 sur 1

Modifier un document Lotus via Excel

MessagePublié: 08 Déc 2010 à 12:32
par Larion
Bonjour à tous, (super forum :wink: )

Sous Lotus, nous avons plusieurs documents sous Lotus que nous modifions assez souvent.
Pour gagner du temps, nous souhaitons automatiser cette manipulation qui nous prend pas mal de temps.
Les documents contiennent du texte, des images, des documents...
Aujourd'hui, je suis en mesure d'envoyer par mail ce type de document sans problème.
Mais je n'arrive pas à modifier les documents existants pour en faire de même.

Voici, le code :
Dans un premier temps, je prends le document en question, et je le vide (texte et document), cela fonctionne bien.
Code : Tout sélectionner
   Set noDatabase = noSession.GETDATABASE(Serveur, MailBox)
   Set noDocument = noDatabase.GetDocumentByID(DocById) 'Test Automatisation
   
'---- Supprimer Fichiers Joints ----   http://www.dominoarea.org/forum/viewtopic.php?t=11940
   If noDocument.HasEmbedded = True Then
      For Each j In noDocument.GetFirstItem("Body").embeddedobjects
         noDocument.GetAttachment(j.Name).Remove
      Next
   End If


'---- Supprimer Contenu Texte ----
   noDocument.body = ""


Dans un second temps, je crée mon document (que j'utilise pour l'envoie de mails), et là aussi, cela fonctionne. Un extrait du code :
Code : Tout sélectionner
   Set Header = body.CreateHeader("MIME-Version")
   Call Header.SetHeaderVal("1.0")
   Set Header = body.CreateHeader("Content-Type")
   Call Header.SetHeaderValAndParams("multipart/related;boundary=""= NextPart_=""")

'Set the HTML part.
    Set mimeBody = body.CreateChildEntity()
    Set Stream = noSession.CreateStream()
    Call Stream.WriteText(Html)
    Call mimeBody.SetContentFromText(Stream, "text/html;charset=UTF-8", ENC_BASE64)
    Call Stream.Close

'Images src='cid:Transactionnel.png'
   idx = InStr(Html, "'cid:")
   While idx
      pos = InStr(idx + 5, Html, "'")
      Image.Add Mid(Html, idx + 5, pos - idx - 5)
      idx = InStr(pos, Html, "'cid:")
   Wend
   For Each Nom In Image
     Set Stream = noSession.CreateStream()
     Set mimeBody = body.CreateChildEntity()
     Set Header = mimeBody.CreateHeader("Content-ID")
     Call Header.SetHeaderVal(Nom)
     Call Stream.Open(Racine & Nom)
     Call mimeBody.SetContentFromBytes(Stream, MIME.Item(Right(Nom, 3)), ENC_IDENTITY_BINARY)
     Call Stream.Close
   Next

'Fichier Joint
   For Each Nom In FichierJoint
      Call noDocument.CREATERICHTEXTITEM(Nom).EMBEDOBJECT(1454, "", Racine & Nom, Nom)
   Next
   
'Envoie Mail
   Call noDocument.Send(False)


Là, ou je sèche littéralement, c'est comment faire le lien entre les 2 parties de code.
Je n'arrive pas à manipuler le Body du document existant.
Même avec la commande suivante 'Set body = noDocument.getMIMEEntity()
Si vous avez une expérience à ce sujet, je suis preneur :wink: ...

MessagePublié: 08 Déc 2010 à 13:48
par Grey Goda
Quel est le problème ? Il y a un message d'erreur ?


Sinon, une idée en passant... Entre les deux étapes :
- Suppression du champ body (plutot qu'une mise à blanc) :
Code : Tout sélectionner
Set rtitem = noDocument.GetFirstItem("body")
Call rtitem.remove()

- Sauvegarde du doc :
Code : Tout sélectionner
noDocument.save(true,false)

- Création d'un nouveau champ body :
Code : Tout sélectionner
Set body = New NotesRichTextItem( noDocument, "Body" )


et la suite du code ...

MessagePublié: 08 Déc 2010 à 14:51
par Larion
Merci pour votre réponse rapide :wink:
A voir les premiers tests, le problème est résolu.
En effet, il ne faut pas mettre à vide le Body, mais bien le détruire par
Code : Tout sélectionner
Set rtitem = noDocument.GetFirstItem("body")
Call rtitem.remove()

Après cela, on peut le recréer par
Code : Tout sélectionner
Set body = noDocument.createMIMEEntity

Et du coup, tout le reste du code fonctionne
Code : Tout sélectionner
   Set Header = body.CreateHeader("MIME-Version")
   Call Header.SetHeaderVal("1.0")
   Set Header = body.CreateHeader("Content-Type")
   Call Header.SetHeaderValAndParams("multipart/related;boundary=""= NextPart_=""")

'Set the HTML part.
    Set mimeBody = body.CreateChildEntity()
    Set Stream = noSession.CreateStream()
    Call Stream.WriteText(Html)
    Call mimeBody.SetContentFromText(Stream, "text/html;charset=UTF-8", ENC_BASE64)
    Call Stream.Close
etc...

Merci beaucoup.