Autor Thema: Kommunikation zwischen Agenten  (Gelesen 1637 mal)

Offline HarryB

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 521
  • Geschlecht: Männlich
Kommunikation zwischen Agenten
« am: 10.02.06 - 14:28:30 »
Hallo Forum,

für ein Lookup auf den Datenbankkatalog im Web, lasse ich einen Webagenten (A) laufen. Weil der Datenbankkatalog für die Benutzer aber gesperrt ist, rufe ich von dem Webagenten einen weiteren Agenten (B) laufen, der unter anderen Rechten läuft (nämlich mit den Rechten eines Benutzers, der auf den Datenbankkatalog draufkommt).

Um dem zweiten Agenten die Parameter übergeben zu können, was genau er suchen soll, benutze ich ein Parameterdokument.

So weit so gut, mein Problem ist nun die Rückgabe der gefundenen Werte. Diese schreibe ich wieder in das Parameterdokument und möchte dieses vom ursprünglichen Agenten (A) auslesen. Das aber funktioniert leider nicht korrekt.

Die Werte, die Agent B in das Paramterdokument geschrieben hat, bleiben für Agenten A unsichtbar. Wenn ich nach Abschluss der Agenten in das Parameterdokument hereinschaue, sieht eigentlich alles okay aus.

Um einen besseren Überblick zu geben, hier des relevante Teil meines Codes:

Zitat
   'Parameterdokument für die Suche vorbereiten
   Set paramDoc = db.CreateDocument
   Call paramDoc.ReplaceItemValue("Form","paramDoc")
   Set authorItem = paramDoc.ReplaceItemValue("$forcedAuthors",profileDoc.GetItemValue("$forcedAuthors"))
   authorItem.IsAuthors = True
   Set nameItem = paramDoc.ReplaceItemValue("$userName",ses.EffectiveUserName)
   nameItem.IsNames = True
   Call paramDoc.ReplaceItemValue("$lookupDate", Now)
   Call paramDoc.ReplaceItemValue("$lookupServer",lookupServer)
   Call paramDoc.ReplaceItemValue("$lookupText",lookupText)
   Call paramDoc.Save(True, False, True)
   paramDocID = paramDoc.NoteID
   
   'Datenbankkatalog für die Suche heranziehen
   Set lookupAgent = db.GetAgent("(webLookupCatalog)")
   agentRun = lookupAgent.Run(paramDocID)
   
   'Wenn der Suchagent erfolgreich gelaufen ist, das Ergebnis auswerten
   If (agentRun = 0) Then
      
      Set resultDoc = db.GetDocumentByID(paramDocID)
      lookupResult = resultDoc.GetItemValue("$lookupResult")
      
      If (lookupResult(0) = "") Then
         'keine Resultate gefunden
      Else
         'Resultate auswerten

Agent A sieht die Inhalte des Feldes "$lookupResult" einfach nicht. Agent A sieht nicht einmal das Feld (im Debugger). (lookupResult(0) = "") ist immer wahr, obwohl das Feld nachweislich vorhanden und nicht leer ist.

Hat jemand eine Idee dazu, wo genau das Problem liegen könnte oder wie ich alternativ die Suchresultate an Agent A zurückgeben kann?

Ich habe bereits sichergestellt dass:

a) Das Parameterdokument in Agent B gespeichert wird
b) es nicht an den Benutzerrechten liegt (Agent B unter demselben Benutzer laufen lassen wie Agent A)
c) Das Dokument neu geladen wird (ist im Code ja drin)

Ich bin aber sicher, noch irgendwo was übersehen zu haben.

Viele Grüße
Harry
« Letzte Änderung: 30.03.06 - 13:29:36 von HarryB »
Harald "HarryB" Börger

2 x 7.0.2FP1 auf AIX (Cluster)
1 x 7.0.2FP2 auf AIX
1 x 6.5.5 auf AIX
4 x 7.02.FP2 auf WIN

Clients: 7.0.2

Glombi

  • Gast
Re: Kommunikation zwischen Agenten
« Antwort #1 am: 10.02.06 - 14:32:10 »
Ich denke, dass der Agent nicht darauf wartet, bis der andere Agent fertig ist.

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: Kommunikation zwischen Agenten
« Antwort #2 am: 10.02.06 - 14:47:36 »
Muss der WebAgent als WebUser laufen?
Sonst läuft doch der Webagent mit den Berechtigungen des Signierers oder?
Ansonsten könntest Du auch das RunOnBehalf of verwenden. 2. Tab in den Agenteingenschaften.
Gruss

Urs

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

Offline HarryB

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 521
  • Geschlecht: Männlich
Re: Kommunikation zwischen Agenten
« Antwort #3 am: 10.02.06 - 16:00:18 »
Ich denke, dass der Agent nicht darauf wartet, bis der andere Agent fertig ist.
Hm, das ist mal ein guter Ansatz. Beim Debuggen sieht es allerdings schon so aus, als warte der eine Agent auf den anderen. Aber das werde ich mal prüfen.

Viele Grüße
Harry
Harald "HarryB" Börger

2 x 7.0.2FP1 auf AIX (Cluster)
1 x 7.0.2FP2 auf AIX
1 x 6.5.5 auf AIX
4 x 7.02.FP2 auf WIN

Clients: 7.0.2

Offline HarryB

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 521
  • Geschlecht: Männlich
Re: Kommunikation zwischen Agenten
« Antwort #4 am: 10.02.06 - 16:03:55 »
Muss der WebAgent als WebUser laufen?
Ja, muss er.

Hintergrund: ich habe eine Weboberfläche gebastelt, in welche der Benutzer Datenbanklinks angezeigt bekommt. In erster Linie ist das seine eigene Maildatenbank, er soll sich aber selber weitere Links anlegen können, wenn er zum Beispiel Zugriff auf eine Mail-In Datenbank oder den Kalender eines Kollegen hat.

Basis für das Anlegen neuer Links ist der Datenbankkatalog, der anhand eines Suchbegriffes durchsucht wird (z.B. einem Vornamen oder einem Nachnamen). Aus dem Ergebnis der Datenbanksuche sollen aber die Datenbanken herausgefiltert werden, auf die der Benutzer keine Zugriffsrechte hat. Dies zu prüfen ist allerdings ausschliesslich mit den Rechten des Benutzer möglich.

Ein Browsing durch alle vorhandenen Datenbanken will ich aus verschiedenen Gründen nicht ermöglichen.

Viele Grüße
Harry
Harald "HarryB" Börger

2 x 7.0.2FP1 auf AIX (Cluster)
1 x 7.0.2FP2 auf AIX
1 x 6.5.5 auf AIX
4 x 7.02.FP2 auf WIN

Clients: 7.0.2

Offline HarryB

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 521
  • Geschlecht: Männlich
Re: Kommunikation zwischen Agenten
« Antwort #5 am: 30.03.06 - 13:29:20 »
So, ich habe es jetzt anders gelöst.

Ich generiere einen (mehr oder weniger) eindeutigen Schlüssel, indem ich das aktuelle Datum samt Uhrzeit durch den Hash schicke (NotesSession.HashPassword). Diesen übergebe ich mit dem Parameterdokument an Agent B. Agent B erstellt ein neues Dokument, in welches er den übergebenen Schlüssel als eindeutiges Erkennungsmerkmal speichert.

Agent A erkennt, nachdem Agent B gelaufen ist, anhand des eindeutigen schlüssels das neu erstellte Dokument und voilá ich habe das gewünschte Resultat.

Zwischenzeitlich hatte ich es auch mit einer Textdatei probiert. Das hat zwar auch funktioniert, allerdings den Nachteil, dass die Benutzer, die den Agenten ausführen, die Rechte nicht limitierte Agenten auszuführen auf dem Server benötigen. Das ist allerdings eher nicht wünschenswert.

Viele Grüße
Harry
Harald "HarryB" Börger

2 x 7.0.2FP1 auf AIX (Cluster)
1 x 7.0.2FP2 auf AIX
1 x 6.5.5 auf AIX
4 x 7.02.FP2 auf WIN

Clients: 7.0.2

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz