Autor Thema: Und wieder RichText-Feld mit LS...  (Gelesen 1687 mal)

Offline JimKnopf

  • Frischling
  • *
  • Beiträge: 32
  • Geschlecht: Männlich
  • Der Groschen fällt... manchmal Pfennigweise
Und wieder RichText-Feld mit LS...
« am: 11.02.04 - 15:00:06 »
Hallo!

ich frage mich langsam, ob ich Notes jemals verstehen werde. Ich habe folgendes kleines Script geschrieben:


Sub Click(Source As Button)
   ' Öffnet ein neues Form "Wiedervorlage" und stellt eine Verknüpfung zum Elterndok her
   
   Dim session As New Notessession
   Dim Workspace As New NotesUIWorkspace   
   Dim db As NotesDatabase
   Dim uiDoc As NotesUIDocument          'Aktuell geöffnetes Dok
   Dim newDoc As NotesUIDocument      'Neues Dok = Wiedervorlage
   Dim curDoc As NotesDocument         'Aktuelles Dok im Hintergrund
   Dim wvDoc As NotesDocument         'Neues Dok im Hintergrund
   Dim rtitem As NotesRichTextItem            'RT-Feld in Wiedervorlage
   
   Set db=session.currentdatabase
   Set uiDoc = Workspace.CurrentDocument
   Set curDoc = uiDoc.Document
   
' erstellen eines neuen Doks "Wiedervorlage"
   Set wvDoc = New NotesDocument(db)
   wvDoc.Form = "Wiedervorlage"
   Call wvDoc.ComputeWithForm(True,True)
   Call wvDoc.Save(True,True)
   
   Set rtitem = wvDoc.GetFirstItem( "Linkxy")
   Call rtitem.AppendText("Verküpfung folgt")   
   Call rtitem.AppendDocLink(curDoc.document, "Original")
   
   Call wvDoc.Save(True, True)
   Set uiDoc = Workspace.EditDocument(False, wvdoc)   
      
End Sub



An der unterstrichenen Stelle steigt Notes aus. Es scheint also mal wieder das RT-Feld nicht zu finden - obwohl es 100%-ig in der Maske ist (tausendmal kontrollliert)!

Ich hatte das schon mal, da musste man das ein uiDoc erst speichern bevor es an eine Hintergrund-Doc Variable übergeben wurde.  Hier arbeite ich aber nun kpl. im hintergrund und gespeichert habe ich das neue Dokument ja nun auch... ich bin völlig ratlos  :'(

Fällt einem von Euch was auf, oder habe ich einen typischen Notes-Denkfehler?!?!

Vielen Dank!

Gruß
Arne

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re:Und wieder RichText-Feld mit LS...
« Antwort #1 am: 11.02.04 - 15:14:01 »
Hi,

versuch's doch mal so:

...

  Set rtitem = wvDoc.CreateRichTextItem( "Linkxy")

...

Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:Und wieder RichText-Feld mit LS...
« Antwort #2 am: 11.02.04 - 15:27:02 »
Genau, wie's die DesignerHelp auch beschreibt  ;)

Offline JimKnopf

  • Frischling
  • *
  • Beiträge: 32
  • Geschlecht: Männlich
  • Der Groschen fällt... manchmal Pfennigweise
Re:Und wieder RichText-Feld mit LS...
« Antwort #3 am: 11.02.04 - 15:43:58 »
ja, so klappt es! :-)

Aber erklär mir doch mal einer die Logik ??? Ich habe vor ein paar Tagen etwas ähnliches mit einem uidoc erstellt und dort funktinierte es mit  

Set rtitem = wvDoc.GetFirstItem( "Linkxy")

 "Create" bedeutet für mich "erstellen", aber das Feld ist schon vorhanden, also warum erstellen?!?!?

Für den interessierten Leser der Code aus dem anderen Beispiel (der ebenfalls funktioniert:


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 NotesRichTextItem
   
   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 erkenne da keinen wesentlichen Unterschied!

Dennoch, das Ergebnis zählt! Vielen Dank!!!!! Damit kann ich dann gleich Feierabend machen...  :D

Gruß
Arne
« Letzte Änderung: 11.02.04 - 15:45:09 von JimKnopf »

Offline JimKnopf

  • Frischling
  • *
  • Beiträge: 32
  • Geschlecht: Männlich
  • Der Groschen fällt... manchmal Pfennigweise
Re:Und wieder RichText-Feld mit LS...
« Antwort #4 am: 11.02.04 - 15:51:20 »
Nachtrag:

Hier noch mal der komplette und funktionierende Code (vielleicht hilft es jemandem):


Sub Click(Source As Button)
   ' Öffnet ein neues Form "Wiedervorlage" und stellt eine Verknüpfung zum Elterndok her
   
   Dim session As New Notessession
   Dim Workspace As New NotesUIWorkspace   
   Dim db As NotesDatabase
   Dim uiDoc As NotesUIDocument          'Aktuell geöffnetes Dok
   Dim newDoc As NotesUIDocument      'Neues Dok = Wiedervorlage
   Dim curDoc As NotesDocument         'Aktuelles Dok im Hintergrund
   Dim wvDoc As NotesDocument         'Neues Dok im Hintergrund
   Dim rtitem As NotesRichTextItem            'RT-Feld in Wiedervorlage
   
   Set db=session.currentdatabase
   Set uiDoc = Workspace.CurrentDocument
   Set curDoc = uiDoc.Document
   
   Set wvDoc = New NotesDocument(db)
   wvDoc.Form = "Wiedervorlage"
   Call wvDoc.ComputeWithForm(True,True)
   Call wvDoc.Save(True,True)
   
   Set rtitem = wvDoc.createrichtextitem( "Linkxy")
   Call rtitem.AppendText("Hauptdkument:")
   Call rtitem.AppendDocLink(uiDoc.document, "Originaldokument")
   Call wvDoc.Save(True,True)
   Set uiDoc = Workspace.EditDocument(False, wvdoc)   
   
End Sub

Glombi

  • Gast
Re:Und wieder RichText-Feld mit LS...
« Antwort #5 am: 11.02.04 - 15:56:50 »
Es liegt wohl in diesem Fall an dem Rich Text Feld. Offenbar wird das Item (sprich Feld) durch das ComputeWithForm nicht erzeugt.
Ich schätze mal, wenn es ein Textfeld wäre, würde es mit der Originalformel auch gehen.

Andreas

Offline JimKnopf

  • Frischling
  • *
  • Beiträge: 32
  • Geschlecht: Männlich
  • Der Groschen fällt... manchmal Pfennigweise
Re:Und wieder RichText-Feld mit LS...
« Antwort #6 am: 11.02.04 - 16:03:52 »
Ja da hast Du recht. Ich erinnere mich, dass es bei meinen ersten "Gehversuchen" mit einem Textfeld vieles funktionierte, aber mit einem RT-Feld nicht (und war ratlos).

Aber genau das ist mein Problem. Ich versuche die Sprache wirklich zu "verstehen", und es scheint mir fast so zu sein, dass manche Dinge einfach nicht wirklich logisch sind oder ich die Logik dahinter nicht verstehe (letzteres wird wohl eher zutreffen). Aber in dem obigen Bsp. erkenne ich keine großen Unterschiede.

Vielleicht fällt ja mal der Groschen...

Also Dank an alle für die wieder einmal tolle Unterstützung!

Offline animate

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.540
  • Uh, I'm just gonna go find a cash machine.
    • LA2
Re:Und wieder RichText-Feld mit LS...
« Antwort #7 am: 11.02.04 - 16:24:16 »
Dass das mal bei dir funktioniert hat (oder dass es funktioniert), ist wohl eher Zufall.
Die ComputeWithForm-Methode erzeugt laut Doku keine NotesItem-Objekte und auch die Save-Methode tut das nicht.
Wenn du ein NotesDocument-Objekt erzeugst musst du immer die benötigten Item-Objekte selbst erzeugen, alles andere ist IMHO unsauber.
Thomas

Fortunately, I'm adhering to a pretty strict, uh, drug, uh, regimen to keep my mind, you know, uh, limber.

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz