Domino 9 und frühere Versionen > Entwicklung
prüfen, ob rt-feld gefüllt
koehlerbv:
@Ulrich & @TMC:
Der Code ist nur nicht ganz zuverlässig - ein importiertes Bild schnallt der nämlich nicht. Da gehört noch ein wenig mehr Aufwand betrieben (was aber machbar ist) - es kommt dann immer darauf an: Lohnt das ?
HTH,
Bernhard
eknori:
@Bernhard:
vollkommen richtig.
2 ANsätze:
1) Backend
zusätzlich zu meinen Methoden ( Text drin ?, Attachment drin ? )
könnte man mit rtItem.ValueLength die Größe des RTF prüfen. Hier müsste man aber durch Probieren ermitteln, welche "GrundLänge" denn das RTF hat. In meiner Anwendung sind das 102 Byte.
2) Frontend
mittels uiDoc.SelectAll und einem anschließenden uidoc.DeselectAll
Das DeselectAll erzeugt einen FehlerCode 4407, wenn das Feld leer ist, egal ob kein Text, Attachment oder importiertes Bild nicht da ist ;)
und um auf Klaus' Ursprungsfrage zurückzukommen. In einer Ansicht prüfe ich das mit der Formel @If ( @DocLength > 3000; 17; 0).
Das funktioniert aber nur dann, wenn man sich einigermaßen sicher sein kann, daß die DocLength nicht willkürlich variiert. Ich setze das z.B. in unserer Personaldatenbank ein, um anzuzeigen, ob das Bild für den Firmenausweis schon vorliegt.
Ulrich
klaussal:
... diese formel gibt die länge des textes an, der im rt-feld vorhanden:
@Length(@Abstract( [TextOnly]; 200; ""; "mein-rt-feld-name" ))
hat in einer neuen db gefunzt, in einer bestehenden allerding nicht. jetzt frag mich aber bitte niemand, WARUM ;D
TMC:
Nun war es soweit, dass ich auch solch eine Lösung gebraucht habe.
Ich habe dabei Ulrichs Ansatz 1 mit eingebaut und ein Errorhandling integriert:
--- Code: ---Function IsRichTextEmpty (doc As NotesDocument, strFieldName As String) As Integer
' This function checks if a rich text field is empty
' It returns 1 if the rt-item is empty and 0 if it is not.
'In case of problems: change the value "100" in the line "If rtItem.ValueLength > 100 Then" !
On Error Goto ErrorHandler
Dim iChecker As Integer
Dim rtItem As Variant
Dim iCount As Integer
Dim strPlaintext As String
iCount =0 ' initialize
Set rtItem = doc.GetFirstItem( strFieldName )
'---> ErrorHandling
IsRichTextEmpty = 0 'Default value
If rtItem Is Nothing Then Exit Function 'Does the item exist?
If Not ( rtItem.Type = RICHTEXT ) Then Exit Function 'Is the Item a RT-item?
'<---
'---> Check length of RTitem
If rtItem.ValueLength > 100 Then 'In case of problems: change the value "100" !
iCount=iCount+1
End If
'<---
'---> Check if the rtf includes text or embedded objects
strPlaintext = rtitem.GetFormattedText( False, 0 )
If Len(strPlaintext) < 1 Then
If Isarray(rtitem.EmbeddedObjects) Then
Forall o In rtitem.EmbeddedObjects
iCount=iCount+1
End Forall
End If
End If
'<----
'---> Result
If (iCount + Len(strPlaintext)) < 1 Then
IsRichTextEmpty=1
Else
IsRichTextEmpty=0
End If
'<---
ExitScript:
Exit Function
ErrorHandler:
Msgbox "Error: " & Err & " - " & Error$ & Chr(10) & Chr(10) _
& "Line: " & Erl & Chr(10) _
,48, "Error"
Resume ExitScript
End Function
--- Ende Code ---
animate:
schön.
gibt es einen Grund, warum du der Funktion das NotesDocument-Objekt + Feldnamen übergibts und nicht das Notes(RichText)Item selbst?
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln