Autor Thema: prüfen, ob rt-feld gefüllt  (Gelesen 11574 mal)

klaussal

  • Gast
prüfen, ob rt-feld gefüllt
« am: 06.11.03 - 09:25:53 »
moin zusammen,

bin wohl etwas vernagelt heute.

wie prüfe ich per formel, ob in einem richtext-feld etwas eingegeben wurde ?
danke für tipps !

Offline Rob Green

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.651
  • Geschlecht: Männlich
    • Meipor
Re:prüfen, ob rt-feld gefüllt
« Antwort #1 am: 06.11.03 - 09:29:52 »
mit @abstract, such mal im Forum nach der genauen Syntax und Parametern. Abstract wandelt Rich Text Inhalte in Text um. Davon ausgenommen: Anhänge und embedded Objects wie zB ein Image.
Vielleicht verdirbt Geld wirklich den Charakter.
Auf keinen Fall aber macht Mangel an Geld ihn besser.
(John Steinbeck)

Meiporblog: http://www.meipor.de/blog
allg. Unternehmerblog: http://www.m-e-x.de/blog

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re:prüfen, ob rt-feld gefüllt
« Antwort #2 am: 06.11.03 - 09:32:14 »
und über den Platzbedarf (Grösse) des RT-Items, das ist aber allerdings stark versionsabhängig.
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

klaussal

  • Gast
Re:prüfen, ob rt-feld gefüllt
« Antwort #3 am: 06.11.03 - 09:41:53 »
wenn ich ....

Laenge := @Length( @abstract( [Abbrev]; 200; ""; "Linktext999"));

eingebe, erhalte ich immer 11 als rückgabewert. das ist aber die länge von "Linktext999" und nicht die länge des feldinhaltes vom feld "Linktext999". hab ich da den schuss nicht gehört ?   ;D

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re:prüfen, ob rt-feld gefüllt
« Antwort #4 am: 06.11.03 - 09:51:11 »
Sorry, hab übersehen, dass Du Formel gesagt hast, die Grösse des RT-Items steht meines Wissens per Formel nicht zur Verfügung, dazu braucht es Script. @abstract sollte aber doch in der Hilfe beschrieben sein, wie man das bekommt.

Uebrigens, lass mal die Anführungszeichen von Linktext weg, so wie Du das reinschreibst, greifst Du auch nicht auf das Feld zu, sondern effektiv auf den String "Linktext999" selber.
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

klaussal

  • Gast
Re:prüfen, ob rt-feld gefüllt
« Antwort #5 am: 06.11.03 - 09:55:19 »
... aus der hilfe:

Diese Formel kürzt den Inhalt des Feldes "Beschreibung" durch das Entfernen der Vokale.
@Abstract( [DropVowels]:[Abbrev]; 200; ""; "Beschreibung" )

danach muss der feldname in "" stehen. ohne "" passiert übrigens garnix  :'(

das ganze passiert übrigens in einer ansicht. aber das sollte ja wohl nicht den unteschied machen, oder  ???

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re:prüfen, ob rt-feld gefüllt
« Antwort #6 am: 06.11.03 - 10:01:13 »
Das ist es! RT-Felder sind in Views nicht verfügbar, und deshalb nimmt er den Text selber. Du musst das im QuerySave des Documentes machen und in einem normalen Feld ablegen, ob das RT-Feld Inhalt hat oder nicht.

Du hast recht mit der Syntax, liegt daran, dass @Abstract mehrere Felder bearbeiten kann. Danke.
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

klaussal

  • Gast
Re:prüfen, ob rt-feld gefüllt
« Antwort #7 am: 06.11.03 - 10:19:21 »
@semeaphoros,

danke, das war's wohl.  :-* :-* :-*

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re:prüfen, ob rt-feld gefüllt
« Antwort #8 am: 06.11.03 - 10:38:31 »
hab hier mal was in script zusammengestrickt

http://www.eknori.de/tipps/detail.php?nr=256&kategorie=tipps

Ulrich
« Letzte Änderung: 17.04.04 - 19:05:26 von eknori »
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re:prüfen, ob rt-feld gefüllt
« Antwort #9 am: 06.11.03 - 21:23:30 »
@Eknori:
Cool, ich denke das ist eine saubere Lösung. Danke.
Hab mir den Code mal vorsichtshalber in die private Know-how-DB kopiert, man weiss ja nie wann man das mal braucht :-)

TMC
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:prüfen, ob rt-feld gefüllt
« Antwort #10 am: 07.11.03 - 01:26:30 »
@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

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re:prüfen, ob rt-feld gefüllt
« Antwort #11 am: 07.11.03 - 07:11:28 »
@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
« Letzte Änderung: 07.11.03 - 07:15:04 von eknori »
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

klaussal

  • Gast
Re:prüfen, ob rt-feld gefüllt
« Antwort #12 am: 07.11.03 - 08:45:23 »
... 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

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re:prüfen, ob rt-feld gefüllt
« Antwort #13 am: 17.04.04 - 18:57:05 »
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
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline animate

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.540
  • Uh, I'm just gonna go find a cash machine.
    • LA2
Re:prüfen, ob rt-feld gefüllt
« Antwort #14 am: 17.04.04 - 19:42:13 »
schön.

gibt es einen Grund, warum du der Funktion das NotesDocument-Objekt + Feldnamen übergibts und nicht das Notes(RichText)Item selbst?
Thomas

Fortunately, I'm adhering to a pretty strict, uh, drug, uh, regimen to keep my mind, you know, uh, limber.

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re:prüfen, ob rt-feld gefüllt
« Antwort #15 am: 17.04.04 - 19:54:54 »
gibt es einen Grund, warum du der Funktion das NotesDocument-Objekt + Feldnamen übergibts und nicht das Notes(RichText)Item selbst?

Nicht wirklich   ::)

Siehst Du da einen Vorteil?

Die Function rufe ich übrigens über Postsave einer Maske auf und fülle das Feld "IsRTEmpty":
Code
Sub Postsave(Source As Notesuidocument)
   
   Dim doc As NotesDocument
   Dim iEmptyChecker As Integer   
   
   Set doc = Source.Document 
   
   iEmptyChecker = IsRichtextEmpty(doc, "Remarks")
   
   If iEmptyChecker = 1 Then
      doc.IsRTEmpty = 1
      Call doc.save(True,True)
   Else
      doc.IsRTEmpty = 0
      Call doc.save(True,True)
   End If
   
End Sub
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline animate

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.540
  • Uh, I'm just gonna go find a cash machine.
    • LA2
Re:prüfen, ob rt-feld gefüllt
« Antwort #16 am: 17.04.04 - 20:08:02 »
ich sehe nicht direkt einen Vorteil.
Mir erscheint es nur logisch, einer Funktion, die überprüfen soll, ob ein RTFeld leer ist, ein RTFeld zu übergeben.
Thomas

Fortunately, I'm adhering to a pretty strict, uh, drug, uh, regimen to keep my mind, you know, uh, limber.

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re:prüfen, ob rt-feld gefüllt
« Antwort #17 am: 17.04.04 - 20:17:10 »
ich sehe nicht direkt einen Vorteil.
Mir erscheint es nur logisch, einer Funktion, die überprüfen soll, ob ein RTFeld leer ist, ein RTFeld zu übergeben.

Stimmt, das wäre logisch(er).

Andererseits versuche ich, soviel Code wie nur möglich auszulagern. Daher ist es hier ganz einfach bequem, nur das doc und den Feldnamen reinzukippen in die Function - ohne dabei noch irgendwelche items definieren zu müssen Errorhandling in die Hauptprozedur einzubauen (If rtItem Is Nothing, If rtItem.Type = RICHTEXT, etc.).
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:prüfen, ob rt-feld gefüllt
« Antwort #18 am: 18.04.04 - 01:20:39 »
Zitat
soviel Code wie nur möglich auszulagern

Matthias, dann würde ich diese Routine aber für beliebige items ausdehnen und in der function dann u.a. RTIs prüfen. So wäre das universeller.
Wenn es um die Frage geht: Ist das Feld "XYZ" ein RTF, sollte man eher eine eigene Routine ansetzen. Beispiel Memo: Es interessiert ja eher, ob "Body" etwas enthält oder nicht existent ist oder leer ist.

Du verwendest statt True und False 0 und 1. Hältst Du die Integer-Werte für stabiler als die Schlüsselwörter resp. Tokens des Compilers ?

Wie dem auch sei: Dein IsRichTextEmpty ist eine sehr nützliche function  :)

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz