Das Notes Forum

Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: yannick am 21.08.12 - 13:57:00

Titel: Inhalt von RichTextItem löschen
Beitrag von: yannick am 21.08.12 - 13:57:00
Hallo zusammen,
habe hier eine kurze und knappe Frage. Wie kann ich den Inhalt eines RT-Items löschen?
Natürlich kann man mit doc.ReplaceItemValue("...", "") den Inhalt auf "" setzen, allerdings wird das Feld danach nicht mehr als RT-Item, sondern nur noch als normales "item" erkannt.  :-\
Titel: Re: Inhalt von RichTextItem löschen
Beitrag von: eknori am 21.08.12 - 14:00:35
Ich würde es komplett aus dem Dockument löschen und ein neues, leeres Item anlegen
Titel: Re: Inhalt von RichTextItem löschen
Beitrag von: koehlerbv am 21.08.12 - 14:08:40
Beim Löschen aber folgende Besonderheit beachten: Ist ein RTI gross, so kann es aus mehreren Teilen bestehen. Es muss das RTI also solange instantiiert und gelöscht werden, bis es nicht mehr zu instantiieren geht.

HTH,
Bernhard
Titel: Re: Inhalt von RichTextItem löschen
Beitrag von: yannick am 21.08.12 - 14:13:33
Danke, habe ich jetzt mal versucht. Einfacher geht das nicht? Scheint aber zu funktionieren. Habe jetzt jedoch ein neues Problem. Also ich führe den Code mit dem löschen/erstellen im QueryOpen einer Form aus. Also immer bevor das Dokument geöffnet wird. Wenn ich jetzt etwas editieren will bekomme ich einen Save Conflict, weil das Dokument angeblich auch gespeichert wurde...Hier mal mein Code:
Code
	Dim session As New NotesSession
	Dim db As NotesDatabase
	Dim view As NotesView
	Dim doc As NotesDocument
	Dim rtitemA As NotesRichTextItem
	Dim rtitemB As NotesRichTextItem
	Dim rtitemC As NotesRichTextItem
	Set db = session.CurrentDatabase
	Set view = db.GetView("Dashboard")
	Set doc = view.GetFirstDocument
	Set rtitemA = doc.GetFirstItem("field_read")
	Call rtitemA.remove
	Call doc.CreateRichTextItem("field_read")
	Set rtitemB = doc.GetFirstItem("field_read")
	Set rtitemC = doc.GetFirstItem("field_edit")
	Call rtitemB.AppendRTItem(rtitemC)
	Call doc.Save(True, True)
Weil ich das Doc im Back-End bearbeite vielleicht?
Titel: Re: Inhalt von RichTextItem löschen
Beitrag von: koehlerbv am 21.08.12 - 14:21:14
Nicht "vielleicht", sondern bestimmt. Und dann noch ein RTI, wovon das Frontend erstmal gar nichts mitbekommt. Das geht so nicht.

Bernhard
Titel: Re: Inhalt von RichTextItem löschen
Beitrag von: yannick am 21.08.12 - 16:11:59
Wie kann ich denn ein RTI im BackEnd bei einem doc verändern, das ich gerade öffnen will?
Ich habe eine Art Anleitung gefunden: http://www-01.ibm.com/support/docview.wss?uid=swg21098273
Allerdings funktioniert das nicht!  :(
Titel: Re: Inhalt von RichTextItem löschen
Beitrag von: Axel am 21.08.12 - 16:37:33
Unser Forenmitglied Anton (a.k.a. ata) hat dafür mal eine Funktion erstellt. Such hier mal nach Reopen.

Oder schau auch mal auf seiner Homepage -> http://www.anton-tauscher.de/LotusScript/startdyn.htm (http://www.anton-tauscher.de/LotusScript/startdyn.htm)

Axel
Titel: Re: Inhalt von RichTextItem löschen
Beitrag von: yannick am 22.08.12 - 09:38:47
Okay danke. Ich habe mir seine Funktion ReOpen kopiert.
Also ich hole mir im PostOpen das (BackEnd) Doc, mache meine Änderungen und rufe danach die Funktion ReOpen auf. Jetzt bekomme ich (wie auch teilweise bei meinen Versuchen) einen Stack Overflow. 10-20 Dokumente öffnen sich und werden sofort wieder geschlossen (Notes schiesst´s dabei manchmal auch ab!). Das ganze passiert jetzt in der Funktion ReOpen in der Zeile
->   Set docThis = uidoc.Document
Das ist die Funktion, die ich aufrufe, nachdem ich im BackEnd doc das RTI gelöscht und neu erstellt habe:
Code
    Function ReOpen(docThis As NotesDocument) As Integer 
        Dim ws As New NotesUIWorkspace 
        Dim uidoc As NotesUIDocument 
        Dim dbThis As NotesDatabase 
        Dim unid As String 
 
        ReOpen = 0 
        Set dbThis = docThis.ParentDatabase 
        Call docThis.Save(True , True) 
        unid = docThis.UniversalID 
        docThis.SaveOptions = "0" ' # ... Speicherabfrage vermeiden 
        Set uidoc = ws.CurrentDocument 
        Call uidoc.Close 
        Set docThis = dbThis.GetDocumentByUNID(unid) 
        Set uidoc = ws.EditDocument(True , docThis) 
--->  Set docThis = uidoc.Document 
        If docThis.HasItem("SaveOptions") Then  
            ' # ... das Feld SaveOptions wieder entfernen... 
            docThis.RemoveItem("SaveOptions") 
            Call docThis.Save( True , True ) 
        End If 
        ReOpen = 1 
        Print "Das Dokument wurde erneut geöffnet" 
    End Function