Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: maiko am 23.11.04 - 14:37:30

Titel: Rich Text Lite abfragen
Beitrag von: maiko am 23.11.04 - 14:37:30
Hi,

hat jemand eine Möglichkeit parat um den Inhalt von Rich Text Lite feldern abzufragen, also nur ob was drin ist oder ob die leer sind. In meinem Fall sind das Grafiken und ich muss wissen ob eine drin ist, oder nicht?

Ich habe leider keien Moeglichkeit gefunden ...

Danke im voraus

Maiko
Titel: Re: Rich Text Lite abfragen
Beitrag von: TMC am 23.11.04 - 22:32:31
Ich muss gestehen noch nie mit Richtext Lite gearbeitet zu haben.

Aber würde da nicht sowas gehen?

Set rtitm = doc.GetFirstItem("RichtextLiteName")
If rtitm.ValueLength = 0 Then Msgbox "Möööööp. Das Feld ist leer."


Titel: Re: Rich Text Lite abfragen
Beitrag von: Semeaphoros am 23.11.04 - 22:42:16
So ähnlich geht das, aber, RichtText hat auch wenn es leer ist eine Länge > 0, diese "Nulllinie" ist aber von Version zu Version höher, so dass es nicht ganz einfach ist, festzustellen, ob Richtext leer ist oder nicht. Ich nehme mal an, dass RTLight (nicht zu verwechseln mit was anderem :) ) sich da nicht ander verhält wie RT "Full"
Titel: Re: Rich Text Lite abfragen
Beitrag von: TMC am 23.11.04 - 22:48:11
Da hast Du wohl vollkommen Recht, Jens.  :)

Hier in diesem Fall würde wohl reichen, nach Embedded Objects zu suchen, um herauszufinden, ob ein Bild enthalten ist oder nicht. Dazu könnte man noch PlainText auswerten, wenn einen auch Text interessiert.
Titel: Re: Rich Text Lite abfragen
Beitrag von: koehlerbv am 23.11.04 - 22:54:22
BudLight ... äh ... RichTextLite verhält sich im Backend exakt wie RichtText.
Ergo: EmbeddedObjects bringt keinen Bezug zu "Grafiken", insofern damit importierte / einkopierte Bilder handelt.

Dann hilft wirklich nur: Beachten, dass das RTI erst nach dem Speichern "greifbar" ist, sich auf eine Mindestgrösse für das Item einigen (100 Byte oder ein ganz wenig mehr) und nach dem Speichern die Itemgrösse prüfen.

Bernhard
Titel: Re: Rich Text Lite abfragen
Beitrag von: TMC am 23.11.04 - 23:03:40
Ahh, natürlich, Bernhard, wenn es importierte Bilder sind, dann hat das mit embedded Objects keinen Zweck. Danke für den Hinweis.

Spätestens jetzt sind wir wieder so weit: wir müssen im Detail wissen wie die Randbedingungen sind  :)
Werden nämlich auch irgendwelche Blind-Gifs mit wenigen Bytes importiert, dann kann das ganze etwas schwierig werden, sind es aber z.B. Digitalkamera-Fotos, dann kann man mit einer Größe von etwa ein paar Hundert Bytes sicherlich das gut abprüfen.
Titel: Re: Rich Text Lite abfragen
Beitrag von: koehlerbv am 23.11.04 - 23:42:21
Genau, auf die Rahmenbedingungen kommt es an. Ein "leeres" RTF hat beispielsweise in einer DB, in der ein RTF ohne weitere Angaben angelegt wurde, 96 Byte (5.0.8), 94 Byte in R6.5. Ist nur ein einziger Punkt (als Character) im RTF, sind es 104 Byte in R6.5, und 96 in R5.
Im Mail-File sind es allerdings bei R5 und R6 im Body-RTF mehr als 150 Byte, die ein leeres Body-Feld enthält.

Man muss sich dabei auch absolut darüber im Klaren sein, dass RTF keinen Vergleich zu anderen Feldtypen erlauben - das ist eine völlige andere Welt mit extrem mehr Angaben, die da gespeichert werden. Wäre eigentlich einen BP-Artikel wert, wobei dieser sehr lang werden müsste.

Bernhard
Titel: Re: Rich Text Lite abfragen
Beitrag von: maiko am 24.11.04 - 08:17:35
Hi,

schoen das Ihr darueber disktutiert.
Es geht um einen Webauftritt und dazu ein kleines CMS System. Die Redakteure koennen selbst in eine Rich Text Lite Feld Bilder/Grafiken einfuegen. Diese sind zwischen 1KB und 20 KB gross. Also wird die ganze Sache schwierig, oder?

Was ich eben vermeiden moechte ist, das der Redakteur mittels Checkbox sagen muss, der Artikel hat ein Bild oder nicht. Ich wuerde das gerne automatisieren.

Gruss

Maiko
Titel: Re: Rich Text Lite abfragen
Beitrag von: TMC am 24.11.04 - 19:46:50
Die Redakteure koennen selbst in eine Rich Text Lite Feld Bilder/Grafiken einfuegen. Diese sind zwischen 1KB und 20 KB gross. Also wird die ganze Sache schwierig, oder?

Na ja, wenn es nicht recht viel kleiner als 1 KB wird, könntest Du z.B. auf 500 Bytes abfragen. Ich denke dies wäre da ein guter Wert. Evtl. noch etwas runter....

Matthias
Titel: Re: Rich Text Lite abfragen
Beitrag von: Semeaphoros am 26.11.04 - 17:26:39
Was ich zuletzt gesehen habe, liegen die höchsten Werte bei ca. 200KB für leere Felder, heisst, mit 500KB als Grenzwert liegt man in jedem Fall sicher.

*edit* siehe unbedingt die Korrektur hier untendran von Matthias
Titel: Re: Rich Text Lite abfragen
Beitrag von: TMC am 26.11.04 - 17:29:42
Was ich zuletzt gesehen habe, liegen die höchsten Werte bei ca. 200KB für leere Felder, heisst, mit 500KB als Grenzwert liegt man in jedem Fall sicher.

Du meinst sicher Bytes statt KB, Jens  :)  ;D
Titel: Re: Rich Text Lite abfragen
Beitrag von: Semeaphoros am 26.11.04 - 18:00:01
Du hast natürlich völlig richtig .... danke für die Korrektur   ;D
Titel: Re: Rich Text Lite abfragen
Beitrag von: Fehno am 30.11.05 - 16:24:53
Hallo ! Ich bin heute auf das gleiche Problem gestossen: Ich will wissen ob der User einen Datei angehängt hat oder nicht. Eure Lösung finde ich einfach zu kompliziert.

Kann ich nicht einfach über @If(@Attachments; "Ja"; "Nein") das ganze abfragen ? Bei mir funktioniert das einwandfrei...

Dies unter der Vorgabe, dass ich nur einen Anhang je Dokument machen kann, was bei mir der Fall ist.
Titel: Re: Rich Text Lite abfragen
Beitrag von: koehlerbv am 30.11.05 - 16:46:40
Die Frage war, ob das RTF irgendetwas enthält und nicht so simpel, ob dort ein Attachment eingebunden ist.

Bernhard
Titel: Re: Rich Text Lite abfragen
Beitrag von: Christian Huber am 30.11.05 - 23:20:59
Hallo,

Kleiner Auszug aus Contact - Maileingangsverwaltung. Hat bis dato immer funktioniert.
(5/6/7). Geht nicht bei verschlüsselten Feldern, da braucht man dann ........
 
Die Sizemethode ist einfach zu unsicher.

Einfach kleine Funktion drausbasteln mit Pointer auf doc und Prüffeldname.

Sub Initialize
   
   Dim session   As New NotesSession
   Dim doc      As NotesDocument
   Dim rtitem   As Variant
   Dim iUsed   As Integer
   Dim pText   As String
   
   On Error Goto LabErr
   
   iUsed = 0
   Set doc = session.DocumentContext
   
   Set rtitem = doc.GetFirstItem( "HGInhalt" )   '* Prüffeld -> austauschen
   If Not rtItem Is Nothing Then
      If (rtitem.Type = RICHTEXT ) Then
         On Error Goto LabNoEmbedd
         Forall o In rtitem.EmbeddedObjects
            If ( o.Type = EMBED_ATTACHMENT ) Then
               iUsed = 1   '* RT ist belegt
               Exit Forall
            End If
         End Forall
LabNoEmbedd:
                       Err = 0
         On Error Goto LabErr
      End If
      
      If iUsed = 0 Then '* Nur prüfen, wenn keine Anhänge
         pText = rtitem.GetFormattedText (False, 0)
         If Trim (pText) <> "" Then
            iUsed = 2
         End If
      End If
   End If
   
   Select Case iUsed
   Case 0
      Msgbox "das Richtextfeld ist leer"
   Case 1
      Msgbox "das Richtextfeld beinhaltet Dateianhänge"
   Case 2
      Msgbox "das Richtextfeld beinhaltet Text"
   End Select
   
LabOk:
   Exit Sub
   
LabErr:
   Print Error (Err), Erl
   Exit Sub
End Sub
Titel: Re: Rich Text Lite abfragen
Beitrag von: koehlerbv am 30.11.05 - 23:37:23
Hallo Christian,

kehren wir doch zur Ausgangsfrage zurück: Es ging darum, ob "irgendwas" (in diesem Fall eine Grafik) in einem RTI steckt. Einigermassen sauber lässt sich gerade diese Frage nur via API oder DXL-Export und -Analyse (ab R6) lösen.
Dein Code prüft auch "nur" auf Attachments oder vorhandene Buchstaben (wenn ich jetzt nichts übersehen habe), aber nicht auf weitere mögliche Elemente.

Bernhard
Titel: Re: Rich Text Lite abfragen
Beitrag von: TMC am 30.11.05 - 23:45:39
Christian, wie prüfst Du da auf Bilder ab, die "reingepastet" sind?

AFAIK bekommst Du diese nicht über die EmbeddedObjects Property.

In solchen Fällen prüfe ich mehrere Schritte:
 - gibt es das Item überhaupt? (If Item Is Nothing Then ....)
 - Enthält das Item Text (If Len(Item.Text) > 0 Then ....)
 - Handelt es sich überhaupt um ein Richtext-Item? (If Not (Item.Type = RICHTEXT)
 - Falls Richtext: ValueLength Property abfragen. Das ist jetzt der heikle Teil, gerade wenn irgendwelche 1 KB - Gif-Bilder enthalten sind......... 300 KB passt meist....
 - Gibt es Embedded Objects? (If Not Isempty(Item.EmbeddedObjects) .....)

IMHO bekommt man das mit LotusScript nicht besser in den Griff.
In ND6 natürlich per DXL, keine Frage, ist aber ein Performance-Issue, kann also sehr lange dauern große Notes-Dokumente mal schnell in einen Stream zu laden, dort das RT-Feld zu prüfen etc......
Titel: Re: Rich Text Lite abfragen
Beitrag von: Christian Huber am 02.12.05 - 07:26:24
Hallo,

Ihr habt beide recht. Wenn man Beispielcode einpastet, sollte man halt alles
komplett reinstellen. Hatte ja geschrieben, die size-methode ist zu unsicher.
Gehört natürlich trotzdem zur Grundprüfung.

  - ob's ein RT-Feld ist (z.B. habe ich die Erfahrung unter Domino 6 gemacht,
    das das Bodyfeld im Mail teilweise als Textfeld und nicht als RT-Feld angelegt
    wird (möglicherweise Bug)
  - ob's mehrere Instanzen hierzu gibt
  - ob das Feld größer als 94 Byte (V5) bzw. 102 Byte (V6)

Was ich nicht scanne, wären reine Steuerzeichen, aber die interessieren mich
auch nicht.

Hab bis jetzt eigentlich alles damit erwischt und das Abprüfen ist zeitlich
nicht spürbar.

Christian