Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: mariab am 20.04.06 - 11:37:32

Titel: Funktion einbauen
Beitrag von: mariab am 20.04.06 - 11:37:32
Hallo,

habe folgenden Eintrag im Forum gefunden: http://atnotes.de/index.php?topic=25978.msg165896
Da ich genau dasselbe Problem habe, möchte ich gerne das Script bzw. die Funktion zum Refreshen einbauen.
Dazu habe ich den Code zum Refreshen des Dokuments in de Script Bibliothek test eingefügt.
Code
Sub aktualisieren
	Set session = New NotesSession
	Set db = session.CurrentDatabase
	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 Sub

In der Maske in welcher ich die Tabelle erzeugen möchte habe ich folgenden Code:

Code

Sub Click(Source As Button)
	Dim ws As New NotesUIWorkspace
	Dim uidoc As NotesUIDocument
	Dim doc As NotesDocument
	Dim rtitem As Variant
	Set uidoc = ws.CurrentDocument
	Set doc = uidoc.Document
	Set rtitem = doc.GetFirstItem( "Body" )
	If ( rtitem.Type = RICHTEXT ) Then
		Call rtitem.AddNewLine( 1 )
		Call rtitem.AppendText( "Spalte1" )
		Call rtitem.AddTab( 2 )
		Call rtitem.AppendText( "Spalte2" )
		Call doc.Save( False, True )
		Call aktualisieren
	End If
End Sub


In den Options der Maske habe ich folgenden Eintrag eingefügt:
Code
Option Public
Use "test"

Wenn ich nun die Schaltfläche betätige erhalte ich die Fehlermeldung "Object Variable not Set" bei der Zeile Set dbThis = docThis.ParentDatabase der Sub aktualisieren

Danke für jede Hilfe

Titel: Re: Funktion einbauen
Beitrag von: umi am 20.04.06 - 11:43:53
Wenn kopieren, dann aber komplett:
Deiner Funktion aktualisieren fehlt der Parameter
vgl:
Code
REM Das aktuelle Dokument schließen und wieder öffnen...... 
    Function ReOpen(docThis As NotesDocument) As Integer 
....
Titel: Re: Funktion einbauen
Beitrag von: Untitled am 20.04.06 - 11:47:55
Jay. docThis ist ja noch leer.

Im anderen Thread wird der Funktion ein Dokument übergeben:

Code
Function ReOpen(docThis As NotesDocument) As Integer 

Das heisst, in der Funktion ist ein bereits belegtes "docThis" vorhanden. Du hast nun, soweit ich das sehe, "docThis" nichteinmal deklariert.

Es ist allgemein guter Stil, alle Variablen zu deklarieren. Wenn du die Zeile "Option Declare" in das Event "Options" einfügst, MUSST du alle deklarieren und stolperst weniger leicht über solche Fehler. Das nur nebenbei.

Damit das Script funktioniert, musst du auch deiner Funktion das Dokument zum refreshen übergeben:

Code
Sub aktualisieren (docThis as NotesDocument)

Nun musst du beim Aufruf folgendes verändern:

Code
Call aktualisieren(doc)

So wird das Doc an die Funktion weitergegeben. Versuch es so nochmal.

Grüsse
Moritz
Titel: Re: Funktion einbauen
Beitrag von: mariab am 20.04.06 - 12:06:00
Ok jetzt funktionierts das mit dem Aufruf der Sub. Einziges Problem ist nun, dass wenn ich das Dokument vorher nicht speichere es zur Fehlermeldung in der Zeile
Code
If ( rtitem.Type = RICHTEXT ) Then

kommt. Die Fehlermeldung lautet "Object Variable not Set"
Habe versucht das Dokument mit

Code
Call doc.Save(True, False )	

abzuspeichern und danach zu überprüfen ob es sich um ein Richtextitem handelt. Leider ohne Erfolg
Titel: Re: Funktion einbauen
Beitrag von: Untitled am 20.04.06 - 12:29:53
Richtextfelder existieren erst nach dem speichern des Dokumentes. Du musst daher, wenn das Dokument noch nicht gespeichert wurde mit

Code
doc.CreateRichtTextItem(RTITEM_NAME)

ein neues Richtextfeld erstellen.

EDIT: Um die nächste Frage auch gleich zu beantworten, so kannst du prüfen, ob rtItem belegt ist:

Code
If rtItem Is Nothing Then