Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: Christian97 am 04.06.03 - 10:39:39
-
Hallo,
ich möchte gern über einen Aktionbutton das gerade geöffnete Dokument schließen und wieder öffnen. Mir fällt aber keine Idee ein, wie ich den Link des Dokumentes wieder öffnen kann?
Danke
Christian
-
Hi,
versuch mal folgendes:
Erstelle dir einen Agenten mit folgendem Code:
Dim workspace As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim doc As NotesDocument
Set uidoc = workspace.CurrentDocument
Set doc = uidoc.Document
Call uidoc.Close
Set uidoc = workspace.Editdocument(true, doc)
Diesen Agent läßt du über den Aktions-Button ausführen.
Ich weiß allerdings nicht ob's funktioniert, hab' nicht probiert.
Axel
-
sorry, aber mit welcher intention ?
gruss
-
@Axel:
Hab's so eingefügt, aber es kommt die Fehlermeldung: "Reference appears before declaration: UIDOC"
Was muß ich da noch machen?
@Till_21:
Das soll ein Workaround zu meiner Frage von letzter Woche werden.
http://www.atnotes.de/index.php?board=7;action=display;threadid=8559 (http://www.atnotes.de/index.php?board=7;action=display;threadid=8559)
-
Hi,
ich hab's mal probiert. Bei mir kommt keine Fehlermeldung.
Überprüfe deinen Code nochmal.
Axel
-
hmm, will immer noch nicht. Ich hab den Agenten erstellt:
- Gemeinsam nutzen
- Option: Manuell aus dem Menü "Aktionen"
- Einmal ausführen
dann das LotusScript eingefügt. Die zwei Dim uidoc und Dim doc Zeilen tut er in die (Declarations), den Rest bei (Options) rein. Und dann kommen die Fehlermeldungen...
Wie hast Du's gemacht, daß es funktioniert?
-
Hi,
ich hab den gesamten Code in den Initialize-Teil eingefügt.
Axel
-
... alles ins "initialize" rein.. :o
-
@axel,
du warst um 5 sec schneller :'(
-
Danke, der Agent funktioniert, aber nun kommt die Fehlermeldung bei der Ausführung: "Document Command is not available" :-[
-
@klaussal
Schneller tippen, oder schnellerer Internetzugang ;) ;D
Mach dir nix draus, beim nächsten Mal bist du schneller ;D
Axel
-
Hi,
lass mal den Debugger drüber laufen, wo er aussteigt. Ich befürchte hier:
Set uidoc = workspace.Editdocument(true, doc)
Axel
-
Ja, Du hast recht. Ich hab auch mal die Zeile weggelassen, dann geht's. Gibt's evtl. ne Möglichkeit, daß das geht?
-
Hi,
ins Blaue hinein gedacht, hab ich noch folgende Idee.
Der Agent schreibt zuerst die ID des Dokuments in die Ini-Datei und schließt das Dokument dann. Anschließend wird die ID ausgelesen, das zugehörige Dokument in der Datenbank gesucht und dann geöffnet.
Code dafür hab ich im Moment leider nicht parat, aber ich denke du solltest anhand der Beschreibung den Agenten erstellen können.
Axel
-
tun den code nicht in den Agenten, sondern direkt hinter die Aktionsschaltfläche.
Im Agenten hast du -falls mich meine Erinnerung nicht in Stich lässt - keinen Zugriff auf die UI-Klassen.
-
danke für die Beschreibung. Die Idee mit der notes.ini und der ID dadrin hatte ich mir auch überlegt, aber hab von LotusScript absolut keine Ahnung. :-[ Falls Du also doch noch eine Lösung zaubern könntest, würde ich mich sehr freuen. Ich versuch aber auch mal ne Formellösung.
Danke
Christian
-
Im Agenten hast du -falls mich meine Erinnerung nicht in Stich lässt - keinen Zugriff auf die UI-Klassen.
In den Agenten hast du sehr wohl Zugriff auf die UI-Klassen, allerdings nur, wenn es sich nicht um getriggerte Agenten handelt.
@Christian
Gib mir einen Moment Zeit.
Axel
-
@Axel_Janssen:
Die Idee mit dem Agenten muß aber auch sein, denn in dem Button steht bestimmt schon ne halbe Seite Formel-Code drin. Der Action Button nur mit dem Auf-Zu-Script hätte ja sonst gar keinen Sinn. ;)
-
Hi,
versuch's mal damit. Hab ich eben mit heisser Nadel gestrickt.
Dim session As New NotesSession
Dim workspace As New NotesUIWorkspace
Dim db As NotesDatabase
Dim uidoc As NotesUIDocument
Dim doc As NotesDocument
Dim strDocID
Set db = session.CurrentDatabase
Set uidoc = workspace.CurrentDocument
Set doc = uidoc.Document
'Document-ID in ini-Datei schreiben
Call session.SetEnvironmentVar( "DokID", doc.UniversalID)
'Dokument schließen
Call uidoc.Close
'Auslesen der ID aus der ini-Datei
strDocID = session.GetEnvironmentString( "DokID" )
'Suchen des Dokuments in der Datenbank
Set doc = db.GetDocumentByUNID(strDocID )
'Öffnen des Dokuments
Set uidoc = workspace.Editdocument(True, doc1)
Kopier den Code in den Initialize-Abschnitt des Agenten.
Axel
-
Es stoppt leider immer noch an der selben Stelle mit der selben Fehlermeldung "Document command is not available"
Allerdings hatte ich auch einen Fehler in deinem Script in der letzten Zeile bemerkt, da die Variable nicht "doc1", sondern nur "doc" heißt. Da kam erst eine andere Fehlermeldung, dann die obige.
-
Hi,
sorry, war ein Tippfehler.
Bei mir kommt kein Fehler.
Du hast geschrieben, dass in dem Button schon eine halbe Seite Formel drinsteht. Ich vermute mal das die Formelbefehle nicht in genau der Reihenfolge abgearbeitet werden, in der sie da stehen.
Versuch doch mal deinen Agenten mit dem @PostedCommand auszuführen. Damit wird der Agent als letztes ausgeführt.
Axel
-
Mit dem @PostedCommand klappts leider auch nicht. Allerdings bemerke ich im Debugger, daß das Dokument bei Call uidoc.Close nicht geschlossen wird, sondern auf bleibt. Dann kommt beim Wiederöffnen der Fehler. Kann es daran liegen?
-
Hi,
ist durchaus möglich. Ich bin aber jetzt mit meinem Latein am Ende.
Im Moment habe ich keine Ideen mehr, wie man das Problem noch lösen könnte. :-\
Axel
-
ergänzt bitte beim "call uidoc.close" das Teil um "call uidoc.close(true)" bitte. Das schließt auf alle Fälle das Uidoc aus dem Frontend und dazu auch die Referenzierung. Dann das editdocu...
-
aber ich hab's raus. Ich hatte den Agenten mal in einer anderen Maske ganz alleine in einem Button ausgeführt. Dort waren, wie bei Dir, keine Fehlermeldungen aufgetreten. Allerdings wollte ich nach der Aktion wieder in den Lesemodus. Ich hab das dann geändert (mittlerweile das Script auch verstanden ;)) und nun geht es mit dem Lesemodus.
Vielen, vielen Dank Alex!
Ciao,
Christian