Das Notes Forum
Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: developperFLY am 04.01.10 - 12:18:26
-
Hallo zusammen, wie kann ich prüfen ob ein Item (Richtextfeld) leer ist.
Also es ist vorhanden, aber es hat keinen Inhalt (kein Bild).
-
Hallo,
Schon mal geshaut, ob in der Klasse "NotesRichTextItem" etwas brauchbares dabei ist?
Andreas
-
das ist gar nicht so einfach.
Du kannst zum einen NotesRichTextItem.getUnformattedText prüfen, ob ein leerer Wert zurück kommt. Dann kann aber immer noch ein Attachment / Bild o.ä. enthalten sein.
Ob ein Attachment/Bild enthalten ist kannst du evtl durch Abfrage von NotesRichTextItem.valueLength fest stellen. Da dieser Wert dann (meistens) > 200 ist.
Wenn du's absolut zuverlässig machen willst, hilft meiner Meinung nur der Weg über DXL oder die C-API.
Gruß
Roland
-
Besten Dank. Ja das Problem hört sich recht simpel an, aber es hat es in sich. :D
Ja ich habe nun Versuche mit ValueLength gemacht, anscheinend, wenn das RichTextFeld leer ist, hat es einen ValueLength von 110 (Long).
Ich glaube das kann ich so lösen. Besten Dank!
-
ob ein Item (Richtextfeld) leer ist.
RT ist niemals leer.
Valuelength ist eine option. Ein "leeres" RTItem hat normalerweise eine Länge von 104 Byte
Setzt sich zusammen aus
02 Byte für den RT Typ
90 Byte für die PabDefinition
04 Byte für die PabReference
08 Byte für den ersten CDTEXT record
Aus der C++ API Help
A rich text item is considered empty if it contains only empty plain text and font and paragraph style information. Note that an empty rich text item does not have zero length, nor does it necessarily even have a fixed length. The simplest case of valid empty rich text consists internally of a CDPABREFERENCE followed by a CDTEXT, but empty rich text may also contain paragraph styles stored in records such as CDPABDEFINITION, CDSTYLENAME, and CDPABHIDE
-
Darüber hatten wir hier schon einiges:
http://atnotes.de/index.php/topic,12104.0.html (http://atnotes.de/index.php/topic,12104.0.html)
http://atnotes.de/index.php/topic,10168.0.html (http://atnotes.de/index.php/topic,10168.0.html)
http://atnotes.de/index.php/topic,10458.0.html (http://atnotes.de/index.php/topic,10458.0.html)
Es gibt hier noch wesentlich mehr, bemühe mal die Forensuche.
Axel
-
Bevor man über das Analysieren des Inhalts sinniert, muss zunächst die Frage geklärt werden: Ist das Dokument mit dem RTI schon gespeichert oder nicht? Wenn es nicht gespeichert ist, sind noch Vorarbeiten zu leisten, damit man überhaupt etwas zum Analysieren hat.
@Ulrich: Ein "leeres" RTI hat mindestens 104 Byte - je nach Gestlatung der Maske können das durchaus auch mehr sein. Ich würde mich generell nicht auf fixe Werte bei einer Prüfung verlassen ausser "grösser als".
Bernhard
-
je nach Gestlatung der Maske können das durchaus auch mehr sein.
Hmm?? inwiefern das denn? Dem Item ist es ziemlich wurscht, was um ihm herum passiert. Auch in der Memo Maske hat das Body Item eine initialie Groesse von 104 byte.
-
Beispiel gefällig? Ist unten angehängt. Die DB stammt noch aus R3-Zeiten (hässlich, aber immer noch seeehr praktisch (für mich)). Und in allen "leeren" RTIs mit dem Namen "Stand" sind es 122 Byte.
Ich suche auch gerne nach anderen Beispielen. Zu R5-Zeiten habe ich das letzte Mal Tests gemacht (und es dann aufgegeben), wie gross denn "leere" RTIs sind - da waren es meistens 109 Byte.
Das RTI ist ein geheimnisvolles Ding ;) (Ist es natürlich nicht, aber es ist eben "anders als andere Kinder")
Bernhard
-
Dann ist das Versionsabhängig und nicht von der Gestaltung der Form beeinflusst.
-
Wenn Du magst, suche ich noch Beispiele heraus, die mit der gleichen Designer-Version erstellt wurden. Abgesehen davon - die Dokumente in dieser DB wurden mit den Client-Versionen 6, 7 und 8 erstellt.
Abgesehen davon steht das ja auch alles in dem Text aus der C++-API-Doku, den Du zitierst hast. Meine Lehre aus den damaligen Tests (das muss schon 1999 oder 2000 gewesen sein - wie die Zeit vergeht ...): "gehe niemals von einem fixen Wert aus!
Bernhard
-
Dann ist das Versionsabhängig und nicht von der Gestaltung der Form beeinflusst.
Ist es nicht so, dass das RT-Item die gerade aktive Hideformel "annimmt" die in der Maske im Abschnitt definiert ist ???
Gruß
Roland
-
Dann ist das Versionsabhängig und nicht von der Gestaltung der Form beeinflusst.
Ist es nicht so, dass das RT-Item die gerade aktive Hideformel "annimmt" die in der Maske im Abschnitt definiert ist Huh
Was aber auf den Aufbau eines "leeren" RT Feldes keinen Einfluss hat.
In der C++ API gibt es eine Property LNRTItem.IsEmpty.
Die macht im Grunde nichts anderes, als die CD Records des Items zu parsen. Wenn nach dem ersten TEXT Record nichts weiter kommt, und der "value" der CDText struct leer ist, dann ist auch das RTItem leer.
Man kann das in LS nachbilden ( habe ich ja schon in einem anderen Thread beschrieben).
Bernhard hat natürlich mit seiner Aussage recht,m dass man sich nicht auf die Länge verlassen kann.
Die kann nur ein Anhaltspunkt sein.
-
Hallo,
ich hatte einmal Prüfungsroutinen hier eingestellt:
http://atnotes.de/index.php/topic,44226.msg284750.html#msg284750
Gruß
Norbert