Autor Thema: Richtext Felder werden nicht übernommen  (Gelesen 3062 mal)

Offline BMWTordi

  • Aktives Mitglied
  • ***
  • Beiträge: 105
  • Geschlecht: Männlich
Richtext Felder werden nicht übernommen
« am: 09.08.07 - 10:54:45 »
Guten Tag zusammen

Mit Richtextfeldern hab ich es aber auch die letzte Zeit.  Ich habe eine Datenbank in denen ich mir Textbausteine abspeichere die ich dann in anderen Dokumenten einfügen kann. Klappt auch wunderbar.Aber sobald ich Bilder in meine Textbausteine einfüge wird in meine Dokumente nurnoch der Text übernommen der nach den Bildern steht. Alles was vor den Bildern steht übernimmt meine Funktion nicht in mein neues Dokument. Weiß jemand was das sein kann?


Hier mal der abgespeckte code der Funktion/Agent:

Sub Initialize
   
   On Error Goto ErrorHandler
   
   Dim ws As New NotesUIWorkspace
   Dim uidoc As NotesUIDocument     
   Set uidoc = ws.CurrentDocument   
   
   Dim doc As NotesDocument
   Set doc = uidoc.Document
   
      
   Call uidoc.Save
   
   Dim rtfield As String
   rtfield = uidoc.CurrentField
   
   Dim item As NotesItem
   Set item = doc.GetFirstItem(rtfield)
   
   If Not item.Type =1 Then
      meld = |Diese Funktion kann nur im einem Richtextfeld genutzt werden !|
      Messagebox meld, 16, "Abbruch"
      Exit Sub
   End If
   
   
   Dim col As NotesDocumentCollection
   Set col = ws.PickListCollection( 3, False, stdb.Server, stdb.FilePath, "Textbausteine", "Textbaustein-Auswahl", "Bitte wählen SIe einen Textbaustein." )
   If col.Count = 0 Then Exit Sub
   
   Dim tbdoc As NotesDocument
   Set tbdoc = col.GetFirstDocument
   
   Dim tbrtitem As NotesRichTextItem
   Set tbrtitem = tbdoc.GetFirstItem( "Textbaustein" )
   
   Dim rtitem As NotesRichTextItem
   Set rtitem = doc.GetFirstItem(rtfield)
   If rtitem Is Nothing Then Set rtitem = doc.CreateRichTextItem( rtfield )
   
   Call rtitem.AppendRTItem(tbrtitem)
   
   Call uidoc.Save
   
   Call ReOpenDocument( doc )
   
   Call uidoc.GotoField(rtfield)
   
   Call uidoc.Refresh( True )
   
   Exit Sub
   
ErrorHandler:
   If Err = 4411 Then
      Exit Sub
   Else
      Msgbox "Error: " + Chr( 9 ) + Cstr( Err ) + " " + Error( Err ) + Chr( 13 ) + "in Line: " + Chr( 9 ) + Cstr( Erl ), 16, "Critical Error"
      Exit Sub
   End If
   
End Sub
« Letzte Änderung: 09.08.07 - 10:56:59 von BMWTordi »
..... ein IT-Noob


Meine Umgebung:
2 Domino Cluster-Server (7.0.1) SLES 9 SP 3
1 Domino Server (7.0.1) SLES 9 SP 3
1 Domino Server (7.0.1) Win2k Server

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: Richtext Felder werden nicht übernommen
« Antwort #1 am: 09.08.07 - 19:14:01 »
Ich tippe auf einen Bug in der Implementierung von appendRTItem. Kann mich dunkel daran erinnern, dass ich mich mal vor über 2 Jahren damit rumgeschlagen habe.
Versuch die Geldgeber des Projekts irgendwie zu überzeugen MIDAS RichText eine Chance zu geben.
(http://www.geniisoft.com/showcase.nsf/MidasLSX)
Sowas kann ja getestet werden. Der Mann, der dahinter steht, hat einen guten Namen in der Lotus Community und auch bei IBM Entwicklern. Ich konnte damals meinen Projektsponsor nicht dazu überzeugen. Verstanden hab ich die Entscheidung nicht.

Gruß Axel
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline BMWTordi

  • Aktives Mitglied
  • ***
  • Beiträge: 105
  • Geschlecht: Männlich
Re: Richtext Felder werden nicht übernommen
« Antwort #2 am: 10.08.07 - 08:10:31 »
Danke für den Hilfreichen Tip. Komischerweise hatten wir vorher eine Funktion bei der das einwandfrei funktioniert Hat. Problem war allerdings folgendes:

Ich habe meinen Textbaustein eingefügt und an den leerstellen in meinem Textbaustein hab ich dann noch mauell einige Eintragungen (wie Name oder Datum) gemacht. Nach dem Abspeichern waren diese manuellen Eintragungen jedoch immer wieder verschwunden und es war wieder nur der Blankotextbaustein abgespeichert.

Sub Click(Source As Button)
   
   Dim tbs As New NotesSession
   Dim tbuiws As New NotesUIWorkspace
   
   Dim tbuidoc As NotesUIDocument     
   Set tbuidoc = tbuiws.CurrentDocument   
   
   Dim tbdb As NotesDatabase
   Set tbdb = tbs.CurrentDatabase
   
   Dim tburdoc As NotesDocument
   
   Dim tbview As NotesView
   
   Dim tbdoc As NotesDocument
   Set tbdoc = tbuidoc.Document
   
   Dim tbfname As NotesItem
   
   Dim tbanschrift As Variant, tbname2 As Variant, flag As Variant, tbform As Variant
   
   Dim tbrtitemA As NotesRichTextItem, tbrtitemB As NotesRichTextItem
   
   Dim tbschalter As Variant
   tbschalter = tbs.GetEnvironmentString( "$EnvCompanySchalter" )
   
   Dim sperrdok As NotesDocument
   Set sperrdok = tbdb.GetProfileDocument("tbsperr", tbs.UserName)
   sperrdok.merker = "xxxx"
   Call sperrdok.Save(True, True)
   
   Dim rtfield As String, meld As String
   rtfield = tbuidoc.CurrentField
   
   Dim rtflist As NotesItem
   Set rtflist = tbdoc.GetFirstItem( "rtflist" )
   
   If rtflist.Contains( rtfield) Then
      
      Dim ndbname As String
      ndbname = "offstamm.nsf"
      
      Dim ndb As NotesDatabase
      
      Dim openflag As Variant
      openflag = otherdb(ndbname, tbdb, ndb)
      
      If Not openflag = False Then
         
         Dim tbQuery As Variant
         Dim tbadr As Variant
         
         tbanschrift = tbdoc.Anschrift
         tbname2 = tbdoc.Name2
         
            
            flag = tbuiws.DialogBox( "AuswahlTB", True, True, False, False, False, False, "Textbaustein-Auswahl", tbdoc, True, False, True)
            
            If flag = False Then Exit Sub
            
            tbQuery = Right(tbdoc.help(0),16)
            
            tbuidoc.save
            
            Set tbdoc = tbuidoc.Document
            
            tbdoc.Form = tbuidoc.FieldGetText("Formalias")
            
            Set tbrtitemA = tbdoc.GetFirstItem(rtfield)
            
            If tbrtitemA Is Nothing Then Set tbrtitemA = tbdoc.CreateRichTextItem( rtfield )
            
            If Not ndb Is Nothing Then
               
               If ndb.isopen Then
                  
                  Set tbview = ndb.GetView( "(tbbyid)" )
                  Set tburdoc = tbview.GetDocumentByKey( tbQuery, True)
                  Set tbrtitemB = tburdoc.GetFirstItem( "Textbaustein" )
                  
                  Call tbrtitemA.AppendRTItem(tbrtitemB)
                  Set tbfname = tbdoc.getfirstitem("tb_formname")
                  
                  If tbdoc.tb_formname(0) = "" Then
                     
                     tbdoc.tb_formname = tburdoc.tb_formname(0)
                     
                  Else      '// If tbdoc.tb_formname(0) = "" Then
                     
                     Call tbfname.AppendToTextList(tburdoc.tb_formname(0))
                     
                  End If      '// If tbdoc.tb_formname(0) = "" Then
                  
                  Call tbdoc.Save(True, True)
                  Call tbuidoc.FieldSetText("SaveOptions","0")
                  Call tbuidoc.Close
                  Set tbuidoc = tbuiws.EditDocument(True, tbdoc)
                  Set tbuidoc = tbuiws.CurrentDocument
                  Call tbuidoc.FieldSetText("SaveOptions","1")
                  Call tbuidoc.GotoField(rtfield)
                  Call tbuidoc.Refresh( True )
                  
               End If      '// If ndb.isopen Then
               
            End If      '// If Not ndb Is Nothing Then
            
         End If      '// If tbadr = "" Then
         
      End If      '// If Not openflag = False Then
      
   Else      '// If rtflist.Contains( rtfield) Then
      
      meld = |Diese Funktion kann nur im einem Richtextfeld genutzt werden !|
      Messagebox meld, 16, "Abbruch"
      
   End If      '// If rtflist.Contains( rtfield) Then
   
   sperrdok.merker = ""
   Call sperrdok.Save(True, True)
   
End Sub
..... ein IT-Noob


Meine Umgebung:
2 Domino Cluster-Server (7.0.1) SLES 9 SP 3
1 Domino Server (7.0.1) SLES 9 SP 3
1 Domino Server (7.0.1) Win2k Server

Offline BMWTordi

  • Aktives Mitglied
  • ***
  • Beiträge: 105
  • Geschlecht: Männlich
Re: Richtext Felder werden nicht übernommen
« Antwort #3 am: 14.08.07 - 09:56:21 »
Also...hab nach rumprobieren den Fehler gefunden. Ich darf das Uidoc nicht abspeichern. Ich verstehe zwar nicht warum aber so geht es dann....


Call rtitem.AppendRTItem(tbrtitem)
   
   ' Call uidoc.Save <------ muss raus
   
   Call ReOpenDocument( doc )
   
   Call uidoc.GotoField(rtfield)
   
   Call uidoc.Refresh( True )
   
   Exit Sub
..... ein IT-Noob


Meine Umgebung:
2 Domino Cluster-Server (7.0.1) SLES 9 SP 3
1 Domino Server (7.0.1) SLES 9 SP 3
1 Domino Server (7.0.1) Win2k Server

Driri

  • Gast
Re: Richtext Felder werden nicht übernommen
« Antwort #4 am: 14.08.07 - 10:02:27 »
Ist doch klar. Du änderst im Background das Dokument und speicherst dann das Frontend-"Ergebnis" drüber. Die Änderungen aus dem Background sind dann natürlich futsch.

Offline BMWTordi

  • Aktives Mitglied
  • ***
  • Beiträge: 105
  • Geschlecht: Männlich
Re: Richtext Felder werden nicht übernommen
« Antwort #5 am: 14.08.07 - 10:14:26 »
Naja sie waren ja nicht futsch. Aber theoretisch müsste ich das uidoc speichern damit die Feldvalidierungen durchlaufen.

PS: wie wir grad rausgefunden haben funktioniert es wenn ich das uidoc speichere bevor ich das rtitem anhänge.
« Letzte Änderung: 14.08.07 - 10:30:00 von BMWTordi »
..... ein IT-Noob


Meine Umgebung:
2 Domino Cluster-Server (7.0.1) SLES 9 SP 3
1 Domino Server (7.0.1) SLES 9 SP 3
1 Domino Server (7.0.1) Win2k Server

Driri

  • Gast
Re: Richtext Felder werden nicht übernommen
« Antwort #6 am: 14.08.07 - 14:37:49 »
Was ist daran unklar ?

Du hast quasi zwei Instanzen eines Dokumentes. Die eine hast Du als Backend (doc) und die andere als Frontend (uidoc).

Beide Instanzen haben das Item "Body". Im doc setzt Du es explizit, im uidoc wird es beim Speichern durch die Maske vorgegeben.

Der Ablauf ist dann folgendermaßen :

- doc : Item Body wird gesetzt und gefüllt
- uidoc : Save -> Item Body wird mit dem gefüllt, was im Frontend in der Maske im Body eingetragen wurde
- doc : Reopen -> doc wird geöffnet als uidoc, Body entspricht dem, was in Schritt 2 über uidoc gespeichert wurde

Offline BMWTordi

  • Aktives Mitglied
  • ***
  • Beiträge: 105
  • Geschlecht: Männlich
Re: Richtext Felder werden nicht übernommen
« Antwort #7 am: 15.08.07 - 08:28:20 »
Das verstehe ich schon. Aber es erklärt nicht warum das richtextfeld nur mit der Hälfte der Informationen gefüllt war.
..... ein IT-Noob


Meine Umgebung:
2 Domino Cluster-Server (7.0.1) SLES 9 SP 3
1 Domino Server (7.0.1) SLES 9 SP 3
1 Domino Server (7.0.1) Win2k Server

Driri

  • Gast
Re: Richtext Felder werden nicht übernommen
« Antwort #8 am: 15.08.07 - 09:10:39 »
Ahso, sorry. Ich hab mir nicht den ganzen Thread durchgelesen  ;)

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz