Hi zusammen,
Ich arbeite aktuell an einer universellen Taskliste für die Nutzer. Dazu soll ein Agent aus einigen Datenbanken Informationen abgreifen, wie viele ToDo's für jeden einzelnen Nutzer vorliegen.
Dazu wird folgender Code genutzt:
Set doc = dc.GetFirstDocument
While Not doc Is Nothing
NotesName = doc.NotesName(0)
Print NotesName
'Call logAgent.logAction("Zugriff auf DBs für " + NotesName)
doc.CtAPW = Evaluate ( | @Elements(@DbLookup( "" : "NoCache" ; "LNS001DB" : "Workflow\\VUN\\VUN.nsf" ; "MyActivities" ; "| + NotesName + |" ; 4)) |)
doc.CtFremdMAToGo = Evaluate ( | @Elements(@DbLookup( "" : "NoCache" ; "LNS001DB" : "Workflow\\VUN\\VUN.nsf" ; "MyActivities" ; "| + NotesName + |" ; 4)) |)
doc.CtBEWERB = Evaluate ( | @Elements(@DbLookup( "" : "NoCache" ; "LNS001DB" : "ESG\\Mail-In\\Bewerber.nsf" ; "MyActivities" ; "| + NotesName + |" ; 4)) |)
doc.CtCar = Evaluate ( | @Elements(@DbLookup( "" : "NoCache" ; "LNS001DB" : "IntroProd\\ESGCAR2.nsf" ; "MyActivities" ; "| + NotesName + |" ; 4)) |)
doc.CtKantine = Evaluate ( | @Elements(@DbLookup( "" : "NoCache" ; "LNS001DB" : "Workflow\\Kantine\\Kantine_Appl.nsf" ; "MyActivities" ; "| + NotesName + |" ; 4)) |)
doc.CtPA = Evaluate ( | @Elements(@DbLookup( "" : "NoCache" ; "LNS001DB" : "Workflow\\PA\\Personal.nsf" ; "MyActivities" ; "| + NotesName + |" ; 4)) |)
doc.CtReise = Evaluate ( | @Elements(@DbLookup( "" : "NoCache" ; "LNS001DB" : "Workflow\\Reise\\ReiseSap.nsf" ; "MyActivities" ; "| + NotesName + |" ; 4)) |)
doc.CtUSA = Evaluate ( | @Elements(@DbLookup( "" : "NoCache" ; "LNS001DB" : "Workflow\\Überstunden\\Überstundenantrag.nsf" ; "MyActivities" ; "| + NotesName + |" ; 4)) |)
doc.CtWB = Evaluate ( | @Elements(@DbLookup( "" : "NoCache" ; "LNS001DB" : "Workflow\\Weiterbildung\\wbildzwfappl.nsf" ; "MyActivities" ; "| + NotesName + |" ; 4)) |)
doc.CtSWG = Evaluate ( | @Elements(@DbLookup( "" : "NoCache" ; "LNS001DB" : "Workflow\\SoftwareGenehmigung\\Software.nsf" ; "MyActivities" ; "| + NotesName + |" ; 4)) |)
Call doc.Save (True, False)
Set doc = dc.Getnextdocument(doc)
Wend
Der Agent läuft in der selben Datenbank, in der der Code liegt und es gibt ca. 1700 Dokumente (also Nutzer). Es wird dann für jeden Nutezr in die Datenbanken auf eine spezielle Ansicht zugegriffen und für den Nutzer wird die Anzahl der Elemente abgefragt. Die Ansicht in der jeweiligen Datenbank ist schon so konfiguriert, dass dort eine derartige Anfrage genutzt werden kann und die Informationen ansich bekomme ich auch.
Was jetzt mein Problem ist, ist die Performance (wie man sich das vllt denken kann). Starte ich den Agenten auf dem gleichen Server, dauert die Abfrage 2:30 Minuten (variiert natürlich, aber wäre ok). Der Agent soll aber ca. alle 10 Minuten laufen um die Daten stets aktuell zu halten. Daher hat unser Admin die Datenbank inkl. Agent auf einen anderen Server verschoben. Dort dauert die Abfrage aber leider weit über 10 Minuten, da hier über das Netzwerk auf den anderen Server zugegriffen werden muss.
Daher nun zwei Fragen nach Ideen:
- Kennt jemand eine andere Lösung als mit so einem DBLookup an die gewünschten Infos zu kommen?
- Mal abgesehen davon, dass die Leitung zwischen den beiden Server langsam sein kann - welche Möglichkeiten habe ich, vom anderen Server aus zu prüfen, warum das so langsam ist?
Vielen Dank für Tipps!
Grüße,
Mathias