Autor Thema: aus Skript gestarteter Agent läuft semi-synchron?  (Gelesen 2289 mal)

Offline Axel_Janssen

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 769
Hi,

ein Skript startet einen Agenten und übergibt eine Doc-ID.

Der Agent macht einen SQL-Select gegen DB2 und schreibt das Ergebnis in das Dokument mit der ihm übergebenen DocID.


code in Maske:
Code
idVonEinemDoc = doc.noteID
someAgent.runOnServer(idVonEinemDoc)
call doc.save (true, false)

code in Agent:
Code
/*
Der Agent holt sich eine Referenz auf das Dokument der übergebenen DocID und macht einen SQL-Select gegen DB2 und schreibt das Ergebnis in das Dokument mit der ihm übergebenen DocID.
Genauer: Er iteriert durch das Resultset und hängt die einzelnen Spaltenwerte eines RDBMS-Datensatz jeweils an gewisse Notes-ITems im Dokument an.  
*/

Ergebnis ist aus meiner Sicht kurios.
Der Agent läuft an.
Bevor das doc.save im Maskencode das Dokument persistiert (abgespeichert hat) hat der Agent (der ja über das selbe Dokument läuft) bereits einige, aber nicht alle im Select gefundenen Datensätze angehängt.

Irgendwie laufen also beide asynchron.
Synchron hiesse: Der caller (das Skript in der Maske) wartet, bis der von ihm aufgerufene Agent beendet ist.
Asynchron heisst: der code im caller läuft einfach weiter und kümmert sich nicht darum, wann der aufgerufene code terminiert.

Es ist in jedem Fall asynchron.
Aber der Skriptcode in der Maske wartet ziemlich lange bis er das doc.save ausführt (deshalb semi-synchron)
In dieser Zeit hat der Agent auf dem Server:
- sich mit einer remoten DB2 verbunden.
- einen simplen sql-Select gegen eine Tabelle derselben abgesendet.
- ein Resultset erhalten.
- einige (aber nicht alle) Datensätze des Resultsets iteriert
- diese Werte jeweils an die Items des Dokuments angehängt.

Das Verhalten ist so. Das ist weniger eine Frage, als eine Feststellung.

Kann jemand was schlaues dazu sagen?

Ich könnte jetzt theoretisch im Maskencode vor doc.save
sowas schreiben wie
Code
while doc.getItemValue("aFlag")(0) <> "1"
wend

und im Agenten:
/*
iteriere gesamtes Resultset
doc.replaceItemValue("aFlag", "1")
*/
und ein paar Sicherheiten einbauen (Zeitvariable in Endlos-while wend in Masken-code.

Das ist mir aber zu sehr gehackt.

Gruß Axel


« Letzte Änderung: 28.02.04 - 00:51:44 von Axel_Janssen »
... design patterns are abstract designs that help identify the structure and elements involved in a specific design solution. From this, a concrete implementation can be produced.
Kyle Brown

Offline animate

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.540
  • Uh, I'm just gonna go find a cash machine.
    • LA2
Re:aus Skript gestarteter Agent läuft semi-synchron?
« Antwort #1 am: 28.02.04 - 07:20:39 »
zu dem Verhalten kann ich nix Schlaues sagen. Ich kann eigentlich gar nix schlaues sagen, nur eine Frage stellen.
Besteht die Möglichkeit, das Dokument im aufgerufenen Agent zu starten, nicht im aufrufenden?

Oder musst du nach dem Befüllen mit Werten noch irgendwas mit dem Dokument machen?
Thomas

Fortunately, I'm adhering to a pretty strict, uh, drug, uh, regimen to keep my mind, you know, uh, limber.

Offline Axel_Janssen

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 769
Re:aus Skript gestarteter Agent läuft semi-synchron?
« Antwort #2 am: 28.02.04 - 09:52:33 »
Besteht die Möglichkeit, das Dokument im aufgerufenen Agent zu starten, nicht im aufrufenden?
Nö. Hat etwas mit der spezifischen Architektur der Anwendung sowie der Tatsache, dass auf dem Client keine DB2-Clients intalliert ist, zu tun.
 
... design patterns are abstract designs that help identify the structure and elements involved in a specific design solution. From this, a concrete implementation can be produced.
Kyle Brown

Offline animate

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.540
  • Uh, I'm just gonna go find a cash machine.
    • LA2
Re:aus Skript gestarteter Agent läuft semi-synchron?
« Antwort #3 am: 28.02.04 - 10:22:19 »
ich seh grade, das ich bockmist geschrieben habe.

was ich meinte war: besteht die Möglichkeit, das Dokument in dem Agent zu speichern, in dem es auch gefüllt wird?
« Letzte Änderung: 28.02.04 - 10:23:16 von Thomas Völk »
Thomas

Fortunately, I'm adhering to a pretty strict, uh, drug, uh, regimen to keep my mind, you know, uh, limber.

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re:aus Skript gestarteter Agent läuft semi-synchron?
« Antwort #4 am: 28.02.04 - 11:41:48 »
Axel: mit RunOnServer ist doch eigentlich gegeben, dass das Ding asynchron läuft, das rennt ja dann auf einer anderen Maschine und das dann im lokalen Agenten zu speichern, schreit ja schon fast nach einem Speicher - Konflikt, die Lösung von Thomas ist da also eigentlich sehr naheliegend.
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline Axel_Janssen

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 769
Re:aus Skript gestarteter Agent läuft semi-synchron?
« Antwort #5 am: 28.02.04 - 11:45:58 »
ich seh grade, das ich bockmist geschrieben habe.

was ich meinte war: besteht die Möglichkeit, das Dokument in dem Agent zu speichern, in dem es auch gefüllt wird?

auch nicht.
der aufrufende code läuft in einer Schleife und ist da wirklich nicht so ohne weiteres herauszuholen (hat was mit DWF zu tun).
Die einzige Möglichkeit besteht wohl darin eine eigene serverseitige Version des aufrufenden codes zu schreiben (code in Verzweigung if agent.laueftAufServer = true), wo es gar keinen aufgerufenen Agenten gibt, sondern die ODBC-Operationen direkt in den "aufrufenden" Agenten geschrieben werden. Exakt gesprochen, gibt es dann keinen aufgerufenen Agenten. Dies käme einer Neuimplementierung weiter Bestandteile einer von mir nicht geschriebenen komplexen Anwendung gleich.
Hinweis: An der problematischen Stelle ist der aufrufende code genau gesprochen nicht in einer Maske, sondern in einem Agenten, der eben von der workstation oder auf dem Server gestartet werden kann.

Du redest aber wirklich keinen bullshit.  

Gruß Axel
« Letzte Änderung: 28.02.04 - 11:46:41 von Axel_Janssen »
... design patterns are abstract designs that help identify the structure and elements involved in a specific design solution. From this, a concrete implementation can be produced.
Kyle Brown

Offline Axel_Janssen

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 769
Re:aus Skript gestarteter Agent läuft semi-synchron?
« Antwort #6 am: 28.02.04 - 11:50:12 »
Axel: mit RunOnServer ist doch eigentlich gegeben, dass das Ding asynchron läuft, das rennt ja dann auf einer anderen Maschine und das dann im lokalen Agenten zu speichern, schreit ja schon fast nach einem Speicher - Konflikt, die Lösung von Thomas ist da also eigentlich sehr naheliegend.

Hi Jens,

wenn das Dokument im Server nicht gespeichert wird, gibt es keinen Speicherkonflikt.
Interessant finde ich das lange Zeit-lag zwischen agent.runOnServer() und doc.save auf der client-Seite.

Gruß Axel
... design patterns are abstract designs that help identify the structure and elements involved in a specific design solution. From this, a concrete implementation can be produced.
Kyle Brown

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re:aus Skript gestarteter Agent läuft semi-synchron?
« Antwort #7 am: 28.02.04 - 13:33:53 »
Hm, wie soll denn das überaupt funktionieren? Das Doc.Save auf dem Client schreibt ja eigentlich die Memory-Instanz, die auf dem Client lebt, in die DB zurück. Auf diese Memory-Instanz hat doch der Server, auf dem der gerufene James Bond läuft, gar keinen Zugriff. Wie kommen denn da die vom servseitigen 007 eingesammelten Daten überhaupt in das Dokument?
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline animate

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.540
  • Uh, I'm just gonna go find a cash machine.
    • LA2
Re:aus Skript gestarteter Agent läuft semi-synchron?
« Antwort #8 am: 28.02.04 - 13:59:44 »
Das ist natürlich nicht von der Hand zu weisen. Das scheint eine sehr abenteuerliche Konstruktion zu sein und das macht den Satz
Zitat
Das ist mir aber zu sehr gehackt.

sehr witzig für mich. Könnte ja sein, dass das, was du als Hack bezeichnest, im Vergleich zum existierenden Programm gar kein Hack mehr ist.

(Offtopic: Hacks im M$ Quellcode We are morons)
« Letzte Änderung: 28.02.04 - 14:00:25 von Thomas Völk »
Thomas

Fortunately, I'm adhering to a pretty strict, uh, drug, uh, regimen to keep my mind, you know, uh, limber.

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re:aus Skript gestarteter Agent läuft semi-synchron?
« Antwort #9 am: 28.02.04 - 14:57:02 »
Ineressante Ueberlegung von Thomas (nebst einem interessanten Link). Dieser Sichtweise könnte ich mich irgendwie auch anschliessen.
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline Gandhi

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 918
  • Geschlecht: Männlich
  • Domino for the masses
Re:aus Skript gestarteter Agent läuft semi-synchron?
« Antwort #10 am: 28.02.04 - 15:52:05 »
Idee:

Agent (auf Server) setzt ein bestimmtes Flag (z.b. AgentTerminated=True)

folgende 'Schleife' im Event:

starte Agent (auf Server)
hole doc (von Server)
gucke, ob der Agent ein bestimmtes Flag im doc gesetzt hat.
Solange er das nicht tut - Schleife wiederholen....nicht performant...evtl. eine Endlosschleife - vielleicht aber ein Versuch wert

Würde mich interessieren, ob sowas geht....
Der "Wenn ich" und der "Hätt' ich" das sind zwei arme Leut'
oder für den Süden:
Hatti Tatti Wari - san drei Larifari

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re:aus Skript gestarteter Agent läuft semi-synchron?
« Antwort #11 am: 28.02.04 - 18:18:57 »
Ich glaube, das ist genau das, was Axel in seinem ersten Posting meinte, als er dieses schrieb:



Ich könnte jetzt theoretisch im Maskencode vor doc.save
sowas schreiben wie
Code
while doc.getItemValue("aFlag")(0) <> "1"
wend

und im Agenten:
/*
iteriere gesamtes Resultset
doc.replaceItemValue("aFlag", "1")
*/
und ein paar Sicherheiten einbauen (Zeitvariable in Endlos-while wend in Masken-code.



Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline Axel_Janssen

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 769
Re:aus Skript gestarteter Agent läuft semi-synchron?
« Antwort #12 am: 28.02.04 - 19:44:38 »
Ja. Genau. Und sowas will ich eigentlich nicht machen.
... design patterns are abstract designs that help identify the structure and elements involved in a specific design solution. From this, a concrete implementation can be produced.
Kyle Brown

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz