Domino 9 und frühere Versionen > Entwicklung

prüfen, ob rt-feld gefüllt

<< < (3/4) > >>

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