Autor Thema: in einer anderen Datenbank auf das erstellen eines Doks warten...  (Gelesen 5185 mal)

Offline pimpfling

  • Senior Mitglied
  • ****
  • Beiträge: 367
  • Geschlecht: Männlich
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
Gruß Stefan

----------------------------------
EDV-Systeme verarbeiten, womit sie gefüttert werden. Kommt Mist rein, kommt Mist raus.

klaussal

  • Gast
Mit "sleep" einige Zeit warten und dann wieder von vorn.

Offline pimpfling

  • Senior Mitglied
  • ****
  • Beiträge: 367
  • Geschlecht: Männlich
So hier?

Do While (Document Is Nothing)
   Sleep 2      
   Set Document = View.GetDocumentByKey(ID)
Loop
Gruß Stefan

----------------------------------
EDV-Systeme verarbeiten, womit sie gefüttert werden. Kommt Mist rein, kommt Mist raus.

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Prinzipiell schon.

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


Andreas

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Und was passiert, wenn aus irgendeinem Grund das Dokument doch nicht erstellt wird? "In Ewigkeit - Amen!", sprach die Endlosschleife ...

Bernhard

Offline cebolina

  • Senior Mitglied
  • ****
  • Beiträge: 386
  • Geschlecht: Männlich
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
Server: Lotus Domino 9.0.1FP4 HF70
Client: Release 9.0.1FP6

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
@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

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Stefan, und wieso schliesst Du von "ID" auf die Document Universal ID?

Bernhard

Offline pimpfling

  • Senior Mitglied
  • ****
  • Beiträge: 367
  • Geschlecht: Männlich
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 ;)
Gruß Stefan

----------------------------------
EDV-Systeme verarbeiten, womit sie gefüttert werden. Kommt Mist rein, kommt Mist raus.

Offline pimpfling

  • Senior Mitglied
  • ****
  • Beiträge: 367
  • Geschlecht: Männlich
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...
Gruß Stefan

----------------------------------
EDV-Systeme verarbeiten, womit sie gefüttert werden. Kommt Mist rein, kommt Mist raus.

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
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

Offline pimpfling

  • Senior Mitglied
  • ****
  • Beiträge: 367
  • Geschlecht: Männlich
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.
Gruß Stefan

----------------------------------
EDV-Systeme verarbeiten, womit sie gefüttert werden. Kommt Mist rein, kommt Mist raus.

Offline pimpfling

  • Senior Mitglied
  • ****
  • Beiträge: 367
  • Geschlecht: Männlich
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...
Gruß Stefan

----------------------------------
EDV-Systeme verarbeiten, womit sie gefüttert werden. Kommt Mist rein, kommt Mist raus.

Offline cebolina

  • Senior Mitglied
  • ****
  • Beiträge: 386
  • Geschlecht: Männlich
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
Server: Lotus Domino 9.0.1FP4 HF70
Client: Release 9.0.1FP6

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
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

Offline pimpfling

  • Senior Mitglied
  • ****
  • Beiträge: 367
  • Geschlecht: Männlich
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...
Gruß Stefan

----------------------------------
EDV-Systeme verarbeiten, womit sie gefüttert werden. Kommt Mist rein, kommt Mist raus.

Offline pimpfling

  • Senior Mitglied
  • ****
  • Beiträge: 367
  • Geschlecht: Männlich
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 :)
Gruß Stefan

----------------------------------
EDV-Systeme verarbeiten, womit sie gefüttert werden. Kommt Mist rein, kommt Mist raus.

Offline DAU-in

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.129
  • Geschlecht: Weiblich
  • - unterwegs -
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
mühsam ernährt sich das Eichhörnchen

aktuelle Tätigkeit: Feldschubse

klaussal

  • Gast
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.

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Siehe Post #4. Bevor aus einem "hard break" ein "heart break" wird  ;)

Bernhard

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz