Das Notes Forum

Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: pimpfling am 23.09.09 - 11:42:56

Titel: in einer anderen Datenbank auf das erstellen eines Doks warten...
Beitrag von: pimpfling am 23.09.09 - 11:42:56
Hallo,

ich habe hier zwei DBs in denen parallel gearbeitet wird.
Mit einem Agenten in der einen DB will ich jetzt prüfen ob es ein bestimmtes Dokument in der anderen DB gibt.
Ich habe eine eindeutige ID des entsprechenden Doks und wollte das per

Set View = DB.GetView("($ID)")
Set Document = View.GetDocumentByKey(ID)

machen.
Manchmal steht das Dok noch nicht zur Verfügung oder existiert einfach noch nicht.
Dann bekomme ich eine entsprechende Fehlermeldung.
Wie kann ich jetzt aktiv prüfen ob das Dokument schon existiert und dann erst meinen Agenten weiter laufen lassen???

Vielen Dank
Stefan
Titel: Re: in einer anderen Datenbank auf das erstellen eines Doks warten...
Beitrag von: klaussal am 23.09.09 - 11:48:44
Mit "sleep" einige Zeit warten und dann wieder von vorn.
Titel: Re: in einer anderen Datenbank auf das erstellen eines Doks warten...
Beitrag von: pimpfling am 23.09.09 - 11:56:40
So hier?

Do While (Document Is Nothing)
   Sleep 2      
   Set Document = View.GetDocumentByKey(ID)
Loop
Titel: Re: in einer anderen Datenbank auf das erstellen eines Doks warten...
Beitrag von: ascabg am 23.09.09 - 11:58:15
Prinzipiell schon.

Nur frage ich, aktualisiert auch die View, in der das Dokument gesucht wird?


Andreas
Titel: Re: in einer anderen Datenbank auf das erstellen eines Doks warten...
Beitrag von: koehlerbv am 23.09.09 - 11:59:39
Und was passiert, wenn aus irgendeinem Grund das Dokument doch nicht erstellt wird? "In Ewigkeit - Amen!", sprach die Endlosschleife ...

Bernhard
Titel: Re: in einer anderen Datenbank auf das erstellen eines Doks warten...
Beitrag von: cebolina am 23.09.09 - 12:02:09
Hallo Stefan,

Frage zum  Verständnis für mich: Woher hst du die DocID, wenn das Dokument noch garnicht existiert?

und wenn du die ID schon hast, warum verwendest du nicht "GetDocumentByUNID"? Dann brauchst du auch keine view.

Gruß
Stefan
Titel: Re: in einer anderen Datenbank auf das erstellen eines Doks warten...
Beitrag von: ascabg am 23.09.09 - 12:04:15
@cebolina (Stefan)

Zitat
Woher hst du die DocID, wenn das Dokument noch garnicht existiert?
Weil es wahrscheinlich eine eigene selbst erstellte eindeutige ID ist.


Andreas
Titel: Re: in einer anderen Datenbank auf das erstellen eines Doks warten...
Beitrag von: koehlerbv am 23.09.09 - 12:04:36
Stefan, und wieso schliesst Du von "ID" auf die Document Universal ID?

Bernhard
Titel: Re: in einer anderen Datenbank auf das erstellen eines Doks warten...
Beitrag von: pimpfling am 23.09.09 - 12:07:40
also die ID ist eine selbst erzeugte, nicht die UNID. Sonst könnte ich sie ja nicht kennen :)

Set View = DB.GetView("IDView")
Set Document = View.GetDocumentByKey(ID)

Do While (Document Is Nothing)
   Sleep 2      
   Set View = DB.GetView("IDView")
   Set Document = View.GetDocumentByKey(ID)
   Print "Sleep 2"
Loop

Die View ist jetzt auf "Refresh: automatic" und "Discard: after each use"

Trotzdem bekomme ich einen Timeout, da es sich hierbei um einen Before New Mail arrives Agenten handelt, also nix mit Amen ;)
Titel: Re: in einer anderen Datenbank auf das erstellen eines Doks warten...
Beitrag von: pimpfling am 23.09.09 - 12:10:54
Bisher habe ich das Problem mit einem einmaligen sleep 15 gelöst, das ist mir aber zu unsauber...
Ich wollte das jetzt mal mit ner Schleife prüfen und kriegst nicht hin...
Titel: Re: in einer anderen Datenbank auf das erstellen eines Doks warten...
Beitrag von: ascabg am 23.09.09 - 12:16:19
Jetzt sind dann glaube ich noch ein paar weitere Informationen notwendig.

Agent "befor new mail arrives"
-> wann soll denn das Dokument in der 2. Db denn angelegt werden, dass der Agent in der 1. Db es finden kann?


Andreas
Titel: Re: in einer anderen Datenbank auf das erstellen eines Doks warten...
Beitrag von: pimpfling am 23.09.09 - 12:22:54
Es läuft wie gesagt relativ parallel ab.
Beide DBs werden per Mail 'gefüttert'.
Die eine (die mit dem Agenten) wird nicht immer mit 'gefüttert'
Jetzt will ich das der Agent prüft ob das Dokument schon existiert und erst dann weiterläuft...
Wie gesagt, wenn ich einen Sleep 15 vorneweg nehme und keine Schleife - gehts wunderbar, ist mir nur zu unsauber.
Titel: Re: in einer anderen Datenbank auf das erstellen eines Doks warten...
Beitrag von: pimpfling am 23.09.09 - 12:31:43
Habs...

Do While (Document Is Nothing)
   Sleep 2     
   Set View = DB.GetView("IDView")
   Set Document = View.GetDocumentByKey(ID)
   call View.refresh
   Print "Sleep 2"
Loop

Das refresh hats gebracht...
Titel: Re: in einer anderen Datenbank auf das erstellen eines Doks warten...
Beitrag von: cebolina am 23.09.09 - 12:40:16
Stefan, und wieso schliesst Du von "ID" auf die Document Universal ID?

Gute Frage! Stimmt natürlich - ID muss ja nicht die DocID sein.
Sorry, dass ich mich eingemischt habe.

Stefan
Titel: Re: in einer anderen Datenbank auf das erstellen eines Doks warten...
Beitrag von: ascabg am 23.09.09 - 12:42:31
Eigentlich sollte auch

Code
Set view = DB.GetView("IDView")

Do While (Document Is Nothing)
   Sleep 2
   call View.refresh
   Set Document = View.GetDocumentByKey(ID)
   Print "Sleep 2"
Loop

funktionieren.


Andreas
Titel: Re: in einer anderen Datenbank auf das erstellen eines Doks warten...
Beitrag von: pimpfling am 23.09.09 - 13:13:20
Stefan, und wieso schliesst Du von "ID" auf die Document Universal ID?

Gute Frage! Stimmt natürlich - ID muss ja nicht die DocID sein.
Sorry, dass ich mich eingemischt habe.

Stefan

hihi, und ich dachte erst ich bin gemeint...
Titel: Re: in einer anderen Datenbank auf das erstellen eines Doks warten...
Beitrag von: pimpfling am 23.09.09 - 13:15:53
Eigentlich sollte auch

Code
Set view = DB.GetView("IDView")

Do While (Document Is Nothing)
   Sleep 2
   call View.refresh
   Set Document = View.GetDocumentByKey(ID)
   Print "Sleep 2"
Loop

funktionieren.


Andreas


Ist sogar noch besser...
Dankeschön :)
Titel: Re: in einer anderen Datenbank auf das erstellen eines Doks warten...
Beitrag von: DAU-in am 23.09.09 - 13:26:24
und wenn das Dokument nie erstellt wird?
Wäre es nicht besser noch einen 'Zähler' mitlaufen zu lassen, der nach einer bestimmten Anzahl von Durchläufen abbricht?

Grüsse

Dau-in
Titel: Re: in einer anderen Datenbank auf das erstellen eines Doks warten...
Beitrag von: klaussal am 23.09.09 - 16:08:36
Klar. Ich würde nach x Minuten mit einer FM abbrechen.
Aber das sollte eigentlich jeder Programmierer wissen.
Deshalb hatte ich am Anfang auch nur den Sleep erwähnt, weil ich deb Rest für selbstverständlich gehalten habe.
Titel: Re: in einer anderen Datenbank auf das erstellen eines Doks warten...
Beitrag von: koehlerbv am 23.09.09 - 16:19:41
Siehe Post #4. Bevor aus einem "hard break" ein "heart break" wird  ;)

Bernhard