Domino 9 und frühere Versionen > ND8: Entwicklung
Größe eines Richtextfeldes (in Bearbeitung) prüfen
ghostmw:
Moin zusammen,
ich bin wieder auf eine spannende Frage gestossen, nämlich folgende:
Kann man ein Richtextfeld, dass in Bearbeitung ist auf Größe validieren?
Voraussetzungen:
Notesclient 8.x oder höher, ein normales Richtextfeld (kein RT-Lite), validiert werden soll die Gesamtgröße, d.h. Attachments, Text und eingefügte Screenshots
Was ich schon probiert habe:
...
dim ws as new NotesUIWorkSpace
dim uiDoc as NotesUIDocument
dim doc as NotesDocument
dim rtItem as NotesRichTextItem
dim lngRichTextSize as Long
dim lngRichTextAttachmentSize as Long
set uiDoc = ws.CurrentDocument
set doc = uiDoc.Document
call uiDoc.Refresh ( true, true, true )
call uiDoc.Reload
set rtItem = doc.getFirstItem ( "body" )
if rtItem is nothing then exit function
lngRichTextSize = rtItem.ValueLength ' ==> liefert aber nur die Größe des ersten RT-Items (es kann ja mehrere geben)
if doc.hasEmbedded then
forall eo in rtItem.EmbeddedObjects
lngRichTextAttachmentSize = lngRichTextAttachmentSize + eo.FileSize
end forall
end if
...
lngRichTextAttachmentSize und lngRichTextSize liefern zusammen die Gesamtgröße des RT-Feldes (fast), solange es wirklich nur ein Richtextfeld gibt).
Auch ein Loop über alle Items (... forall item in doc.items ...) und summieren der Größe des RT-Feldes Body bringt nix, da immer nur ein Body-Feld in der Schleife vorhanden ist.
Irgendwie scheine ich nicht an die benötigen Feldgrößen der Body-Felder 2 ... x zu kommen, sondern immer nur an die Größe des ersten.
Hat jemand noch Vorschläge o. Tips?
Anmerkung:
Wird der Inhalt des Richtextfeldes größer als 64k, werden entsprechend weitere Richtextfelder im Dokument angelegt und der Inhalt geteilt. Das sieht man im Eigenschaftenfenster des Dokuments.
pram:
len(rt.getUnformattedText) + alle Attachments
An Screenshots kommst du aber mit LS nicht ran.
ODER: Du kopierst das RT-Feld in ein neues leeres tempDoc und fragst doc.size ab
Gruß
Roland
eknori:
An die Screenshots kommst du mit LS2CAPI ran. Ist nicht trivial. habe ich auf dem letzten EntwicklerCamp gezeigt. Eine DemoDb mit dem ganzen Code für die RT Bearbeitung findest du hier http://www.eknori.de/2011-02-22/entwicklercamp-session-samples/
Gucke dir die Sachem mit den embedded images an. Das sollte weiterhelfen.
ghostmw:
... schade.
Das mit dem Kopieren in eine leeres und abfragen, probiere ich mal aus.
@eknori: das mit ls2capi schaue ich mir nachher mal an.
Danke erstmal an alle :)
ghostmw:
@eknori:
Die Sample-Datenbank ist gut, leider stecke ich fest.
Zum einen werden meine einfügten Screenshots aus der Zwischenablage nicht als embedded images erkannt, noch gibt es im rtContainer-Objekt eine public Eigenschaft, wo man die Größe rausbekommen kann, alles etwas unbefriedigend.
Bitte nicht falsch verstehen, die Scriptlibs sind richtig gut und können eine gute Basis sein, aber mir hilfts momentan nicht weiter.
Mein Beispielcode ist folgender:
...
Dim s As New NotesSession
Dim db As NotesDatabase
Dim col As NotesDocumentCollection
Dim doc As NotesDocument
Dim ITEM_OBJ As String
Dim result As Variant
Dim img As rtGraphic
Dim ctxDump As New rtContainer
Dim RTI As NotesInlineImage
Set db = s.CurrentDatabase
Set col = db.UnprocessedDocuments
Set doc = col.GetFirstDocument
ITEM_OBJ = "Body"
Set RTI = New NotesInlineImage ( doc, ITEM_OBJ )
Call ctxDump.getRichTextItem(doc, ITEM_OBJ)
Set img = ctxDump.getFirstElement (RT_OBJ_GRAPHIC)
If Not img Is Nothing Then
Do While Not img Is Nothing
Stop
' img.nfilesize ist private, geht nicht
' ... hier sollte die Auslesung folgen
Set img = ctxDump.getNextElement (RT_OBJ_GRAPHIC, img)
Loop
End If
...
Auch gibt es keine Auflistung der Konstanten RT_OBJ_GRAPHIC u.ä.
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln