Domino 9 und frühere Versionen > Entwicklung

Wert eines Feldes als Symbol anzeigen

<< < (3/3)

Rob Green:
hab mir mal was gebastelt, was es ansatzweise löst, ohne API.

btw: über Notespeek kann man erkennen, daß er einen
"record-type   Graphic" auslesen kann, da ich mich aber mit den externen Funktionen nicht auskenne, wüßte ich nicht, wie man á la NotesPeek an diese Info herankommt, ob eine importierte Grafik vorliegt.

Daher ein anderer Weg:

--- Code: ---Dim workspace As New NotesUIWorkspace
   Dim uidoc As NotesUIDocument
   Set uidoc = workspace.CurrentDocument
   Dim doc As NotesDocument   
   Set doc = uidoc.Document
   Dim rtitem As Variant
   Dim plainText As String
   Dim fileNum As Integer
   Dim laenge As Integer
   Dim laenge1 As Integer
   
   Set rtitem = doc.GetFirstItem( "Body" )
   If ( rtitem.Type = RICHTEXT ) Then
      plainText = rtitem.GetFormattedText( False, 0 )
      laenge = Len(plainText$)
      laenge1 = rtitem.valuelength
   End If      

--- Ende Code ---

Entscheidend ist der zu-Fuß-Ansatz:
laenge = Len(plainText$)
laenge1 = rtitem.valuelength

"laenge" gibt mir nur die Länge des Textes an, ohne Anhänge und andere embedded Objects.

"lange1" gibt mir den Size vom RichText an, ohne Anhänge und andere embedded Objects, aber mit Bildern (lt. Help: the number of bytes in the database used to store the item's values. This number includes internal overhead)

Aufgrund des "internal overhead" ist

-bei einem eingebenen String von 15 Zeichen
laenge = 15
laenge1 = 112

-bei einem eingebenen String von 30 Zeichen
laenge = 30
laenge1 = 126

-bei einem eingebenen String von 60 Zeichen
laenge = 60
laenge1 = 156

Importiert man nun in das "60 Zeichen"-Beispiel ein Bild von der Größe 13.619 Byte (jpeg) ergeben sich folgende Werte:

laenge = 60 (vorher: 60 byte)
laenge1 = 13860 (vorher: 156 byte)

btw: das Bild scheint einen weiteren, kleinen Zusatz-Overhead von zusätzlichen 85 Byte zu produzieren, was nicht überraschen mag: laenge1_vorher(156)+bild(13.619)=13.775byte
Differenz: 13.860byte angezeigte ValueLength-13.775 rechnerisch=85 Byte overhead (hängt sicher davon ab, wie Notes intern das jpeg abspeichert bzgl. Farbtiefe etc...)

-bei einem eingebenen String von 60 Zeichen und 1 Grafik von 13.619 byte und 1 Tabelle 1x1 ohne Text:
laenge = 64 (vorher 60 byte, +4 byte)
laenge1 = 14140 (vorher 13.860 byte, +280 byte)

-bei einem eingebenen String von 60 Zeichen und 1 Grafik von 13.619 byte und 1 Tabelle 2x2 ohne Text:
laenge = 68 (vorher 64 byte, +4 byte)
laenge1 = 14318 (vorher 14.140 byte, +178 byte)


Und was soll nun das Ganze?
Anhand des Vergleichs von der Länge des reinen Textes zu ValueLength könnte man logisch darauf zurückschließen, daß im RT ein Image vorliegen könnte. Bzw. mehrere, daß weiß man natürlich nicht. Man muß das Verfahren ins QuerySave hängen zB und kann darüber ein Flag in einem versteckten Feld setzen, daß anzeigt, ob wahrscheinlich importierte Bilder vorliegen.

Anhänge und Embedded Objects spielen hierbei dennoch eine Rolle. Lt. Hilfe filtert ValueLength solche Objekte bei der Messung aus. Stimmt aber nicht ganz, da zB ein eingebettes Element mit Icon in einem meiner Tests ValueLength dennoch erhöht hat, und zwar um ca. 6000 Byte. Aber das Problem kann man sicherlich umgehen, indem man die Anzahl der EmbeddedObjects auszählt und dadurch ValueLength um einen gewissen Faktor bereinigt.

Ein weiterer, gangbarer Weg wäre, über eine Schleife per item.size Methode sämtliche Items des Docs auszulesen, um zuverlässig die Gesamtgröße des Docs zu haben, abzgl. aller Attachements und anderen Embedded Objects. Vergleicht man dann den Wert von GetformattedText zur Gesamtgröße abzgl. aller Item.Sizes, sollte es auch gehen.

Letztlich?
Weiß nicht, ob sich dieser ganze Schmodder lohnt, besser wäre es, mit eine API C++ Methode das ganze auszulesen, so wie es das Midas Tool macht. Denn eines dabei ist n.n. berücksichtigt: wenn man den Text im RichText formatiert, kommen natürliuch weitere Bytes hinzu. Irgendwann wird der Abstand von Getformatted zu ValueLength so groß, daß man fälschlicherweise annehmen würde, daß Bilde im RT importiert sind.

wflamme:
Wenn Du Grafiken <64k in Deinem RichText hast, kannst Du die direkt in einem View anzeigen lassen. Ein ganz übler Hack - die RTF-Daten werden mit dem IsSummary gewissermaßen in den Bereich gezwungen, auf den Notes unmittelbar im View zugreifen kann
 ;D


How to show an image resource in a column of a Notes view

1.In the PostSave Event of the form gets the RichText Item
and sets the IsSummary Value to true (normally false with
RichText Items). Here in the example the form contain the
rich text field name "Picture"

Sub Postsave(Source As Notesuidocument)
       Dim doc As NotesDocument
       Dim item As NotesItem
       Set doc = Source.Document
       Set item = doc.GetFirstItem("Picture")
       item.IsSummary = True
       Call doc.Save(False,True)
End Sub

2.Compose the Form.
3.Insert an image resource in a rich text field.
(You can do it from the menu as create/Image Resouce)
4.Save the document.
5. Now Create a view for the specific form and map the Rich
text field "Picture" to the first column and don't forget
to tick the column property  "Display value as Icons".
6.Now you can view your image in the first column of the
view.

Rob Green:
soweit ich es verstanden habe betrifft das doch "lediglich" Image Ressourcen. Ist zwar ein wirklich gutes Hidden Feature, doch hast Du eine Idee, wie man einkopierte Bilder erkennt?

Navigation

[0] Themen-Index

[*] Vorherige Sete

Zur normalen Ansicht wechseln