Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: JimKnopf 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
-
Hi,
versuch's doch mal so:
...
Set rtitem = wvDoc.CreateRichTextItem( "Linkxy")
...
Axel
-
Genau, wie's die DesignerHelp auch beschreibt ;)
-
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
-
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
-
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
-
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!
-
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.