Autor Thema: [Gelöst] Formelsprache - Prüfen, of RichTextField leer ist  (Gelesen 6859 mal)

Offline SlyFox

  • Senior Mitglied
  • ****
  • Beiträge: 256
  • Geschlecht: Männlich
Hallo,

ist es irgendwie mit der Formelsprache möglich zu prüfen, ob ein RichTextField leer ist? Wenn Text drin steht, ist das kein Problem, aber wie kann ich das prüfen, wenn z. B. nur eine Datei darin enthalten ist?

Vielen Dank für eure Unterstützung

Christoph
« Letzte Änderung: 05.09.16 - 10:05:45 von SlyFox »
10 x Domino 8.5 EN
2 x Domino 9.0.1 EN
30 x Notes 8.5 DE / EN / FR / IT
220 x Notes 9.0.1 DE / EN / FR / IT

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Formelsprache - Prüfen, of RichTextField leer ist
« Antwort #1 am: 01.09.16 - 16:34:43 »
Dir steht also ausschliesslich nur Formelsprache zur Verfügung? Dann: No way. @AttachmentNames zeigt Dir zwar an, ob "das etwas ist", aber nur auf das Dokument, nicht das RTF bezogen. Und wenn gar ein Inline Image enthalten ist ...

Wenn Du aber beispielsweise einen Agent in Fornemsprache starten kannst und der dann wiederum einen entsprechend geschriebenen Agenten aufrufen kann, dann sieht es schon erheblich freundlicher aus.

Bernhard

Offline SlyFox

  • Senior Mitglied
  • ****
  • Beiträge: 256
  • Geschlecht: Männlich
Re: Formelsprache - Prüfen, of RichTextField leer ist
« Antwort #2 am: 01.09.16 - 16:54:11 »
Hallo Bernhard,

es wäre auch zu einfach gewesen...

Entweder wird eine Datei oder eine Grafik eingefügt. Text steht in der Regel nicht in dem Feld.

Ich werde vor dem Speichern mittels LS prüfen, ob das RTF leer ist. Entsprechend werde ich dann ein verstecktes Feld mit 0 oder 1 füllen, das ich dann wiederum per Formelsprache abrufen kann. Das ist nicht so schön, aber akzeptabel.

Trotzdem danke.
10 x Domino 8.5 EN
2 x Domino 9.0.1 EN
30 x Notes 8.5 DE / EN / FR / IT
220 x Notes 9.0.1 DE / EN / FR / IT

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.718
  • Geschlecht: Männlich
Re: Formelsprache - Prüfen, of RichTextField leer ist
« Antwort #3 am: 01.09.16 - 16:58:01 »
Mit Formelsprache ist das nicht (100%) möglich.
auf OpenNtf habe ich vor Jahren ein Project Cebulon, was die erforderlichen Api Calls fer Win und Linux wrapped. Das lässt sich dann recht einfach einbinden mit ein paar Zeilen LS
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline SlyFox

  • Senior Mitglied
  • ****
  • Beiträge: 256
  • Geschlecht: Männlich
Re: Formelsprache - Prüfen, of RichTextField leer ist
« Antwort #4 am: 01.09.16 - 17:43:18 »
Hallo Ulrich,

ich werde es erst mal mit LS versuchen. Wenn es zu aufwändig wird, werde ich die Änderung ablehnen.

Trotzdem danke.

Viele Grüße

Christoph
10 x Domino 8.5 EN
2 x Domino 9.0.1 EN
30 x Notes 8.5 DE / EN / FR / IT
220 x Notes 9.0.1 DE / EN / FR / IT

Offline Flachmann

  • Senior Mitglied
  • ****
  • Beiträge: 254
  • Geschlecht: Männlich
Re: Formelsprache - Prüfen, of RichTextField leer ist
« Antwort #5 am: 02.09.16 - 09:34:35 »
Ich weiß, dass das keine wirklich Lösung ist, aber vielleicht hilft es schon:  8)

In meinen Fällen war es immer so, dass in diesen "Pflicht-Richtext-Feldern" auch klärender Text eingegeben werden sollte. Ein Dateianhang oder ein Bild alleine war nicht ausreichend.

Es genügte darum zu prüfen, ob überhaupt ein Text enthalten ist. - LotusScript® NotesUIDocument.FieldGetText("RTField") genügt dafür und hat den Charme, dass das Dokument nicht einmal gespeichert sein muss um das RT-Feld zu prüfen.

Wie geschrieben, das ist keine wirkliche 100%-Lösung, weil ein Feld mit Dateianhang, eingefügtem Bild oder Objekt, aber ohne Text, immer leer wäre. Aber für meine Anwendungen hat das bislang immer gepasst. "Pflicht-Richtext-Feldern" hat man ja auch eher selten.

Gruß,
  __________
  _/_
  /lachmann

Offline SlyFox

  • Senior Mitglied
  • ****
  • Beiträge: 256
  • Geschlecht: Männlich
Re: Formelsprache - Prüfen, of RichTextField leer ist
« Antwort #6 am: 02.09.16 - 10:37:32 »
Hallo Lachmann,

in dem RT Feld wird eine Excel-Datei oder direkt ein Screenshot eingefügt, sonst nichts.

Das Feld ist kein Pflichtfeld, aber abhängig davon, ob das Feld einen Wert enthält oder nicht, wird eine bestimmte Aktion ausgeführt.

Gibt es denn keine Möglichkeit, die Größe des RT Feldes auszulesen?

Viele Grüße

Christoph
10 x Domino 8.5 EN
2 x Domino 9.0.1 EN
30 x Notes 8.5 DE / EN / FR / IT
220 x Notes 9.0.1 DE / EN / FR / IT

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Formelsprache - Prüfen, of RichTextField leer ist
« Antwort #7 am: 02.09.16 - 10:59:27 »
Doch, das gibt es natürlich in der Property der Klasse NotesRichTextItem bzw. NotesItem (von dem wird es vererbt). Aber: Dieser Wert steht erst nach der Speicherung des Dokuments zur Verfügung - und ein "leeres" RichTextItem hat abhängig von diversen Rahmenumständen auch unterschiedliche Grössen! Dies muss beachtet werden, sonst kann man die Prüfung auch bleiben lassen.

Bernhard

Offline Flachmann

  • Senior Mitglied
  • ****
  • Beiträge: 254
  • Geschlecht: Männlich
Re: Formelsprache - Prüfen, of RichTextField leer ist
« Antwort #8 am: 02.09.16 - 11:12:06 »
Ok, das war auch nur eine Idee.

So wie Du es brauchst, geht nicht einfach. Wie Bernhard schon schrieb: das Dokument muss erst gespeichert werden, bevor Dir in LotusScript® die RT-Eigenschaften zur Verfügung stehen. Ist leider so und macht das ganze Handling kompliziert.

Vielleicht überlegst Du Dir etwas anderes. Z.B., dass man den das RT-Feld nur anzeigt, wenn ein Schalter vorher gewählt wurde. Dann wird der Weg "mit Anhang" gewählt. Ist natürlich weniger elegant, aber auf jeden Fall einfacher zu handlen.
Gruß,
  __________
  _/_
  /lachmann

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Formelsprache - Prüfen, of RichTextField leer ist
« Antwort #9 am: 02.09.16 - 12:45:26 »
Wenn abhängig von dem Inhalt eine Aktion ausgeführt wird, finde ich es nicht schädlich, wenn das Dokument zuvor gespeichert wurde. Sollte die Aktion z.B. eine Mail mit einem Link auf das Dokument sein, wäre es kontraproduktiv, die vor dem Speichern des Dokuments zu versenden.

Um einen  Dateianhang in dem Richtextfeld zu erkennen, kannst Du die EmbeddedObjekts verwenden

Code
Sub Click(Source As Button)
	Dim workspace As New NotesUIWorkspace
	Dim uidoc As NotesUIDocument
	Set uidoc = workspace.CurrentDocument
	Dim doc As NotesDocument
	Set doc = uidoc.Document
	Dim rtitem As NotesRichTextItem
	Set rtitem = doc.GetFirstItem ("Body")
	Dim flag As Integer
	If Isarray (rtitem.EmbeddedObjects) Then
		flag = True
	End If
	Msgbox Flag
End Sub

Das ist dann schon mal sauber. Für den Screenshot könntest Du, wie schon von Dir erwähnt, rtitem.ValueLength verwenden. Unter der Annahme, dass der Screenshot größer als nur ein paar Pixel ist, kannst Du da ja einen recht großen Wert als Grenze nehmen. In einem Test hatte mein leeres Item eine Länge von 104, mit einem Screenshot des gesamten Bildschirms um die 41000. Da würde ich mir die Größe des leeren Feldes vorab ausgeben lassen und dann vielleicht das Doppelte als Erkennwert verwenden. Natürlich könnte auch jemand nur Text eintragen, dann bekommst Du natürlich auch ein größeres Item.

Eventuell könntest Du noch mit DXL-Export genauer untersuchen, aber da habe ich wenig bis keine Erfahrung mit.

Offline jBubbleBoy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.277
  • Geschlecht: Männlich
Re: Formelsprache - Prüfen, of RichTextField leer ist
« Antwort #10 am: 02.09.16 - 12:49:19 »
Es ginge auch wie folgt:
Code
uiDoc.GotoField("RTFeld")
uiDoc.SelectAll
uiDoc.Copy
Wenn das Feld leer ist kommt der Fehler "Dokumentenbefehl ist nicht verfügbar", bei Inhalt kommt kein Fehler.
« Letzte Änderung: 02.09.16 - 12:52:03 von jBubbleBoy »
Gruss Erik :: Freelancer :: Notes, Java, Web, VBA und DomNav 2.5 / NSE 0.16
--
Nur ein toter Bug, ist ein guter Bug!

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Formelsprache - Prüfen, of RichTextField leer ist
« Antwort #11 am: 02.09.16 - 13:13:44 »
Es ginge auch wie folgt:
Code
uiDoc.GotoField("RTFeld")
uiDoc.SelectAll
uiDoc.Copy
Wenn das Feld leer ist kommt der Fehler "Dokumentenbefehl ist nicht verfügbar", bei Inhalt kommt kein Fehler.

Ja, coole Idee, da kann man dann eine allgemeingültige Function draus machen

Code
Function CheckRTItem (uidoc As NotesUIDocument, feldname As String) As Integer
	On Error Goto Fehler	
	uidoc.GotoField (feldname)
	uidoc.SelectAll
	uidoc.Copy
	uidoc.GotoField (feldname)
	CheckRtitem = True
Fehler:
	Exit Function
End Function

Das zweite GotoField hebt die Auswahl auf, weil sonst durch einen beliebigen Tastendruck der Inhalt überschrieben wird

Code
	Dim workspace As New NotesUIWorkspace
	Dim uidoc As NotesUIDocument
	Set uidoc = workspace.CurrentDocument
	Msgbox CheckRTItem (uidoc, "Body")

Kann man natürlich noch schöner machen, z.B. Überprüfung, ob das uidoc im EditMode ist, aber als Idee sollte das genügen.

Und natürlich wird damit ggf. der aktuelle Inhalt der Zwischenablage überschrieben, ist halt nichts für diejenigen, die meinen, die Zwischenablage sei eine Archivlösung :-X
« Letzte Änderung: 02.09.16 - 13:18:23 von Peter Klett »

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.873
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: Formelsprache - Prüfen, of RichTextField leer ist
« Antwort #12 am: 02.09.16 - 13:27:58 »
Die Idee mit der Funktion ist Cool, ABER: Wenn Du einfach ein "Exit Function" machst, dann gilt der Fehler als nicht gehandelt. Und wenn Du in der aufrufenden Funktion ein ErrorHandling hast, wird dieses den Fehler werfen...

Besser ist dann:
Code
Function CheckRTItem (uidoc As NotesUIDocument, feldname As String) As Integer
	On Error Goto Fehler	
	uidoc.GotoField (feldname)
	uidoc.SelectAll
	uidoc.Copy
	uidoc.GotoField (feldname)
	CheckRtitem = True
EndOfRoutine:
	Exit Function
Fehler:
        Resume EndOfRoutine
End Function

durch das Resume wird der ErrorStatus zurückgesetzt...
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Formelsprache - Prüfen, of RichTextField leer ist
« Antwort #13 am: 02.09.16 - 13:30:36 »
Ah, danke für die Ergänzung. Jetzt weiß ich auch endlich, warum in einer unserer großen Routinen gelegentlich "falsche" Fehlermeldungen auftreten ...

Offline SlyFox

  • Senior Mitglied
  • ****
  • Beiträge: 256
  • Geschlecht: Männlich
Re: Formelsprache - Prüfen, of RichTextField leer ist
« Antwort #14 am: 05.09.16 - 10:05:23 »
Leute,

ist seid genial!

Das wusste ich zwar bereits vorher, aber es sollte auch einmal offen ausgesprochen werden. :-)

Ganz herzlichen Dank

Christoph
10 x Domino 8.5 EN
2 x Domino 9.0.1 EN
30 x Notes 8.5 DE / EN / FR / IT
220 x Notes 9.0.1 DE / EN / FR / IT

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz