Wie rufst du denn den Agenten auf?
Du kannst ja an den Link die DocumentUniqueID anhängen (@DocumentUniqueID als Computed Text).
Und im Agenten kommst du dann mit der CGI-variable Query_String arbeiten.
set doc = session.documentContext
strDocUnid = doc.Query_String(0)
' hier noch ein bischen StringHandling.
set docRequest = dbCur.getDocumentByUNID(strDocUnid)
Nicht getestet. So die Richtung jedenfalls.
Hallo Nils,
Zuletzt habe ich Ingo's Idee folgend ein WebQuery..-Event benutzt, aber das WebQueryOpen. Der Agent wird dann auch wunderbar gestartet. Aber in dessen Init()-Methode erhielt ich über Session.DocumentContext auch nur id = 0.
Es stimmt hier schon dass die NoteID 0 ist,
aber das bedeutet noch lange nicht, dass Du das neue Webdokument (Session.DocumentContext ) nicht "weiterbearbeiten" kannst.
Als ich noch Web-DBs programmieren durfte, hab ich dies immer für allerlei automatisch generierte Übersichten / Navigatoren ect. verwendet.
Dim S As New notessession
Dim Doc As Notesdocument
Set Doc = S.DocumentContext
Call doc.ReplaceItemValue("Text", "HalloWelt " & doc.NoteID & " " & doc.UniversalID)
Dim rtitem As NotesRichTextItem
Set RTitem = doc.GetFirstItem("MeinHTML")
Call rtitem.AddNewline(1)
Call rtitem.AppendText("[<b>das war ich der wqopen um " & Cstr(Now()) & "</b><br>]")
der Trick dabei war das Richtext-Item "MeinHTML" Computed, ohne Vorgabwert zu machen, damit es in Formularen nicht auch noch als Eingabefeld angezeigt wird.
Du kannst auch einen doc.save einbauen, achte aber darauf, dass Du (wie oben beschrieben) dann das Feld bei jedem Aufruf im Web weiterschreibst.
Die UniversalID des Dokumentes erhälst Du bereits, auch wenn es noch nicht gespeichert ist.
Du kannst auch Daten aus deiner Datenbank zusammensammeln.
Hat bei mir immer wunderbar geklappt.
Dies:
Du kannst ja an den Link die DocumentUniqueID anhängen (@DocumentUniqueID als Computed Text).
Und im Agenten kommst du dann mit der CGI-variable Query_String arbeiten.
set doc = session.documentContext
strDocUnid = doc.Query_String(0)
' hier noch ein bischen StringHandling.
set docRequest = dbCur.getDocumentByUNID(strDocUnid)
sieht für mich als URL so aus:
http://deinserver.de/deinedb.nsf/ansicht/[UNID Dokument1]?OpenDocument&Doc2=[UNID Dokument2]
mit der Variablen Query_String kannst du Dir (auch schon im WebQueryOpen) im Dokument1 den hinteren Teil abholen:
Doc2=[UNID Dokument2]
und dann anhand der DocumentUniqueID von Dokument2 dessen Daten laden.
Ich hoffe ich hab hier nicht noch mehr Verwirrung gestiftet ;)
Grüsse, Pete(r)
Hallo Nils,
Möglicherweise (Sicher) bin ich auf dem falschen Weg. :-\
vielleicht hab ich auch dein Anliegen noch nicht ganz verstanden...
Ich möchte eigentlich nur aus einem gespeicherten und erneut geöffneten Dokument über einen link ein neues Dokument erzeugen und öffnen. Dieses soll dann ein Antwort-Dokument zum geöffneten werden.
Das mit den Antwortdokumenten (Maskeneigenschaft, 1.Reiter) und/oder
einer Vererbung von Daten (Formeln übernehmen Werte aus gewähltem Dokument Maskeneigenschaft, 2.Reiter)
hat bei Dir ja das Problem, dass Du im Web die Daten von Richtextfeldern nicht mitbekommst :-\
Sonst würde ein einfacher
@Command([Compose];"Antwort")
aus dem Dokument reichen.
Bisher kann ich aus einem gespeicherten Dokument einen Agent über einen link starten:
"<a href=\'http://" + SERVER_NAME + ":" + SERVER_PORT + "/" +
@GetProfileField("DBProfil"; "DBName"; Server) + "/" + "test" +
"?OpenAgent\'" + Titel + "</a>"
Kann ich direkt an "?OpenAgent" Parameter (z.B. mittels "&docid") hängen?
docid enthält dabei @DocumentUniqueId.
das müsste (hab leider nurnoch einen 6.5er Server) im Web gehen,
auch hier erhälst Du dann zwar für session.documentcontext keine "noteID"
aber mit doc.Query_String(0) erhälst du den Rest nach dem ? der aufrufenden URL.
Daraus kannst Du Dir wieder über die UNID die Daten des referenzierten Dokuments holen.
Der Link wäre so (zusammenzusetzen):
http://deinserver.de/deinedb.nsf/[Agent]?OpenAgent&Doc2=[UNID Dokument]
wobei du am besten @Text(@DocumentUniqueID) als UNID des Dokuments angibst.
im Agent kommen wird dann beim code von Axel an:
set doc = session.documentContext
strDocUnid = doc.Query_String(0)
' hier noch ein bischen StringHandling.
set docRequest = dbCur.getDocumentByUNID(strDocUnid)
wobei strDocUnid dann ersteinmal diesen Teil liefert:
OpenAgent&Doc2=[UNID Dokument]
Viel Erfolg, Pete(r)
P.S.: wo pstoitst Du Di hoibe?
Hallo Nils,
Hier gehts also um 2 Vorgehensweisen:
A. Dokument erbt Daten
Du sagst es hier doch selbst:
Es geht mir nur darum:
Aus einem im Webbrowser angezeigten Dokument docA heraus ein neues docB zu öffnen, und dieses docB dann als Antwortdokument des ersteren docA zu speichern.
wenn du den Link aus dem Dokument heraus hast
z.B. Action-Hotspot mit
@Command([Compose];"Antwort")
und im "Antwortdokument" die Maskeneigenschaft "Formeln übernehmen Werte aus gewähltem Dokument" (im 2.Reiter) aktiviert hast,
erzeugt Domino automatisch im Link eine "referenz".
Das "gewählte Dokument" aus dem übernommen werden, ist in diesem Fall das Dokument docA, in dem der Link ist.
(In einer Ansicht stehts Du in diesem moment ja nicht, aber im Dokument, was den selben Effekt hat, wurde wohl in der Help vergessen zu erwähen)
Um nun Daten zu vererben musst Du bei den Feldern (Maske DocB) die Feldnamen (des DocA) als Vorgabewert angeben, sonst kommt dort nichts an.
Hierbei können allerdings keine RT-Felder vererbt werden.
Der Link, der auf dem genannten Hospot liegt wird vom Domino-Server in etwa so erzeugt:
http://deinserver.de/deinedb.nsf/[ansicht]/[UNID DocB]?ComposeDocument&ParentUNID=[UNID DocA]
das &ParentUNID=[UNID DocA] ist dabei das Relevante.
B. Dokument holt sich die Daten per Agent/bzw. Agent schreibt Daten ins Dokument
Die andere Variante mit dem Agenten hatte natürlich noch einen kleinen Haken:
Aber! dann kommt mein nächstes Problem: Ich hätte zwar Zugriff auf das künftige parent-Dokument "befände mich" aber im Lotus Script!
Wie könnte ich dann wieder ein neues Dokument (das Antwortdokument) im Webbrowser öffnen ?
Um aus dem Script/Agent in das Dokument zu kommen musst Du nur die URL des Dokuments ausgeben.
Im script sieht die Zeile ungefähr so aus:
print {[http://deinserver.de/deinedb.nsf/ansicht/} & docB.UniversalID & {?OpenDocument]}
und Domino "öffnet" hierfür dein Dokument für den Browser.
(Ist mir gerade eingefallen, dass ich vergass dies zu erwähnen, darum kam ich zu so später Stunde nochmals zum Thema.)
Beim print ist noch relevant,
dass du zuvor keine prints im Agenten machst,
der print selbst mit der eckigen Klammer [
und mit "http://" (oder "https://") anfängt,
Allerdinst bevorzuge ich eher die Variante mit dem Agenten im WebQueryOpen des Dokuments,
der Zwischenschritt über den Aufruf des Agenten ist hier unnötig.
Also so:
1.) DocA hat einen Link "Compose" DocB mit übergabe der "ParentID"
2b.) DocB "erbt Werte" aus dem aufrufend Dokument.
oder
2a.) DocB hat eine WebQueryOpen-Agenten, der die Daten (per Agent auch RT-Felder) von DocA über die ParentID abholt.
Viel Erfolg, Pete(r)
nur zur Vollsändigkeit noch:
Starte ich einen Agent über einen Link (javascript oder Formeln), hat session.DocumentContext aber keinen Erfolg!
Wie sind die Eigenschaften des Agenten?
normalerweise sind Web-Agenten "Agenten-Liste" und Dokumenten-Auswahl: "keine"