Probleme beim Erstellen von Kalendereinträgen via Agent

  • <font face="Arial"><font size="2">Hallo, <br />
    </font>
    <p><font size="2">ich habe eine DB die Kalendereintr&auml;ge in den User-Mailfiles erstellen soll. <br />
    </font></p>
    <p><font size="2">Zu diesem Zweck gibt&acute;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 &ouml;ffnen und die Eintr&auml;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&uuml;hrung ab!<br />
    </font></strong></p>
    <p><font size="2">F&uuml;hre ich das identische Skript &uuml;ber eine Schaltfl&auml;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(&quot;Agent-Protokoll&quot;)<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(&quot;&quot;)<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(&quot;SendTo&quot;)<br />
    Call agentLog.LogAction(empfaenger(0) &amp; &quot; Empfaenger aus Referenz-Doc&quot;)<br />
    </code></p>
    <p><code>'oeffne Adressbuch Spb auf aktuellem Server<br />
    server = db.Server<br />
    Set adressbuch = s.GetDatabase(server, &quot;names.nsf&quot;)<br />
    Call agentLog.LogAction(adressbuch.FileName &amp; &quot; &quot; &amp; adressbuch.Server &amp; &quot; Dateiname und Server des Adressbuch&quot;)<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 &amp; &quot; Suchbegriff&quot;)<br />
    Set collection = adressbuch.Search({FullName = &quot;} &amp; searchFormula &amp; {&quot;}, Nothing, 1)<br />
    Call agentLog.LogAction(collection.Count &amp; &quot; Anzahl der Treffer-Dokumente&quot;)<br />
    Set personendoc = collection.GetFirstDocument<br />
    Call agentLog.LogAction(personendoc.UniversalID &amp; &quot; UID des Personen-Dok&quot;)<br />
    </code></p>
    <p><code>'lese mailserver/file aus Personendokument &amp; oeffne MailDB<br />
    mailserver = personendoc.GetItemValue(&quot;MailServer&quot;)<br />
    maildb = personendoc.GetItemValue(&quot;MailFile&quot;)<br />
    Call agentLog.LogAction(mailserver(0) &amp; &quot; Mail-Server&quot;)<br />
    Call agentLog.LogAction(maildb(0) &amp; &quot; Mail-File&quot;)<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(&quot;Mail-DB wurde erfolgreich ge&ouml;ffnet!&quot;)<br />
    Else<br />
    Call agentLog.LogAction(&quot;Mail-DB konnte nicht ge&ouml;ffnet werden!&quot;)<br />
    End If<br />
    Call agentLog.LogAction(MailFile.ReplicaID &amp; &quot; Replik-ID der Mail-DB&quot;)<br />
    Call agentLog.LogAction(MailFile.CurrentAccessLevel &amp; &quot; Aktuelles Zugriffsrecht auf die Mail-DB&quot;)<br />
    </code></p>
    <p><code>'erstelle termindoc in pers&ouml;nlicher MailDB<br />
    Set termindoc = New NotesDocument(MailFile)<br />
    Call agentLog.LogAction(termindoc.UniversalID &amp; &quot; UID des Termin-Dok&quot;)<br />
    ...<br />
    </code></p>
    <p><font face="Arial" size="2">Und hier noch dass Protokoll bei Ausf&uuml;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&uuml;r jeden Rat dankbar!</font></p>
    <p><font face="Arial"><br />
    <font size="2">Gr&uuml;&szlig;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>&amp;nbsp;</p>
    <p>&amp;nbsp;</p>
    </font>

  • 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

    Life is not a journey to the grave with the intention of arriving safely in a pretty and well-preserved body, but rather to skid in broadside, thoroughly used up, totally worn out, and loudly proclaiming "Wow, what a ride!!! :evil:
    Beschleunigung ist, wenn die Tränen der Ergriffenheit waagrecht zum Ohr hin abfliessen - Walter Röhrl

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

    • Offizieller Beitrag

    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.:

    Code
    Sub 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

    Rein logisches Denken verschafft uns keine Erkenntnis über die wirkliche Welt.
    Alle Erkenntnis der Wirklichkeit beginnt mit der Erfahrung und endet mit ihr.
    Alle Aussagen, zu denen man auf rein logischen Wegen kommt, sind, was die Realität angeht, vollkommen leer.
    Albert Einstein

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

    Life is not a journey to the grave with the intention of arriving safely in a pretty and well-preserved body, but rather to skid in broadside, thoroughly used up, totally worn out, and loudly proclaiming "Wow, what a ride!!! :evil:
    Beschleunigung ist, wenn die Tränen der Ergriffenheit waagrecht zum Ohr hin abfliessen - Walter Röhrl

  • 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