Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: dasRalph am 13.11.03 - 12:19:56

Titel: call doc.MakeResponse(doc2)
Beitrag von: dasRalph am 13.11.03 - 12:19:56
Hallo!


Ich hab mal wieder ein Problem, das
Code
"Call doc.MakeResponse(doc2)"

geht nicht :(

Folgende Situation:
Mit
Code
Dim agent As NotesAgent
Set agent = db.GetAgent("DatenÜbertragen")
agent.RunOnServer(pdoc.NoteID)
rufe ich einen Agenten auf, dies geht soweit. Der Agent ist so aufgebaut (unwichtiges weggelassen):
Code
(Declarations)
     Dim session As NotesSession
     Dim db As NotesDatabase
     Dim agent As NotesAgent
     Dim cdoc As NotesDocument

Initialize
     Set session = New NotesSession
     Set db = session.CurrentDatabase
     Set cdoc = db.GetDocumentByID(agent.ParameterDocID)
     Call main

main
     Dim doc As NotesDocument
     Set doc = New NotesDocument(db)
     Call doc.MakeResponse(cdoc) 

Wenn nun der "Call doc.MakeResponse(cdoc)"-Aufruf kommt, dann bekomme ich ein "Fehlermeldung von Agent 'DatenÜbertragen': Type mismatch". Wenn ich selben Aufruf mit "Call doc.MakeResponse(db.GetDocumentByID(agent.ParameterDocID))" ausführe dann geht's. Andere Befehle in main kennen aber cdoc, warum kann MakeResponse damit nicht umgehen?

Danke! Ralph
Titel: Re:call doc.MakeResponse(doc2)
Beitrag von: Semeaphoros am 13.11.03 - 12:29:56
Weil das Dokument nur im Memory existiert und noch nicht abgespeichert ist. MakeResponse geht nur mit gespeicherten Dokumenten (macht irgendwie auch Sinn)
Titel: Re:call doc.MakeResponse(doc2)
Beitrag von: Axel am 13.11.03 - 12:35:17
@Semeaphoros

Zitat

Wenn ich selben Aufruf mit "Call doc.MakeResponse(db.GetDocumentByID(agent.ParameterDocID))" ausführe dann geht's.


Warum dann das? Kann ja irgendwie nicht sein, oder?   ??? ???


Axel
Titel: Re:call doc.MakeResponse(doc2)
Beitrag von: Semeaphoros am 13.11.03 - 12:58:22
Ist das mit dem Aufruf übergebene Doc gespeichert oder nicht?

Funktioniert der GetByID mit einem noch nicht gespeicherten Doc?


In älteren Versionen hat man die Doc-UNID (und vermutlich auch die Doc-ID) erst bekommen, wenn man das Doc gespeichert hatte, sonst gabs nen leeren String, und manchmal klappte es trotzdem, sprich es ist nicht soo ganz konsequent.
Titel: Re:call doc.MakeResponse(doc2)
Beitrag von: Axel am 13.11.03 - 13:07:06
@Semeaphoros

Ach so du meintest das Hauptdokument. Davon bin ich eigentlich ausgegangen, dass es bereits vorhanden ist.


@dasRalph

Ich hab das Ganze mal getestet, allerdings nicht auf dem Server, und es hat funktioniert.

Was passiert denn, wenn du den Code in Main nach Initialize packst. Funktioniert es dann. Und mir fehlt die Zeile

Set agent = session.CurrentAgent

bevor du dir cdos holst. Fehlt die wirklich oder hast du die nur weggelassen?

Was passiert den wenn du den Agenten lokal aufrufst ?


Axel
Titel: Re:call doc.MakeResponse(doc2)
Beitrag von: dasRalph am 13.11.03 - 21:45:49
Set agent = session.CurrentAgent

Ich hatte die Zeile vergessen :(

Was passiert den wenn du den Agenten lokal aufrufst ?

Dann kommt das selbe bei raus. Das Dokument ist beim Aufruf des Agenten gespeichert, der Agent wird per Script im QueryClose des Dokumentes aufgerufen. Der Agent kann ja auf das "cdoc" zugreifen (Daten in eine AccessDB schreiben und so) nur er kann mit dem "cdoc" kein Antwortdokument erstellen. Wenn ich aber  "Call doc.MakeResponse(db.GetDocumentByID(agent.ParameterDocID))" mache dann gehts was doch eigentlich das selbe wie "Call doc.MakeResponse(cdoc)" ist


Ralph