Autor Thema: Überprüfung ob das RT-Feld nicht leer ist.  (Gelesen 15386 mal)

Offline Milamber

  • Junior Mitglied
  • **
  • Beiträge: 66
  • Geschlecht: Männlich
Re: Überprüfung ob das RT-Feld nicht leer ist.
« Antwort #20 am: 18.02.09 - 16:17:55 »
So kompliziert muss man es meiner Meinung nach nicht machen.
im QuerySave müsste es folgender code "tun"
call Source.refresh(true) ' holt den Richtext ins Backend
if Source.document.body.values = "" then ' leer im Sinne von "kein Text"
  continue = false
  msgbox "Bitte füllen Sie das Feld aus"
end if

Roland, das tut es bekanntermassen nicht (zuverlässig). Ausserdem bist Du da wieder nur bei Text als zu überprüfender "Masse".

Bernhard

Wüßte auch gerne unter welchen Umständen es nicht funktionieren könnte. Benutze das des öfteren auch.
Danke
Hristos Fasoulas
Nürnberg - Erde

Administration/Entwicklung ND

Offline TRO

  • Senior Mitglied
  • ****
  • Beiträge: 296
Re: Überprüfung ob das RT-Feld nicht leer ist.
« Antwort #21 am: 18.02.09 - 20:03:44 »
Weil bei Source.Refresh(True) zwar auch das RTF ins BackEnd gepusht wird, aber alle Aktionen auf RichTextItems laufen quasi asynchron. Erst wenn man rtitem.Update auf alle RTItems ausgeführt hat, kann man sicher sein, dass auch wirklich alle "pending operations on RichTextItems" ausgeführt sind.


Thomas

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: Überprüfung ob das RT-Feld nicht leer ist.
« Antwort #22 am: 19.02.09 - 08:50:58 »
Hmm, deine Argumentation klingt zwar logisch, dennoch konnten wir noch keine annormalitäten feststellen. (oder es ist niemand aufgefallen)

Bringt es denn etwas, wenn ich rtitem.update aufrufe (das geschieht ja eigentlich im Backend)

Was wäre denn z.B. eine asynchrone Aktion, bei der Probleme zu erwarten sind?
Es geht um den konkreten Fall, dass im querySave "uidoc.refresh(true)" aufgerufen wird, damit ich im Backend GENAU das RTitem habe, welches anschließend auf der Platte landet.

Gruß
Roland
Roland Praml

IBM Certified Application Developer - Lotus Notes and Domino 8
Ich verwende das Foconis Object Framework

Offline DAU-in

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.129
  • Geschlecht: Weiblich
  • - unterwegs -
Re: Überprüfung ob das RT-Feld nicht leer ist.
« Antwort #23 am: 19.02.09 - 10:18:50 »
Hmm, deine Argumentation klingt zwar logisch, dennoch konnten wir noch keine annormalitäten feststellen. (oder es ist niemand aufgefallen)

Das kommt manchmal unverhofft.  Mein Kollege hat einmal einen Agenten geschrieben, der Richtextfelder manipuliert hat.
Er hat ihn auch getestet.
Im Ernstfall ging es dann die ersten 11000 Dokumente gut, bei den letzten 5000 fehlten dann alle Attachments. Und aufgefallen ist es nicht sofort, sondern nebenbei, als jemand alte Daten brauchte.

Grüsse

Dau-in

mühsam ernährt sich das Eichhörnchen

aktuelle Tätigkeit: Feldschubse

Offline TRO

  • Senior Mitglied
  • ****
  • Beiträge: 296
Re: Überprüfung ob das RT-Feld nicht leer ist.
« Antwort #24 am: 19.02.09 - 10:27:42 »
Hmm, deine Argumentation klingt zwar logisch, dennoch konnten wir noch keine annormalitäten feststellen. (oder es ist niemand aufgefallen)

Bringt es denn etwas, wenn ich rtitem.update aufrufe (das geschieht ja eigentlich im Backend)
Ich hatte manchmal Probleme mit Attachments, die zwar als Icon im wieder im FrontEnd geöffneten Dokument eingebettet waren, aber kein wirklicher Anhang waren.
Nach rtitem.Update traten diese Probs nicht mehr auf ... mag aber auch Versionsabhängig sein.


Was wäre denn z.B. eine asynchrone Aktion, bei der Probleme zu erwarten sind?
Es geht um den konkreten Fall, dass im querySave "uidoc.refresh(true)" aufgerufen wird, damit ich im Backend GENAU das RTitem habe, welches anschließend auf der Platte landet.

Gruß
Roland
Keine Ahnung, was der NotesClient da so alles im Hintergrund/asynchron veranstaltet, um aus dem im FrontEnd gerenderten RichTextFeld dann den CD-Record für das RichTextItem zusammenzubasteln. Das sind jedenfalls keine von außen zu beeinflussenden Sachen.

Thomas

Offline LN4ever

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 505
  • Geschlecht: Männlich
Re: Überprüfung ob das RT-Feld nicht leer ist.
« Antwort #25 am: 23.02.09 - 11:46:34 »
Erst im POSTSAVE-Event bist du wirklich sicher, wenngleich auch ein RTITEM.UPDATE bereits das Meiste abfragbar macht.



Ein Funktion wie die Folgende kann dann helfen:
Kurzversion:
Function IsRTitemEmpty( rtItem As NotesRichTextItem ) As Integer

Dim lEmptyFieldLength As Long
lEmptyFieldLength = 162 ' <<-------- set for your specific rt field!!!!!!

Dim rtnav As NotesRichTextNavigator
Dim elemType(1 To 8) As Long
Dim i As Integer

'---- any text?
If Trim$( rtItem.Text ) <> "" Then
IsRTitemEmpty = False
Exit Function
End If

'--- any detectible elements?
Set rtnav = rtItem.CreateNavigator
elemType(1) = RTELEM_TYPE_DOCLINK
elemType(2) = RTELEM_TYPE_FILEATTACHMENT
elemType(3) = RTELEM_TYPE_OLE
elemType(4) = RTELEM_TYPE_SECTION
elemType(5) = RTELEM_TYPE_TABLE
elemType(6) = RTELEM_TYPE_TABLECELL
elemType(7) = RTELEM_TYPE_TEXTPARAGRAPH
elemType(8) = RTELEM_TYPE_TEXTRUN
For i = 1 To 8 Step 1
If rtnav.FindFirstElement( elemType(i)) Then
IsRTitemEmpty = False
Exit Function
End If
Next

'-- rt field longer than normal?
If rtItem.ValueLength > lEmptyFieldLength Then
IsRTitemEmpty = False
Exit Function
End If

IsRTitemEmpty = True

End Function


Langversion:
Function IsRTEmpty(UIDoc As NotesUIDocument, RTName As String)
   Dim Doc As NotesDocument
   Dim RTItem As NotesRichTextItem
   IsRTEmpty = True
   Set doc = uidoc.Document
   
   'Push RichText Field Changes to Back End
   Call uidoc.Refresh(True)
   
   Set RTItem = Doc.GetFirstItem(RTName)
   
   'Check For the presence of Text. If Found Exit Validation and display the text contents.
   Dim Text As String
   Text = RTItem.GetUnformattedText
   
   
   'Now Remove Spaces, Tabs, NewLines from the text and
   'check if there is any text remaining. If Yes, then it means
   'that the field has passed the validation check. Otherwise
   'be sure that there is no text present in the field, and check 
   'for the other possible contents i.e. Attachments etc...
   Dim NonWhiteText As Variant
   Dim Fr As String
   Fr={@replacesubstring("}+Text+{";@Char(9):@Char(10):@Char(13):@Char(32) ;"")}
   NonWhiteText = Evaluate(Fr)
   
   If NonWhiteText(0) <> "" Then
      'Means there are some Non White Space characters present in the field.
      IsRTEmpty = False
      Exit Function
   End If
   
   Dim Nav As NotesRichTextNavigator
   Set Nav = RTItem.CreateNavigator
   'Check for the presence of table
   If Nav.FindFirstElement(RTELEM_TYPE_TABLE ) Then
      IsRTEmpty = False
      Exit Function
   End If
   'Check for the presence of Doc Link/Db Link
   If Nav.FindFirstElement(RTELEM_TYPE_DOCLINK ) Then
      IsRTEmpty = False
      Exit Function
   End If
   'Check for the presence of File Attachment
   If Nav.FindFirstElement(RTELEM_TYPE_FILEATTACHMENT) Then
      IsRTEmpty = False
      Exit Function
   End If
   'Check for the presence of OLE Object
   If Nav.FindFirstElement(RTELEM_TYPE_OLE ) Then
      IsRTEmpty = False
      Exit Function
   End If
   'Check for the presence of Section
   If Nav.FindFirstElement(RTELEM_TYPE_SECTION ) Then
      IsRTEmpty = False
      Exit Function
   End If
   
   'Check For Pasted Images & Buttons
   Dim DXLExp As NotesDXLExporter
   Dim Parser As NotesDOMParser
   Dim MainNode As NotesDOMDocumentNode   
   Dim RTItems  As notesDOMNodeList
   Dim RTNode As NotesDOMElementNode
   Dim RTItemNode As NotesDOMElementNode
   Dim PictureList As NotesDOMNodeList
   Dim ButtonList As NotesDOMNodeList
   
   Dim j As Integer
   'Initialise Parser
   Set Parser=session.CreateDOMParser
   Set DXLExp = Session.CreateDXLExporter(Doc,Parser)
   DXLExp.Process
   
   Set MainNode = Parser.Document
   ' Get all Rich Text Fields
   Set RTItems = MainNode.GetElementsByTagName( "richtext" )
   
   For j = 1 To RTItems.NumberOfEntries
      Set  RTNode = RTItems.GetItem( j )
      Set RTItemNode = RTNode.ParentNode
      If Lcase(RTItemNode.GetAttribute("name")) = Lcase(RTName) Then
         'Search For Picture Node
         Set PictureList = RTItemNode.GetElementsByTagName("picture")
         If PictureList.NumberOfEntries > 0 Then
            IsRTEmpty = False
            Exit Function
         End If
         ‘Search for Buttons
         Set ButtonList = RTItemNode.GetElementsByTagName("button")
         If ButtonList.NumberOfEntries > 0 Then
            IsRTEmpty = False
            Exit Function
         End If
      End If
   Next
      
End Function

Gruß

Norbert
Situs vilate in isse tabernit.

samWare

  • Gast
Re: Überprüfung ob das RT-Feld nicht leer ist.
« Antwort #26 am: 23.02.09 - 17:00:51 »
@Bernhard und Leo: Muss das sein dass Ihr euch hier so "battelt"  ???  lieber ->  :knuddel: oder  :love:

nur @Leo: Du hast bestimmt kein Impressum oder?! Muss man doch glaubich haben wenn man Besitzer einer eigenen HP ist :) (ps: ich hab jetzt nicht nachgesehen, also sry wenn du eins hast)
« Letzte Änderung: 23.02.09 - 17:03:03 von samWare »

Offline guesswho

  • Senior Mitglied
  • ****
  • Beiträge: 291
Re: Überprüfung ob das RT-Feld nicht leer ist.
« Antwort #27 am: 23.02.09 - 18:15:57 »
@samware: Impressumspflicht gilt in DuggschDi-Land (bislang...) nur für gewerbliche Sites, ob Leo eine solche betreibt  ???

Jo
5 Server 9.x auf W2K3/W2K8
ca. 550 Clients: 9.x auf Win7
Notes Traveler
iQ.Suite
BCC Charon 4
panagenda Marvel Client
BES 10/12 und viele Blackberrys
paar iPad und iPhones
Teamstudio

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Überprüfung ob das RT-Feld nicht leer ist.
« Antwort #28 am: 23.02.09 - 18:36:21 »
Ich denke, wir debattieren hier nicht die entsprechende deutsche Gesetzeslage oder auch nur möglichen Ärger, den man sich einhandeln kann.

@Sam: Leo und ich haben hier etwas überhitzig diskutiert. Nicht mehr und nicht weniger. Du wirst uns hier schon wieder im flachsenden Gleichklang erleben. Stimmts, Leo?

Bernhard

Offline Bruce Willis

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.002
  • Geschlecht: Männlich
  • Wer nicht wagt...
Re: Überprüfung ob das RT-Feld nicht leer ist.
« Antwort #29 am: 23.02.09 - 19:47:05 »
Hallo Norbert,

Erst im POSTSAVE-Event ...


Vielen Dank für Deine ausführliche Antwort mit den Beispielen!

Schade, dass ich Deine Vorschläge in meinem Fall nicht verwenden kann, da die Überprüfung vor dem Speichern per Button erfolgen muss.

Gruß
Leo
nobody is perfect but i'm pretty close 

Offline Bruce Willis

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.002
  • Geschlecht: Männlich
  • Wer nicht wagt...
Re: Überprüfung ob das RT-Feld nicht leer ist.
« Antwort #30 am: 23.02.09 - 19:50:46 »
Hallo samWare und guesswho,

Danke für das freundliche Feedback!

Gruß
Leo
nobody is perfect but i'm pretty close 

Offline Bruce Willis

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.002
  • Geschlecht: Männlich
  • Wer nicht wagt...
Re: Überprüfung ob das RT-Feld nicht leer ist.
« Antwort #31 am: 23.02.09 - 20:13:15 »
@Sam: Leo und ich haben hier etwas überhitzig diskutiert.


Leider. :(


Du wirst uns hier schon wieder im flachsenden Gleichklang erleben. Stimmts, Leo?

So ist es, Bernhard.  ;)

Gruß
Leo
nobody is perfect but i'm pretty close 

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz