Autor Thema: Löschen eines Richtext-Feldes  (Gelesen 7250 mal)

Offline Franci

  • Frischling
  • *
  • Beiträge: 13
  • Geschlecht: Weiblich
Löschen eines Richtext-Feldes
« am: 20.12.06 - 23:17:30 »
Hallo,

habe versucht mit den neuen Scriptfunktionen ein Bodyfeld zu löschen. Leider musste ich feststellen,
das es wohl einen Scriptinternen Fehler gibt, auf den man stößt, wenn die letzten beiden Zeichen des Richtextfeldes crlf sind.

Den Workaround den ich gefunden habe, habe ich versucht in meine Prozedur einzufügen. Zugegebener Maßen, habe ich jedoch nicht ganz verstanden, wie er funktionieren soll, da die Eigenschaft .text vom Richtextfeld nur read-only ist, kann ich die beiden letzten Zeichen nicht einfach abschneiden (wie im gefundenen Workaround vorgeschlagen).

Sub DeleteBodyText(doc As NotesDocument)
   ' Die Prozedur löscht den Inhalt eines Bodyfeldes.
   Dim rtnav As NotesRichTextNavigator
   Dim rtrange As NotesRichTextRange
   Dim body As NotesRichTextItem
   Dim crlf As String
   
   CrLf = Chr$(13) & Chr$(10)
   
   Set body = doc.GetFirstItem("Body")
   ' nötig wg. unten angegebnem Notes-Bug
   'If Right(body.text,2) = CrLf Then
   '   body .text = Left(body.text,2)
   'End If
   Call body.Update()
   Set rtnav = body.CreateNavigator
   If rtnav.FindFirstElement(RTELEM_TYPE_TEXTPARAGRAPH) Then
      Set rtrange = body.CreateRange
      Do
         Call rtrange.SetBegin(rtnav)
         ' Gibt folgede Fehlermeldung im Log aus
 'Restricted operation cannot cross logical boundaries, wenn letzte beiden Zeichen crlf sind
' needed because of error issue mentioned here --> http://atnotes.de/index.php?topic=33526.msg210617#msg210617
         Call rtrange.Remove
         Call doc.Save(True, True, True)
      Loop While rtnav.FindNextElement(RTELEM_TYPE_TEXTPARAGRAPH)
   End If
   
End Sub

Ich habe versucht, den Inhalt des Body-Feld zu löschen, indem ich es  das Feld selbst lösche und wieder neu anlege. Dabei bekomme ich jedoch, wenn ich ein Feld mit Anhang bearbeite ein Problem. Handelt es sich um einen Anhang "unter dem Strich" so wird dieser beim Erzeugen des neuen Richtextfeldes gedoppelt.

Vor dem Löschen des Body-Feldes schreibe ich den Inhalt in eine Datei, die ich  anschließend  wieder an das Dokument anhänge. (Hinter den Text oder unter dem "Strich" am liebsten; bisher hinter den Text im Body-Feld.)

Hat vielleicht jemand eine Idee, wie man das Problem elegant lösen kann.




Offline Thomas Schulte

  • @Notes Preisträger
  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 4.388
  • Geschlecht: Männlich
  • Ich glaub mich tritt ein Pferd
Re: Löschen eines Richtext-Feldes
« Antwort #1 am: 21.12.06 - 08:24:01 »
Die Funktion stammt aus !!HELP!! und passt im Kontext deiner Frage überhaupt nicht.

Das löschen eines Kompletten RTFeldes ist mit Script viel einfacher:
doc.removeitem
oder
item.remove
Thomas Schulte

Collaborative Project Portfolio and Project Management Software

"Aber wo wir jetzt einmal soweit gekommen sind, möchte ich noch nicht aufgeben. Versteh mich recht, aufgeben liegt mir irgendwie nicht."

J.R.R.Tolkien Herr der Ringe, Der Schicksalsberg

OpenNTF Project: !!HELP!! !!SYSTEM!!  !!DRIVER!!

Skype: thomasschulte-kulmbach

Offline Franci

  • Frischling
  • *
  • Beiträge: 13
  • Geschlecht: Weiblich
Re: Löschen eines Richtext-Feldes
« Antwort #2 am: 21.12.06 - 08:59:55 »
Hallo,

da habe ich mich wohl nicht klar genug ausgedrückt. Ich möchte natürlich nicht da gesamte Richtextfeld löschen, sonder nur den Inhalt. Das Richtextfeld möchte ich gerne behalten.

Franci

botschi

  • Gast
Re: Löschen eines Richtext-Feldes
« Antwort #3 am: 21.12.06 - 09:21:13 »
Mit der NotesRichTextItem-Klasse sollte es funktionieren.

Aus der Hilfe:
Dim doc As NotesDocument
Dim rtitem As Variant
'...set value of doc...
Set rtitem = doc.GetFirstItem( "Body" )
If ( rtitem.Type = RICHTEXT ) Then
  Forall o In rtitem.EmbeddedObjects
    If ( o.Type = EMBED_ATTACHMENT ) Then
      Call o.ExtractFile( "c:\samples\" & o.Source )
      Call o.Remove
      Call doc.Save( False, True )
    End If
  End Forall
End If

Offline Franci

  • Frischling
  • *
  • Beiträge: 13
  • Geschlecht: Weiblich
Re: Löschen eines Richtext-Feldes
« Antwort #4 am: 21.12.06 - 09:39:25 »
Das ist leider auch nicht das was ich will, mit der Funktion hänge ich ja nur die Anhänge ab und lösche sie anschließend. Den Body.Text berührt das wenig.

Ich möchte den body.Text (ohne Anhänge) löschen um dann etwas anderes dort hineinzuschreiben. Die Anhänge brauche ich aber noch.

Hatte gedacht http://atnotes.de/index.php?topic=33526.msg210617#msg210617 würde mir weiterhelfen, aber das hat es leider bisher auch nicht.

Franci

Offline Thomas Schulte

  • @Notes Preisträger
  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 4.388
  • Geschlecht: Männlich
  • Ich glaub mich tritt ein Pferd
Re: Löschen eines Richtext-Feldes
« Antwort #5 am: 21.12.06 - 09:56:15 »
Noch einmal. Wozu den Inhalt eines Feldes löschen und das Feld anschließend wieder anlegen? Beim nächsten manuellen Speichern taucht das von ganz alleine wieder auf.

Und wenn du es partout direkt haben willst.

Was so sinnvoll wie ein Kropf ist.

Dann machst du halt ein set item = new notesitem (doc,name,Value,Type) nach dem Remove
Thomas Schulte

Collaborative Project Portfolio and Project Management Software

"Aber wo wir jetzt einmal soweit gekommen sind, möchte ich noch nicht aufgeben. Versteh mich recht, aufgeben liegt mir irgendwie nicht."

J.R.R.Tolkien Herr der Ringe, Der Schicksalsberg

OpenNTF Project: !!HELP!! !!SYSTEM!!  !!DRIVER!!

Skype: thomasschulte-kulmbach

Offline Thomas Schulte

  • @Notes Preisträger
  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 4.388
  • Geschlecht: Männlich
  • Ich glaub mich tritt ein Pferd
Re: Löschen eines Richtext-Feldes
« Antwort #6 am: 21.12.06 - 10:06:15 »
Mit deinem letzten Post wird erst klarer was du willst.

Geh über ein Feld zum zwischenspeichern. Mach ein eigenes Doc object auf. Erstelle da ein RTFeld. Kopiere deine Anhänge rein. Schmeis das alte RTFeld weg und erstelle ein neues aus dem wegkopierten.

Ach les ganz einfach was Shane Hollis hier dazu zu sagen hatten.
Thomas Schulte

Collaborative Project Portfolio and Project Management Software

"Aber wo wir jetzt einmal soweit gekommen sind, möchte ich noch nicht aufgeben. Versteh mich recht, aufgeben liegt mir irgendwie nicht."

J.R.R.Tolkien Herr der Ringe, Der Schicksalsberg

OpenNTF Project: !!HELP!! !!SYSTEM!!  !!DRIVER!!

Skype: thomasschulte-kulmbach

Offline Franci

  • Frischling
  • *
  • Beiträge: 13
  • Geschlecht: Weiblich
Re: Löschen eines Richtext-Feldes
« Antwort #7 am: 21.12.06 - 10:45:13 »
Hallo Thomas,

so oder so ähnlich mache ich es zur Zeit tatsächlich, dabei habe ich leider folgendes Problem:

Wenn ich ein Dokument habe mit einem Anhang unter dem Strich (also nicht im Body-Feld) und ich ein
neues RichText-Feld erzeuge wird der Anhang gedoppelt. d.h. es wird zusätzlich ein neues Item "$FIELD" erzeugt, das auf dieselbe Datei verweist. Damit habe ich in meinem Ergebnisdok einen Anhang zuviel.

Wahrscheinlich muß ich doch ein zweites Dokument erzeugen ;0(

Franci

 

Offline Franci

  • Frischling
  • *
  • Beiträge: 13
  • Geschlecht: Weiblich
Re: Löschen eines Richtext-Feldes
« Antwort #8 am: 21.12.06 - 21:32:19 »
Das ist mein eigentliches Problem:

Do you know how to remove a section? I got the "Restricted operation cannot cross logical boundaries" error even if I use the sample code from the Lotus Help db.
 
e.g.
Sub Initialize
Dim session As New NotesSession
Dim db As NotesDatabase
Set db = session.CurrentDatabase
Dim dc As NotesDocumentCollection
Set dc = db.UnprocessedDocuments
Dim doc As NotesDocument
Set doc = dc.GetFirstDocument
Dim rti As NotesRichTextItem
Set rti = doc.GetFirstItem("Body")
Dim rtnav As NotesRichTextNavigator
Set rtnav = rti.CreateNavigator
If Not rtnav.FindFirstElement(RTELEM_TYPE_SECTION) Then
Messagebox "Body item does not contain a section,",, _
"Error"
Exit Sub
End If
Dim rts As NotesRichTextSection
Do
Set rts = rtnav.GetElement
Call rts.Remove
Loop While rtnav.FindFirstElement(RTELEM_TYPE_SECTION)
Call doc.Save(True, True)
End Sub
 
habe den Beitrag unter
http://www.lotusgeek.com/SapphireOak/LotusGeekBlog.nsf/d6plinks/ROLR-6E2V8G
gefunden.

Wenn ich das Problem gelöst hätte, könnte ich auch den Inhalt des RitchText-Feldes (ohne Anhänge) löschen. Hat übrigends mal funktioniert, bis der Fehler das erste mal auftrat.

Offline Franci

  • Frischling
  • *
  • Beiträge: 13
  • Geschlecht: Weiblich
Re: Löschen eines Richtext-Feldes
« Antwort #9 am: 21.12.06 - 21:57:26 »
Falls jemanden interessiert, hier gibt es noch eine Beschreibung des Problems:

http://www-10.lotus.com/ldd/nd6forum.nsf/55c38d716d632d9b8525689b005ba1c0/b5b5a5ed992f9c7f8525710700613c6f?OpenDocument

Angebotene Lösung:

It is easy as 123:

1 Create a new temp RichText
2 Read through the old rich text and copy the content to the new rich text, except those ones that you would like to delete
3, Delete the main richtext
4, Copy the temp richtext to the original richtext
5, Delete the temp rich text

Everything is possible, border is the haven or not ...

Auf die Lösung bin ich dann auch schon gekommen. Habe dabei leider meine Attachments im RichTextFeld verloren.
Werde also nochmal einen neuen Versuch starten.
Hätte es eleganter gefunden, wenn die Script-Funktionen, die mir das Leben erleichtern sollten auch wie erwartet funktionieren würden ;o(

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz