Autor Thema: Funktion einbauen  (Gelesen 1446 mal)

Offline mariab

  • Aktives Mitglied
  • ***
  • Beiträge: 123
Funktion einbauen
« 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


Offline umi

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.062
  • Geschlecht: Männlich
  • one notes to rule'em all, one notes to find'em....
    • Belsoft AG
Re: Funktion einbauen
« Antwort #1 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 
....
Gruss

Urs

<:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Jegliche Schreibfehler sind unpeabischigt
http://www.belsoft.ch
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~:>

Offline Untitled

  • Senior Mitglied
  • ****
  • Beiträge: 364
    • Musiker24.ch - Musiker und Bands finden
Re: Funktion einbauen
« Antwort #2 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

Offline mariab

  • Aktives Mitglied
  • ***
  • Beiträge: 123
Re: Funktion einbauen
« Antwort #3 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

Offline Untitled

  • Senior Mitglied
  • ****
  • Beiträge: 364
    • Musiker24.ch - Musiker und Bands finden
Re: Funktion einbauen
« Antwort #4 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
« Letzte Änderung: 20.04.06 - 12:32:37 von Untitled »

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz