Domino 9 und frühere Versionen > ND6: Entwicklung
Grafiken in Rich Text Feldern per URL in HTML direkt einbinden
(1/1)
Tode:
hier gab es mal einen Thread zu R5 zu diesem Thema mit exakt diesem Titel.
Essenz: Eingefügte Bilder lassen sich nur über ein Offset direkt ansprechen, dieses Offset kann aber nicht manuell berechnet werden.
Hat sich hier irgendwas in die Richtung getan ?
Die Hilfe sieht immer noch aus wie zu R5- Zeiten und auch im LDD oder in der KB habe ich nix gefunden.
Hat inzwischen jemand einen Workaround gefunden, ohne das Richtextfeld als Mime zu speichern ?
Gruß
Tode
Ayhan:
Hi Tode,
ich kenne den Beitrag nicht, aber das Problem dafür umso mehr.
Ich habe folgendes gemacht:
Das Feld bleibt als RTF. Ich habe eine neue Ansicht "webtmp" + eine eigene Webmaske (angegeben als FormFormula in der Ansicht "webtmp"). Die Webmaske enthält nur das RTF-Feld, die Option "Seiteninhalt als HTML..." ist aktiviert (ich kenne den Begriff grad nicht auswendig, aber das ist die Option, bei dem Domino den Standard-HTML-Header in einer Webmaske/-seite nicht ausgibt).
Beim Speichern des Dokumentes öffne ich das aktuelle Dokument (über die Ansicht webtmp) über Script + perweb.nsf (es wird dadurch ein Document instanziert), danach greife ich auf das BODY-Feld zu (hier steht der für diese Seite generierte HTML-Quelltext). Danach kannst über String-Operationen die Pfade der Bilder parsen.
Ich bin grad nicht im Office, aber wenn Intresse besteht, kann ich dir mal einpaar Codeschnipsel posten.
Der Nachteil:
Das funktioniert leider nur in Umgebungen mit Zugriff auf das Netzwerk bzw. Internet. Eine lokale Lösung kenne ich selber nicht.
Vielleicht hilfts dir ja trotzdem.
Tode:
das hört sich doch schon mal sehr gut an...
Verstehe ich das richtig: Beim speichern öffnest Du das Dokument NOCHMAL (neue Instanz) mit neuer Maske und liest dort die Links aus (über Text- Operationen), und schreibst diese dann zurück ins eigentliche Dokument ?
Clever, clever...
Würde mich sehr über ein oder zwei Zeilen Code freuen.
In der Zwischenzeit probiere ich mal selbst kurz, ob ich das hinkriege...
Thanx
Tode
Ayhan:
Hi Tode,
richtig, so mache ich das. Ich öffne das Dokument über den webretriever, dann habe ich den Inhalt des RTFs als HTML und kann dann damit weiter arbeiten.
Hier mal einpaar Codeschnipsel:
--- Code: ---[b]Funktionsaufruf:[/b]
.....
Dim tmpdoc As NotesDocument
Dim serverfinalname As String
Set uidoc= ws.editdocument(True,doc)
Call uidoc.Save
Call uidoc.Close(True)
'Aktuellen Servernamen holen um den HTML-Code zu holen
serverCommonName = serverName.Common
serverfinalname = GetIpAddress(serverCommonName)
finalhtml = contenthtml(s, "http://" & serverfinalname & dbname(0) &"id/" & doc.UniversalID)
'ENDE
If finalhtml = "fehler001" Or finalhtml="fehler002" Then
Goto Fehler
Else
Goto Weiterverarbeiten
End If
[b]Funktion GetIPAdress[/b]
Function GetIPAddress(theserver As String) As String
Dim s As New notessession
Dim pab As notesdatabase
Dim addbooks As Variant
Dim connections As notesview
Dim conDoc As notesdocument
Dim dc As NotesDocumentCollection
Dim count As Integer
Dim tmpback As String
Dim tmp As Variant
addbooks = s.addressbooks
Forall dbs In addbooks
If dbs.isprivateaddressbook Then
If Ucase(dbs.filename) = "NAMES.NSF" Then
Set pab = dbs
If Not pab.isopen Then Call pab.open("", "")
Exit Forall
End If
End If
End Forall
Set connections = pab.getview("($Connections)")
Set dc = connections.GetAllDocumentsByKey("*", True)
If dc.count = 0 Then
GetIpAddress = theserver
Else
Set conDoc = dc.GetFirstDocument
For count = 0 To dc.Count - 1
tmp = Evaluate({@Middle("} & conDoc.Destination(0)& {"; "="; "/")})
tmpback= tmp(0)
If Lcase(tmpback) = Lcase(theserver) Then
GetIpAddress = conDoc.OptionalNetworkAddress(0)
End If
Set conDoc = dc.GetNextDocument(conDoc)
Next
If GetIpAddress = "" Then
GetIpAddress = theserver
End If
End If
End Function
[b]Function ContentHTML:[/b]
Function contenthtml(s As NotesSession, theurl As String) As String
Dim webDb As NotesDatabase
Dim doc As NotesDocument
Dim mime As NotesMIMEEntity
Dim item As NotesItem
Dim url As String
Dim Text As String
Dim i As Integer
Set webDb = New NotesDatabase("","perweb.nsf")
url = theurl
s.ConvertMime = False
For i = 0 To 1 Step 4
Set doc = webDb.GetDocumentByURL(url + "?OpenDocument&date=" + Cstr(Rnd(0)), 1)
Next
If doc Is Nothing Then
Text = "fehler001"
Else
If Not doc.httpstatus(0) = "200" Then
Text = "fehler002"
Else
Set item = doc.GetFirstItem( "Body" )
Set mime = item.GetMimeEntity
Text = mime.ContentAsText
Text = Trim(Text)
End If
End If
s.ConvertMime = True
' In der Webmaske ist der Content der Seite zwischen den Tags "contentofpage" eingeschlossen. StrMiddle ist eine @Middle-Script-Umsetzung
contenthtml = strMiddle(Text, "<contentofpage>", "</contentofpage>")
End Function
--- Ende Code ---
Noch ein Screenshot anbei für die Webmaske. Und wichtig: Der Inhalt des RTF-Feldes in der Erfassungsmaske wird nicht als MIME gespeichert ;)
Hoffe du kannst mit dem Code was anfangen. Wenn ich irgendwo noch eine wichtige Funktion ausgelassen haben sollte, einfach bescheid geben. Viel Erfolg!
Tode:
Schöner Code.... Vielen Dank.
Der Befehl der mir gefehlt hat war "GetDocumentByURL"...
Dass dieser Code quasi eine HTML- Seite in ein Notes- Document verwandelt war mir bisher nicht klar...
Danke nochmal, das hilft mir immens weiter.
Tode
Navigation
[0] Themen-Index
Zur normalen Ansicht wechseln