Autor Thema: Problem mit RichtextItem  (Gelesen 2967 mal)

Offline JimKnopf

  • Frischling
  • *
  • Beiträge: 32
  • Geschlecht: Männlich
  • Der Groschen fällt... manchmal Pfennigweise
Problem mit RichtextItem
« am: 29.12.03 - 13:34:56 »
Hallo,

vielleicht ist jemand so nett und tritt mir hilfreich in die Seite.

Ich möchte eine Richtextfeld per Script füllen. Meinen Ansatz habe ich aus der Designer-Hilfe und diesem Forum, aber es funktioniert leider nicht. Hier der Test-Code, welcher beim Klicken eines Buttons ausgeführt wird:

Sub Click(Source As Button)
   
   Dim Session As New NotesSession
   Dim Workspace As New NotesUIWorkspace
   Dim db As NotesDatabase
   Dim curDoc As NotesUIDocument
   Dim Doc As NotesDocument
   Dim rtItem As NotesRichtextItem
   
   Set db = Session.CurrentDatabase
   Set curDoc = Workspace.CurrentDocument
   Set Doc = curDoc.Document
   Set rtItem = Doc.GetFirstItem( "Ergebnis")
   
   Call rtItem.AppendText( "Hallo1" )**
   Call rtItem.AddNewLine (1)
   Call rtItem.AppendText( "Hallo2" )
   (...)
End Sub

** Hier erfolgt der  Abbruch unter der Fehlermeldung: "Objectvariable not set". Was mache ich falsch? Die Meldung ist eindeutig, aber warum wird sie nicht gesetzt. Das Feld "Ergebnis" existiert in der Maske und ist auch als RichText definiert.  

Vielen Dank für die Mühe!

Gruß
Arne

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re:Problem mit RichtextItem
« Antwort #1 am: 29.12.03 - 13:47:38 »
Entweder existiert das Item "Ereignis" noch nicht, oder es ist kein RT sondern normaler Text. Du musst das RT-Item mit der entsprechenden Dokument-Methode erzeugen (CreateRitchTextItem oder so ähnlich)
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Glombi

  • Gast
Re:Problem mit RichtextItem
« Antwort #2 am: 29.12.03 - 13:47:54 »
Trittin  ;D
Auf den ersten Blick sieht es ok aus. Aber die Meldung besagt, dass es das Feld "Ergebnis" nicht gibt - jedenfalls kann er auf das Item nicht zugreifen.

Versuch mal folgendes
...
dim rtitem as Variant
...

if Doc.HasItem("Ergebnis") then
Set rtItem = Doc.GetFirstItem( "Ergebnis")
 If ( rtitem.Type = RICHTEXT ) Then
   
   Call rtItem.AppendText( "Hallo1" )**
   Call rtItem.AddNewLine (1)
   Call rtItem.AppendText( "Hallo2" )
else
msgbox "Feld Ergebnis ist kein RT Feld"
end if
else
msgbox "Feld Ergebnis nicht vorhanden!"
end if

Andreas

Offline dottore

  • Frischling
  • *
  • Beiträge: 8
  • Geschlecht: Männlich
  • Notes-Neuling
Re:Problem mit RichtextItem
« Antwort #3 am: 29.12.03 - 13:50:41 »
Hi,

sieh mal im debugger nach, welche Variablen gesetzt sind und welche nicht.
Ausserdem kann es ärger geben, wenn das RTItem noch nicht im Dokument vorhanden ist (weil es z.B. noch nicht gespeichert wurde).
In diesem Fall solltest Du das RTItem als Variant deklarieren.

In der Hilfe steht das beim NotesDocument --> getFirstItem ganz unten dabei...

...hoffe, ich konnte helfen
« Letzte Änderung: 29.12.03 - 13:51:29 von dottore »
Romanus eunt domus! (Mensch, genannt Römer, gehen das Haus!)

Offline JimKnopf

  • Frischling
  • *
  • Beiträge: 32
  • Geschlecht: Männlich
  • Der Groschen fällt... manchmal Pfennigweise
Re:Problem mit RichtextItem
« Antwort #4 am: 29.12.03 - 13:57:01 »
Erstmal Danke an alle!

Das Feld scheint für Notes tatsächlich nicht zu existieren?!?!?

Also, ich habe ein Feld in einer Maske im Designer erstellt (Name = "Ergebnis"; Typ = "Rich Text").

Jetzt öffne ich diese Maske (und erstelle damit ein neues Dokument).

Dann wird der Code ausgeführt. Was habe ich nicht verstanden, also warum ist das Feld nicht ansprechbar?!?! ???

Glombi

  • Gast
Re:Problem mit RichtextItem
« Antwort #5 am: 29.12.03 - 13:59:59 »
Wenn Du ein neues Dokument erstellst, "kennt" Notes erst NACH DEM SPEICHERN das Rich Text Feld.
D.h. Du müsstest das Dokument vorher speichern.

call CurDoc.Save
set Doc = CurDoc.Document

Wenn es dann noch Validierungen gibt, ein entsprechendes Error Handling einbauen!

Andreas

Offline dottore

  • Frischling
  • *
  • Beiträge: 8
  • Geschlecht: Männlich
  • Notes-Neuling
Re:Problem mit RichtextItem
« Antwort #6 am: 29.12.03 - 14:00:04 »
Weil RichTextItems leider erst nach dem speichern im Dokument vorhanden sind.
Genauso spätere Änderungen - ja RichTextItems machen Spaß!
Romanus eunt domus! (Mensch, genannt Römer, gehen das Haus!)

Offline JimKnopf

  • Frischling
  • *
  • Beiträge: 32
  • Geschlecht: Männlich
  • Der Groschen fällt... manchmal Pfennigweise
Re:Problem mit RichtextItem
« Antwort #7 am: 29.12.03 - 14:30:33 »
Danke nochmals!

Aber selbst nach dem speichern bekomme ich diese Meldung. Selbst wenn ich das Richtextfeld händisch fülle, speicher und wieder öffne (im Bearbeitungsmodus) funktioniert es nicht.

Ich habe auch einmal ein ganz neues RT-Feld angelegt --> gleiches Ergebnis. Mal eine ganz dumme Frage: Gibt es irgendwelche Bibliotheken , die eingebunden werden müssen? Schreibfehler sind ausgschlossen, bin alles nochmals mit Copy & Paste durchgegangen...



PS: Was ist denn das für ein "Feature", bei dem Felder erst erkannt werden, nachdem alles gespeichert ist?!?!? Ist es nicht meistens so, dass Felder erst gefüllt werden und um sie dann zu peichern?!?!? Manchmal könnte ich Notes...

Offline scipio

  • Junior Mitglied
  • **
  • Beiträge: 57
  • Ich liebe dieses Forum!
Re:Problem mit RichtextItem
« Antwort #8 am: 29.12.03 - 20:16:56 »
Wenn ich's richtig verstanden habe, dann existiert in der Maske, die zum Erstellen der Dokumente benutzt wird, ein RT-Feld namens "Ergebnis". In der gleichen Maske gibt es eine Schaltfläche, die das RT-Feld füllen soll. Also einfach folgenden Code in das Click-Event:

Code
Sub Click(Source As Button)
   Dim workspace As New NotesUIWorkspace
   Dim uidoc As NotesUIDocument
   Set uidoc = workspace.CurrentDocument
   Call uidoc.FieldAppendText( "Ergebnis", "Hallo1" )
   Call uidoc.FieldAppendText( "Ergebnis", Chr(10) )
   Call uidoc.FieldAppendText( "Ergebnis", "Hallo2" )
End Sub
« Letzte Änderung: 29.12.03 - 21:59:01 von scipio »

Offline JimKnopf

  • Frischling
  • *
  • Beiträge: 32
  • Geschlecht: Männlich
  • Der Groschen fällt... manchmal Pfennigweise
Re:Problem mit RichtextItem
« Antwort #9 am: 30.12.03 - 08:39:50 »
Guten Morgen!

Das Problem ist gelöst. Danke allen, die daran beteiligt waren. Die Lösung war einfach: Neustart des Notesclients und es ist natürlich so, dass RT-Felder erst erkannt werden, wenn sie zuvor gespeichert werden :-\ Die Logik leuchtet mir zwar nicht ein, aber damit muß man wohl leben... Ich habe für andere Neulinge den kompletten Code einmal dokumentiert, vielleicht hülft das was:

Code
Sub Click(Source As Button)
   
   Dim Session As New NotesSession
   Dim Workspace As New NotesUIWorkspace   ' UI steht für UserInterface und meint immer das aktuell "Sichtbare" 
   Dim db As NotesDatabase
   Dim curDoc As NotesUIDocument
   Dim Doc As NotesDocument
   Dim rtItem As Variant
   
   Set db = Session.CurrentDatabase            'Die aktuell geöffnete Datenbank wird in der Variable db defininiert
   Set curDoc = Workspace.CurrentDocument    'Das aktuelle Dokument wird zugeordnet
   curDoc.Save                                  'Damit das Richtextfeld erkannt wird, muß vorher gespeichert werden.
   Set Doc = curDoc.Document                   'Das aktuell "sichtbare" Dokument wird wird an ein Hintergrunddokument übergeben
   Set rtItem = Doc.GetFirstItem( "Ergebnis")      'Das Feld "Ergebnis" wird im "Hintergrund" einer Variablen zugeordnet
   
   Call rtItem.AppendText( "Hallo1" )               'Der Text "Hallo1" wird in dem Feld "Ergebnis" angehangen (im Hintergrund)
   Call rtItem.AddNewLine (1)                     'Zeilenumbruch
   Call rtItem.AppendText( "Hallo2" )
   Call Doc.Save (True, False)                     'Das Hintergrunddokument wird gespeichert
   Call curDoc.FieldSetText( "SaveOptions", "0" )   'In das Feld "SaveOptions" wird eine "0" geschrieben, damit das Vordergrunddokument (UI) 
                                                'ohne Nachfrage geschlossen werden kann.**
   Call curDoc.Close                              'Das Vordergrunddokument wird ohne Speicherung geschlossen (eine Speicherung würde
                                                'die Änderungen die zuvor im Hintergrund stattfanden wieder überschreiben)
   Set curDoc = Workspace.EditDocument(False, doc) ' Das Hintergrunddokument (mit den Änderungen) wird in den Vordergrund geholt, so dass 
                                                      ' die Änderungen sichtbar werden
End Sub


Ich wünsche allen einen guten Rutsch ins Neue Jahr!

Grüße
Arne

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz