Domino 9 und frühere Versionen > ND8: Entwicklung

Größe eines Richtextfeldes (in Bearbeitung) prüfen

(1/3) > >>

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