Domino 9 und frühere Versionen > Entwicklung
Agent-Zugriff auf Document im Web browser
pete_bla:
Hallo Nils,
--- Zitat von: aoibhneach am 07.08.07 - 09:01:49 ---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.
--- Ende Zitat ---
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.
--- Code: ---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>]")
--- Ende Code ---
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:
--- Zitat von: Axel Janssen am 06.08.07 - 14:45:05 ---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.
--- Code: ---set doc = session.documentContext
strDocUnid = doc.Query_String(0)
' hier noch ein bischen StringHandling.
set docRequest = dbCur.getDocumentByUNID(strDocUnid)
--- Ende Code ---
--- Ende Zitat ---
sieht für mich als URL so aus:
--- Code: ---http://deinserver.de/deinedb.nsf/ansicht/[UNID Dokument1]?OpenDocument&Doc2=[UNID Dokument2]
--- Ende Code ---
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)
aoibhneach:
Hallo Peter!
Großartig! Nein, die Verwirrung ist nicht über ihr Basislevel gestiegen . ;)
Danke Dir schon mal im Voraus für Deine Antwort! - Ich versuche, es umzusetzen.
Eventuell frage ich nochmals nach.
Schönes Wochenende!
Grüße, Nils.
aoibhneach:
Hallo Forum, Hallo Peter!
Möglicherweise (Sicher) bin ich auf dem falschen Weg. :-\
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.
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.
Oder ist dieser Weg umständlich oder unsinnig?
@pete_bla
Hallo Pete, falls Du's liest: Oder muß auch in diesem Fall so ein berechnetes Feld in der Maske enthalten sein???
--- Zitat von: Axel Janssen am 06.08.07 - 14:45:05 ---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.
--- Code: ---set doc = session.documentContext
strDocUnid = doc.Query_String(0)
' hier noch ein bischen StringHandling.
set docRequest = dbCur.getDocumentByUNID(strDocUnid)
--- Ende Code ---
Nicht getestet. So die Richtung jedenfalls.
--- Ende Zitat ---
Ich habe einen Computed Text mit Inhalt @DocumentUniqueId in die Maske eingefügt. Im Browser ist dieser text aber leer!
Was mache ich falsch????????
Grüße, Nils.
pete_bla:
Hallo Nils,
--- Zitat von: aoibhneach am 24.08.07 - 10:36:00 ---Möglicherweise (Sicher) bin ich auf dem falschen Weg. :-\
--- Ende Zitat ---
vielleicht hab ich auch dein Anliegen noch nicht ganz verstanden...
--- Zitat von: aoibhneach am 24.08.07 - 10:36:00 ---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.
--- Ende Zitat ---
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
--- Code: ---@Command([Compose];"Antwort")
--- Ende Code ---
aus dem Dokument reichen.
--- Zitat von: aoibhneach am 24.08.07 - 10:36:00 ---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.
--- Ende Zitat ---
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):
--- Code: ---http://deinserver.de/deinedb.nsf/[Agent]?OpenAgent&Doc2=[UNID Dokument]
--- Ende Code ---
wobei du am besten @Text(@DocumentUniqueID) als UNID des Dokuments angibst.
im Agent kommen wird dann beim code von Axel an:
--- Zitat von: Axel Janssen am 06.08.07 - 14:45:05 ---
--- Code: ---set doc = session.documentContext
strDocUnid = doc.Query_String(0)
' hier noch ein bischen StringHandling.
set docRequest = dbCur.getDocumentByUNID(strDocUnid)
--- Ende Code ---
--- Ende Zitat ---
wobei strDocUnid dann ersteinmal diesen Teil liefert:
--- Code: ---OpenAgent&Doc2=[UNID Dokument]
--- Ende Code ---
Viel Erfolg, Pete(r)
P.S.: wo pstoitst Du Di hoibe?
aoibhneach:
Hallo Peter!
Ich glaube, ich habe vor lauter Eifer alles zu kompliziert beschrieben.
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.
--- Zitat von: pete_bla am 24.08.07 - 19:13:04 ---
Sonst würde ein einfacher
--- Code: ---@Command([Compose];"Antwort")
--- Ende Code ---
aus dem Dokument reichen.
--- Ende Zitat ---
Wenn ich die Notes 5-Hilfe richtig verstehe, muss für das Erzeugen eines Antwortdokuments über @Command([Compose];"Maskenname") aber ein Dokument in einer Ansicht markiert sein.
Deswegen wollte ich einen Agent nutzen.
Starte ich einen Agent über einen Link (javascript oder Formeln), hat session.DocumentContext aber keinen Erfolg!
Ich erkläre mir das so: ein link scheint kein im Browser dargestelltes Notes-element der Maske zu sein, im Gegensatz zu einer Schaltfläche. Starte ich hierüber einen Agenten, kann ich Session.DocumentContext nutzen, und damit auch doc.Query_String(0)
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 ?
Vielen Dank für die geduldigen Antworten und schönes Wochenende!
@Moderatoren! Ich hoffe, der Thread ist nicht zu lang :-\
Grüße Nils
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln