Autor Thema: Agent mit Parameter aufrufen  (Gelesen 4331 mal)

Offline Christoph U.

  • Frischling
  • *
  • Beiträge: 9
Agent mit Parameter aufrufen
« 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

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Agent mit Parameter aufrufen
« Antwort #1 am: 27.01.15 - 12:04:35 »
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 ..
« Letzte Änderung: 27.01.15 - 12:11:36 von Peter Klett »

Offline Christoph U.

  • Frischling
  • *
  • Beiträge: 9
Re: Agent mit Parameter aufrufen
« Antwort #2 am: 27.01.15 - 14:03:40 »
Danke für die schnelle Antwort,

Zitat
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.

Zitat
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 :)

Zitat
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")

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Agent mit Parameter aufrufen
« Antwort #3 am: 27.01.15 - 15:18:25 »
Zitat
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)

Zitat
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.

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Agent mit Parameter aufrufen
« Antwort #4 am: 27.01.15 - 15:41:30 »
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"

Offline Christoph U.

  • Frischling
  • *
  • Beiträge: 9
Re: Agent mit Parameter aufrufen
« Antwort #5 am: 28.01.15 - 08:17:50 »
Zitat
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

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz