<font face="Arial"><font size="2">Hallo, <br />
</font>
<p><font size="2">ich habe eine DB die Kalendereinträge in den User-Mailfiles erstellen soll. <br />
</font></p>
<p><font size="2">Zu diesem Zweck gibt´s einen Agenten der <br />
- mit einer User-ID signiert ist die Zugriff auf die Mailfiles hat und <br />
- sich aus dem Adressbuch Homeserver und Pfad des User-Mailfile holt um dann <br />
- die Mail-DB zu öffnen und die Einträge zu erstellen. <br />
</font></p>
<p><strong><font size="2">Liegen DB und Mail-DB auf dem gleichen Server klappt das ganze auch prima. Sobald aber z.B. meine DB auf Server A und das Mailfile auf Server B liegt bricht der Agent bei der Ausführung ab!<br />
</font></strong></p>
<p><font size="2">Führe ich das identische Skript über eine Schaltfläche am Client aus funktioniert die Eintragung einwandfrei - egal wo die Mail-DB liegt. <br />
</font></p>
<p><font size="3"><font size="2">Hier der relevante Teil vom Skript:</font> <br />
</font></p>
<p><code>Sub Initialize<br />
Dim agentLog As New NotesLog("Agent-Protokoll")<br />
Call agentLog.OpenAgentLog<br />
Dim s As New notessession <br />
Dim db As NotesDatabase<br />
Dim adressbuch As NotesDatabase<br />
Dim MailFile As NotesDatabase<br />
Dim doc As NotesDocument<br />
Dim refdoc As NotesDocument<br />
Dim ccdoc As NotesDocument<br />
Dim termindoc As NotesDocument<br />
Dim item As NotesItem<br />
Dim a As NotesAgent<br />
Dim rtstyle As NotesRichTextStyle<br />
Dim t As New NotesDateTime("")<br />
Dim rtitem As Variant<br />
Dim empfaenger As Variant<br />
Dim collection As NotesDocumentcollection<br />
Dim server As String<br />
Dim mailserver As Variant<br />
Dim maildb As Variant<br />
Dim personendoc As NotesDocument<br />
Dim uidtermindocperson As String<br />
Dim searchFormula As String<br />
Dim nam As NotesName<br />
Dim Mailbox As NotesDatabase<br />
</code></p>
<p><code>'oeffne Referenzdokument aus DB ZTV<br />
Set db = s.CurrentDatabase<br />
Set a = s.CurrentAgent<br />
Set refdoc = db.GetDocumentByID(a.ParameterDocID)<br />
</code></p>
<p><code>'lese terminempfaenger aus Referenzdokument<br />
empfaenger = refdoc.GetItemValue("SendTo")<br />
Call agentLog.LogAction(empfaenger(0) & " Empfaenger aus Referenz-Doc")<br />
</code></p>
<p><code>'oeffne Adressbuch Spb auf aktuellem Server<br />
server = db.Server<br />
Set adressbuch = s.GetDatabase(server, "names.nsf")<br />
Call agentLog.LogAction(adressbuch.FileName & " " & adressbuch.Server & " Dateiname und Server des Adressbuch")<br />
</code></p>
<p><code>'suche personendokument im adressbuch<br />
</code><code>Set nam = s.CreateName(empfaenger(0))<br />
searchFormula = nam.Canonical<br />
Call agentLog.LogAction(searchFormula & " Suchbegriff")<br />
Set collection = adressbuch.Search({FullName = "} & searchFormula & {"}, Nothing, 1)<br />
Call agentLog.LogAction(collection.Count & " Anzahl der Treffer-Dokumente")<br />
Set personendoc = collection.GetFirstDocument<br />
Call agentLog.LogAction(personendoc.UniversalID & " UID des Personen-Dok")<br />
</code></p>
<p><code>'lese mailserver/file aus Personendokument & oeffne MailDB<br />
mailserver = personendoc.GetItemValue("MailServer")<br />
maildb = personendoc.GetItemValue("MailFile")<br />
Call agentLog.LogAction(mailserver(0) & " Mail-Server")<br />
Call agentLog.LogAction(maildb(0) & " Mail-File")<br />
Set MailFile = s.GetDatabase(mailserver(0) ,maildb(0))<br />
If Not MailFile.IsOpen Then<br />
Call MailFile.Open(mailserver(0),maildb(0))<br />
End If<br />
If MailFile.IsOpen Then<br />
Call agentLog.LogAction("Mail-DB wurde erfolgreich geöffnet!")<br />
Else<br />
Call agentLog.LogAction("Mail-DB konnte nicht geöffnet werden!")<br />
End If<br />
Call agentLog.LogAction(MailFile.ReplicaID & " Replik-ID der Mail-DB")<br />
Call agentLog.LogAction(MailFile.CurrentAccessLevel & " Aktuelles Zugriffsrecht auf die Mail-DB")<br />
</code></p>
<p><code>'erstelle termindoc in persönlicher MailDB<br />
Set termindoc = New NotesDocument(MailFile)<br />
Call agentLog.LogAction(termindoc.UniversalID & " UID des Termin-Dok")<br />
...<br />
</code></p>
<p><font face="Arial" size="2">Und hier noch dass Protokoll bei Ausführung (DB liegen auf verschiedenen Server):<br />
</font><code>Started running agent 'TerminEintragung' on 25.06.2007 15:05:51<br />
Running on all documents in database: 52 total<br />
Found 52 document(s) that match search criteria<br />
25.06.2007 15:05:51: Bernhard Bauer/REGENSBURG/SPB Empfaenger aus Referenz-Doc<br />
25.06.2007 15:05:51: names.nsf CN=NREGENS3/OU=SERVER/O=SPB Dateiname und Server des Adressbuch<br />
25.06.2007 15:05:51: CN=Bernhard Bauer/OU=REGENSBURG/O=SPB Suchbegriff<br />
25.06.2007 15:05:52: 1 Anzahl der Treffer-Dokumente<br />
25.06.2007 15:05:52: 775C1EA61E9913B0C1256E990046E6FA UID des Personen-Dok<br />
25.06.2007 15:05:52: CN=AN068036X1/OU=SERVER/O=SPB Mail-Server<br />
25.06.2007 15:05:52: mail\u759376 Mail-File<br />
Ran LotusScript code<br />
</code><font face="Helv" size="2"></font></p>
<p><font face="Arial" size="2">Bin im Mom ziemlich ratlos und für jeden Rat dankbar!</font></p>
<p><font face="Arial"><br />
<font size="2">Grüße</font></font><font size="2"> </font></p>
<p><font size="2"></font></p>
<p><font size="2"></font></p>
<font size="2">Martin</font>
<p>&nbsp;</p>
<p>&nbsp;</p>
</font>
Probleme beim Erstellen von Kalendereinträgen via Agent
- heimat1978
- Erledigt
-
-
Magst du Code bitte in \[code\]-Abschnitte packen? So ein zerfleddertes Design ist echt schlimm zu lesen...
Was den Abbruch angeht: es gibt im Serverdokument den Punkt "Trusted Servers" (dt.: "Vertrauenswürdige Server"). Der muss entsprechend gefüllt sein, damit dein Vorhaben klappt. Zu Einzelheiten: siehe Admin-Hilfe
-
... so - hoffe die Lesbarkeit ist jetzt etwas besser geworden ;-)!
In den vertrauenswürdigen Servern findet sich kein Eintrag - kann ich leider auch nicht ohne weiteres ändern (Admin-Hoheit unseres Rechenzentrums...)
Aber wieso klappt dann die Ausführung wenn ich dass Skript via Schaltfläche am Client direkt ausführe?
Und dann hab ich da in ner anderen DB auf dem selben Server einen ganz ähnlichen Agenten der ebenfalls Kalendereinträge vornimmt und prima funzt - einziger für mich ersichtlicher Unterschied ist dass dieser Agent periodisch ausgeführt wird.
Nach wie vor ratlos...
Martin
-
Hallo Martin,
grundsätzlich besteht seit Anfang an die Begrenzung, das Server-Agenten - also Agenten, die irgendwie automatisch auf dem Server gestartet werden, z. B. zeitgesteuert - niemals nicht auf Datenbanken auf anderen Servern zugreifen dürfen.
Mit Notes 6 wurde eine Möglichkeit geschaffen, dass Server einander "vertrauen". Vertraut Server A dem Server B, dann dürfen Agenten, die auf Server B laufen auch Datenbanken auf Server A öffnen.
Es gibt ein Feld in den Sicherheitseinstellungen im Server-Dokument, wo die vertrauenswürdigen Server eingetragen werden können. Das ist das Feld, das RockWilder meinte.
Also entweder bekommst du das Feld entsprechend gesetzt oder du musst mit der Sicherheitseinschränkung leben.
Ciao
Thomas
http://www.assono.de/blog.nsf/ -
Du solltest den Code und Tags [ code][/code] (Leerzeichen im ersten [ code] entfernen oder die entsprechende Schaltfläche im Editor verwenden) einfassen, dann ist es leichter lesbar und die Einrückungen bleiben erhalten.
z. Bei.:
CodeSub Initialize Dim agentLog As New NotesLog("Agent-Protokoll") Call agentLog.OpenAgentLog Dim s As New notessession Dim db As NotesDatabase Dim adressbuch As NotesDatabase Dim MailFile As NotesDatabase ...
Gruß
Dirk -
Zitat
Aber wieso klappt dann die Ausführung wenn ich dass Skript via Schaltfläche am Client direkt ausführe?
Du beantwortest damit deine Frage selbst: es wird eben über den "Umweg" Client auf Server A und Server B zugegriffen. -
Ok, ich versuch auf jeden Fall mal den Eintrag in den vertrauenswürdigen Servern gesetzt zu kommen.
Zitat
...grundsätzlich besteht seit Anfang an die Begrenzung, das Server-Agenten - also Agenten, die irgendwie automatisch auf dem Server gestartet werden, z. B. zeitgesteuert - niemals nicht auf Datenbanken auf anderen Servern zugreifen dürfen.
...Trotzdem: in ner anderen DB die nur auf Server A liegt läuft ein periodischer Agent der auf DBen von Server A bis Z zugreift - erfolgreich und bei im wesentlichen identischem Aufbau.
Hab beide Agenten nochmal verglichen und festgestellt, dass der Agent der funzt von Server A signiert wurde, während mein Agent "nur" mit ner Benutzer-ID signiert wurde - kann dass die Ursache sein?
PS: und der nächste Beitrag wird vernünftig formatiert ;-))
-
Hey -
grad mal 2 Wochen später hab ich den Eintrag in den vertrauenswürdigen Servern bekommen -
und schon klappt´s auch mit dem Zugriff serverübergreifend :-D!Dank an alle & macht weiter so!
Schöne Grüße
Martin