Modifier un document Lotus via Excel

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

Modifier un document Lotus via Excel

Messagepar Larion » 08 Déc 2010 à 12:32

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: ...
Dernière édition par Larion le 08 Déc 2010 à 14:53, édité 1 fois.
Larion
Découvre Dominoarea
Découvre Dominoarea
 
Message(s) : 2
Inscrit(e) le : 08 Déc 2010 à 10:55
Localisation : Gradignan (Bordeaux)

Messagepar Grey Goda » 08 Déc 2010 à 13:48

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 ...
Avatar de l’utilisateur
Grey Goda
Posteur néophyte
Posteur néophyte
 
Message(s) : 61
Inscrit(e) le : 12 Mars 2010 à 11:31

Messagepar Larion » 08 Déc 2010 à 14:51

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.
Larion
Découvre Dominoarea
Découvre Dominoarea
 
Message(s) : 2
Inscrit(e) le : 08 Déc 2010 à 10:55
Localisation : Gradignan (Bordeaux)


Retour vers Développement