Domino 9 und frühere Versionen > ND8: Administration & Userprobleme

RunOnServer, ganz komisches Problem

(1/3) > >>

botschi:
Hallo,

in einer Maske kann man ein Passwort eingeben, welches beim Speichern das HTTP-Passwort im Personendokument ändern soll.
Im Querysave der Maske wird ein Agent mit
--- Code: ---Call agent.RunOnServer(Cstr(gvBackenddoc.NoteID))
--- Ende Code ---
aufgerufen.

Der Code des Agenten ist unten aufgeführt.
Nun gehts los:
In der Serverkonsole wird ein "Gooooo" angezeigt, also doc gefunden.
Dann wird ein "Fehler13" in der Serverkonsole ausgegeben, also lief der Agent auf einen Fehler.
Zeile 13 ist diese: Set doc = db.GetDocumentByID(agent.ParameterDocID)

Das Personendokument im Adressbuch hat einen neuen Stempel (also gespeichert durch den Agenten), aber das neue Passwort funktioniert nicht.

Wenn ich den Code aus dem Agenten direkt in das Querysave werfe, läuft alles super.

1. Wisst ihr, warum der Agent meint, er hat einen Fehler in Zeile 13, obwohl er erst fehlerfrei über die Zeile läuft?
2. Wisst ihr vielleicht auch noch, warum das neue HTTP-Passwort per Agent nicht geht, aber aus dem Querysave direkt schon?

Ich brauche den Agenten, damit ich diesen mit dem Server signieren kann und der auf alle Personendokumente im Adressbuch Schreibrechte hat.

Vielen Dank für Hilfe!
Matthias


--- Code: ---Sub Initialize

Dim db As notesdatabase
Dim s As New NotesSession
Dim doc As NotesDocument
' Dim coll As NotesDocumentCollection
On Error Goto fehler
'#######
Dim agent As notesagent

Set agent = s.CurrentAgent
Set db = s.CurrentDatabase
Set doc = db.GetDocumentByID(agent.ParameterDocID)
If doc Is Nothing Then
Print "################ FEHLER ################"
Else
Print "################ Gooooooooooooo ################"
End If
'#######
Dim tmp As Variant
Dim tmp2 As Variant

' Set coll = db.UnprocessedDocuments
' Set doc = coll.GetFirstDocument

Dim passwort As String

passwort = doc.passwort(0)
tmp = Evaluate({@Password("| & passwort & |" )}, doc)
Print passwort
'tmp2 = Evaluate(|@Password("wurst2010")|, doc)

Dim adressdoc As NotesDocument
Dim adressdocview As NotesView
Dim adressbuch As NotesDatabase

Set adressbuch = s.GetDatabase(db.Server, "names.nsf")
Set adressdocview = adressbuch.GetView("(Person Common)")

Set adressdoc = adressdocview.GetDocumentByKey(doc.user(0), True)

adressdoc.HTTPPassword = tmp(0)

Call adressdoc.ComputeWithForm(True, False)
Call adressdoc.Save(True, False)
' Call adressbuch.Replicate( "Sametime2" )
Exit Sub

fehler:
Print "Fehler" & Cstr(Erl)
Exit Sub
End Sub
--- Ende Code ---

m3:
Der Agent ist mit der korrekten ID signiert?

--- Zitat ---If a Notes client invokes RunOnServer, security is through the signer of the agent.
--- Ende Zitat ---

Ich würden den Errorhandler umbauen auf
Print "Fehler #" & Str(Err) & ": " & Error$ & " in Zeile " & Cstr(Erl)

Damit solltest Du ein wenig mehr Infos bekommen.

botschi:
Hatte ich vergessen zu erzählen, tut mir leid.
Der Fehler ist 4270 Invalid note id.

Der Agent ist von mir unterzeichnet und ich bin der Master Blaster  ;D
Also u.a. sämtliche Rechte, jegliche Agenten (auch zeitgesteuert) auszuführen und die Personendoks im Adressbuch zu ändern.

Matthias

m3:
Das Dokument, dessen ID übergeben wird, ist
a) gespeichert und
b) auch in der DB, in welcher der Agent läuft, vorhanden?

botschi:
Ja, ein bereits bestehendes DOkument wird geöffnet und dann editiert.
Beim Speichern im Querysave ist dann der Aufruf des Agenten.
Ich dachte erst, im Querysave aufzurufen ist der Fehler, aber die NoteID darf sich ja nicht mehr ändern.

Der Agent und das Dokument sind in der gleichen DB.
Ich habe sogar aus Verzweiflung eine Vorgabeansicht und eine Vorgabemaske eben nochmal neu deklariert...

Warum läuft der Bock denn erst rüber und sagt "Goooo" und dann irgendwann wieder "nee, mach ich nicht"?
Ich verstehe das nicht....

Matthias

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln