Page 1 sur 1

Importer un fichier dans un Rich Text

MessagePublié: 16 Mars 2010 à 15:54
par fripouille76
Salut

Je me permet de vous poser la question suivante à tout hasard si vous avez déjà fait ce genre de chose.

voila, j'essaye D'importer un fichier HTML dans un champ text rich. via lotusScript. (j'arrive à le faire en passant par formule, mais ca me donne pas entière satisfaction)

- Concretement j'ai un agent sur le PostOpen de mon Masque, qui génère le fichier HTML et le dépose dans le répertoire (Notes/Data)
- Ensuite j'aimerai simplement récupérer ce fichier et l'afficher dans mon champs TextRich.

j'ai essayer avec le uidoc.import , en ayant fait un uidoc.gotofield avant mais il me dit que j'ai pas le droit d'utiliser cette commande. (surement que mon doc n'est pas encore réellement disponible)

avez vous une idée ou une piste que je pourrai tenter, merci de votre aide

MessagePublié: 16 Mars 2010 à 16:00
par Michael DELIQUE
salut

tu as pensé a lire ton fichier THM et a l'inserer comme du texte ?

MessagePublié: 16 Mars 2010 à 16:10
par fripouille76
En faite si je pouvais même eviter de créer le fichier ca m'arrangerai, mais j'ai déjà essayer d'envoyer directement mon code HTML dans le champs mais il est pas traduit. (j'ai beau mettre l'option du champs HTML)...rien n'y fait..ou alors je m'y prend mal.

si t'as la solution, je suis preneur michael ^^

MessagePublié: 16 Mars 2010 à 16:13
par Michael DELIQUE
euh j'ai du mal a comprendre

tu veux afficher le code ou l'interpretation du code ?

MessagePublié: 16 Mars 2010 à 16:17
par fripouille76
POur faire simple , j'ai un Agent qui créer un Fichier HTML avec le code que j'aimerai afficher dans mon champs Text Rich.
Mais il faut que le HTML soit interpréter par mon champ text rich.

en web ca marche bien, mais en notes, pas sur que ca fonctionne de cette facon. c'est pour ca que je passai par un fichier HTML que j'importais en formule par la suite avec un @command([fileImport])

MessagePublié: 16 Mars 2010 à 16:22
par fripouille76
Hmmmm......j'avais pas pensé au MIME....v tenter ca tiens

MessagePublié: 16 Mars 2010 à 16:57
par fripouille76
meme problème mon code s'affiche en text et n'est pas traduit...pouffff en même temps je maitrise pas trop le mime. Mais ca a pas l'air de résoudre mon problème !!!

MessagePublié: 17 Mars 2010 à 08:42
par stloje
Programmer en MIME n'est pas évident. Tu peux me montrer ton code?

MessagePublié: 17 Mars 2010 à 11:49
par fripouille76
j'ai laissé tomber le Mime, mais c'est peut être ma seule solution :(.

Je suis reparti sur ma solution d'importer en formula, mon fichier HTML. qui pour le moment est la seule solution qui m'affiche du HTML dans mon champs Txt rich.

Si tu as un exemple de Mime je veux bien...comme tu dis c'est pas évident j'ai essayer de reprendre un bout de code de l'aide mais je pense qu'il manque pas mal de chose.

j'ai mon code dans un champs string, mais me faut juste savoir l'envoyer

MessagePublié: 17 Mars 2010 à 14:10
par stloje
Je regarde pour mon code et je te l'envoi!

MessagePublié: 17 Mars 2010 à 14:55
par stloje
Donc, voici le code

ATTENTION : le MIME doit se mettre dans le champ "Body" pour qu'il soit visible. Notes indique que seul ce champ a été spécialement conçu pour recevoir du MIME

à mettre dans la partie Declaration

Code : Tout sélectionner
%REM
Cette classe contient les fonctions pouvant être exécutées en MIME
body : entité MIME
header : entête de l'entité MIME
stream : flux de données

InsertHeader : crée l'entête de la partie MIME
   entrée :
      headerType : le nom de l'entête à insérer
      headerValue : la valeur de l'entête
SearchHeaderValue : recherche la valeur d'un entête
   entrée : headerType : le nom de l'entête à rechercher
   sortie : la valeur de l'entête trouvée, sinon vide
InsertStream : insère le texte dans le corps du message
   entrée : textLine : chaîne de caractères
TruncateStream : efface le tampon créé par Stream
LinkStream : fonction qui force l'écrire de la mémoire tampon dans le corps de l'entité
CleanText : retire les caractères accentués et les transforme en caractère ascii ou ISO
   entrée : caract : chaîne de caractères à traiter
            forceISOCarac : vrai si doit être transformé en ISO, sinon faux
   sortie : la chaîne de caract transformée
FileAttachement : rattache un fichier au contenu MIME
   entrée : fileName : le nom du fichier à rattacher
%END REM
Public Class MIMEActions
   Private body As NotesMIMEEntity
   Private header As NotesMIMEHeader
   Private stream As NotesStream
   Private session As NotesSession
   
   Sub new (doc As NotesDocument)
      Set session = New NotesSession
      'on empêche temporairement la conversion du texte
      session.ConvertMIME = False
      Set body = doc.CreateMIMEEntity
      Set stream = session.CreateStream
      'il faut déclarer que le MIME est divisé en plusieurs parties
      'Call Me.InsertHeader ("Content-Type", "multipart")
   End Sub
   
   Public Function insertHeader (Byval headerType As String, Byval headerValue As String) As Boolean
%REM
type de header connus
- Content-Type
%END REM
      
      insertHeader = False
      'on vérifie si l'entête existe
      If searchHeaderValue (headerType) <> "" Then
         'on crée l'entête
         Set header = body.createHeader (headerType)
         Call header.setHeaderVal (headerValue)
         insertHeader = True
      End If
   End Function
   
   Private Property Get searchHeaderValue (headerType As String) As String
      If Not body.getNthHeader (headerType) Is Nothing Then
         searchHeaderValue = body.getNthHeader (headerType).getHeaderVal ()
      End If
   End Property
   
   Public Sub insertStream (textLine As String)
      Call stream.WriteText(textLine)   
   End Sub
   
   Public Sub truncateStream ()
      Call stream.Truncate
   End Sub
   
   Public Property Get hasStreamValue As Long
      hasStreamValue = stream.Bytes
   End Property
   
   Public Sub linkStream ()
      'on insère le contenu du texte avant de supprimer la chaîne
      Call body.setContentFromText(stream, "text/HTML;charset=ISO-8859-1", ENC_QUOTED_PRINTABLE)
      Call truncateStream ()
   End Sub
   
   Public Function cleanText (Byval caract As String, Byval forceISOCaract As Boolean) As String
      Dim tmp As String
      Dim i As Integer
      Dim debut As Boolean
      Dim ISOCarac As Boolean
      
      debut = False
      For i = 1 To Len(caract)
         tmp = Mid$ (caract, i, 1)
         'on s'assure que les caractères ne font pas partis d'une balise HTML
         If tmp = ">" Then debut = False
         If tmp = "<" Then debut = True
         
         'est-on dans une balise?
         If debut = False Then
            'on vérifie si on doit forcer la transformation en ISO
            If forceISOCaract = True Then
               'est-ce qu'il y a déjà eu l'entête de ISO?
               If ISOCarac = False Then
                  cleanText = CleanText & "=?ISO-8859-1?Q?"
                  ISOCarac = True
               End If
            End If
            If Instr(|azertyuiopqsdfghjklmwxcvbnAZERTYUIOPQSDFGHJKLMWXCVBN1234567890 <>;,:?./%=|, tmp) = 0 Then
               cleanText = cleanText & "&#x" & Hex$ (Uni (tmp)) & ";"
            Else
               cleanText = cleanText & tmp
            End If 
         End If
      Next
      'on termine le bloc concernant ISO
      If forceISOCaract = True Then cleanText = cleanText + "?="      
   End Function
   
   Public Sub fileAttachement (Byval fileName As String)
      Dim strContentType As String
      
      'set correct content types for known file types
      Select Case Lcase (Strright (fileName, "."))
      Case "gif"
         strContentType = "image/gif"
      Case "jpeg", "jpg"
         strContentType = "image/jpeg"
      Case Else
         strContentType = "application/octet-stream"
      End Select
      
      'on crée directement le type d'entête pour éviter de l'oublier
      Call Me.insertHeader ("Content-Disposition", {attachment; filename="} & fileName & {"})
      If stream.Open(fileName) Then
         Call body.setContentFromBytes(stream, strContentType & {; name="} & fileName & {"}, ENC_IDENTITY_BINARY)
         Call stream.Close
      End If
      
   End Sub
   
End Class


Voici un exemple de code pour créer un élément en MIME

Code : Tout sélectionner
   Dim session As New NotesSession
   Dim doc As New NotesDocument (session.CurrentDatabase)
   
   
   Dim MIMEDoc As MIMEActions
   
   doc.form = "Memo"
   
   'on initialise la partie MIME sur le document
   Set MIMEDoc = New MIMEActions (doc)
   'on insère le type d'entête
   Call MIMEDoc.insertHeader ("content-type", "text/html")
   
   'maintenant, on insère le code HTML
   Call MIMEDoc.insertStream ("<Table>")
   Call MIMEDoc.insertStream ("<TR>")
   Call MIMEDoc.insertStream ("<TD>Ceci est</TD>")
   Call MIMEDoc.insertStream ("<TD>un example</TD>")
   Call MIMEDoc.insertStream ("<TD>de tableau</TD>")
   Call MIMEDoc.insertStream ("</TR>")
   Call MIMEDoc.insertStream ("<TR>")
   Call MIMEDoc.insertStream ("<TD><center>Fait via MIME</center></TD>")   
   Call MIMEDoc.insertStream ("</TR>")
   Call MIMEDoc.insertStream ("</Table>")
   
   'on force le code HTML dans le document
   Call MIMEDoc.linkStream
   Call doc.Save (True, False)

MessagePublié: 17 Mars 2010 à 16:38
par fripouille76
NICKEL....^^

MERCI BEAUCOUP, j'ai un peu adapter Ton code mais ca marche du feu de dieu !!

adieu la génération de fichier Html hihihihihhi :)

MessagePublié: 17 Mars 2010 à 16:39
par Michael DELIQUE
stloje je ne dirais qu'un mot : tips

MessagePublié: 17 Mars 2010 à 17:31
par fripouille76
juste pour information, tous les champs text rich fonctionne pas seulement le Body, suffis juste de cocher l'option "Mime/Html" dans le deuxieme onglet du champ.

ENCORE MERCI

MessagePublié: 18 Mars 2010 à 10:41
par stloje
L'astuce a été ajouté à une autre astuce traitant du HTML lors de l'envoi de courriel