Das Notes Forum
Domino 9 und frühere Versionen => ND9: Entwicklung => Thema gestartet von: Christoph U. am 27.01.15 - 11:50:40
-
Hallo zusammen,
ich hänge gerade an einem kleinen Problem.
Ich möchte einen Agent mit Parameter über eine Schaltfläche aufrufen.
Hintergrund der Geschichte.
Aktuell gibt es in einem Dokument fünf mal den Knopf "Archivieren".
Dahinter liegt an sich jedesmal die gleiche Funktion nur die Felder, die archiviert werden sollen ändern sich.
Da ich das ganze jetzt neu schreiben/ändern muss würde ich das gerne einheitlich in einen Agenten packen und immer nur die Feldnamen übergeben wollen.
Meine bisherigen versuche sind eher mager ausgefallen.
Über Formelsprache kann man meines Wissens keine Parameter übergeben und mit dem anhängendem Script nur die noteID ... soweit ich weis.
Sub Click(Source As Button)
Dim session As New NotesSession
Dim db As NotesDatabase
Dim agent As NotesAgent
Set db = session.CurrentDatabase
Set agent = db.GetAgent("Archivieren")
Call agent.Run()
End Sub
-
Ist der Agent in Script geschrieben? Dann lagere das Script in eine Scriptbibliothek aus und rufe die Function oder Sub mit den darin definierten Parametern auf.
Alternativ kannst Du vor dem Aufruf des Agenten die Werte, die der Agent braucht, in ein Dokument schreiben (das kann auch ein Profildokument sein) und gibst dem Agenten beim Start die NoteID des Dokuments mit (das Dokument muss gespeichert sein, Profildokumente sind das automatisch). Innerhalb des Agenten kannst Du dann mit
Set doc = db.GetDocumentByID (agent.ParameterDocID)
auf das übergebene Dokument zugreifen.
EDIT: Du könntest auch einfach nur einen kurzen String, nicht länger als eine NoteID, übergeben und innerhalb des Agenten diesen String auswerten, ohne auf das Dokument zuzugreifen (das es ja nicht gibt).
Select Case agent.ParameterDocID
Case "1"
'Alternative 1
Case "2"
'Alternative 2
End Select
Habe ich so noch nie gemacht, funktionert aber bestimmt auch ..
-
Danke für die schnelle Antwort,
Ist der Agent in Script geschrieben? Dann lagere das Script in eine Scriptbibliothek aus und rufe die Function oder Sub mit den darin definierten Parametern auf.
Ist er. Habe ich auch schon versucht. Nur findet er die Sub trotz "use" Statement nicht.
Alternativ kannst Du vor dem Aufruf des Agenten die Werte, die der Agent braucht, in ein Dokument schreiben (das kann auch ein Profildokument sein) und gibst dem Agenten beim Start die NoteID des Dokuments mit (das Dokument muss gespeichert sein, Profildokumente sind das automatisch). Innerhalb des Agenten kannst Du dann mit
Darauf läuft es hinaus. Das werde ich jetzt mal realisieren. Danke :)
EDIT: Du könntest auch einfach nur einen kurzen String, nicht länger als eine NoteID, übergeben und innerhalb des Agenten diesen String auswerten, ohne auf das Dokument zuzugreifen (das es ja nicht gibt).
An sich funktioniert das auch sehr gut. Nur brauche ich trotzdem die NoteID von meinem Dokument. Zwar funktioniert es die NoteID und einen Parameter zu übergeben aber das hilft mir in dem fall nicht.
Es kann sein, dass das Dokument noch nicht gespeichert ist, wenn der Knopf gedrückt wird und dann gibt es ja noch keine NoteID
Call Agent.Run(doc.NoteID & "1")
-
Ist der Agent in Script geschrieben? Dann lagere das Script in eine Scriptbibliothek aus und rufe die Function oder Sub mit den darin definierten Parametern auf.
Ist er. Habe ich auch schon versucht. Nur findet er die Sub trotz "use" Statement nicht.
Kann nicht sein, dann ist da irgendetwas nicht korrekt. Dieses Vorgehen halte ich für das bessere, als einen Agenten zu schreiben, dem man ein Dokument mitgeben muss. Außer es gibt einen zwingenden technisch-logischen Grund, warum es ein Agent sein muss (wüsste aber nicht, welcher das sein sollte)
EDIT: Du könntest auch einfach nur einen kurzen String, nicht länger als eine NoteID, übergeben und innerhalb des Agenten diesen String auswerten, ohne auf das Dokument zuzugreifen (das es ja nicht gibt).
An sich funktioniert das auch sehr gut. Nur brauche ich trotzdem die NoteID von meinem Dokument. Zwar funktioniert es die NoteID und einen Parameter zu übergeben aber das hilft mir in dem fall nicht.
Es kann sein, dass das Dokument noch nicht gespeichert ist, wenn der Knopf gedrückt wird und dann gibt es ja noch keine NoteID
Call Agent.Run(doc.NoteID & "1")
Wenn das Dokument nicht gespeichert ist, kann der Agent nicht über die NoteID darauf zugreifen. Falls Du auf ein nicht gespeichertes und aktuell geöffnetes Dokument zugreifen willst, wirst Du über workspace.CurrentDocument gehen, dann brauchst Du aber keine NoteID.
-
Ein nicht funktionierendes Use könnte daher kommen, dass in den Options der Maske eine Bibliothek eingebunden wurde (unten), wenn man dann oben in den Globals eine andere Bibliothek einbindet, wird die nicht gefunden. Also am besten gleich alle Bibliotheken in den Globals "usen"
-
Ein nicht funktionierendes Use könnte daher kommen, dass in den Options der Maske eine Bibliothek eingebunden wurde (unten), wenn man dann oben in den Globals eine andere Bibliothek einbindet, wird die nicht gefunden. Also am besten gleich alle Bibliotheken in den Globals "usen"
Habe das Use in die Globals mit eingetragen und schon hats geklappt.
Danke für die Hilfe.
Ich bin auch schon daran das ganze jetzt in einer Scriptbibliothek umzusetzen. ;D