Das Notes Forum
Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: aretni am 09.04.08 - 16:06:37
-
Hallo,
ich habe dank eurer Hilfe es soweit gebracht, dass mein Agent einen String aus dem Internet zieht und in einer Variablen ablegt.
Jetzt die simple Frage: Wie kann man einem Dokument beibringen, dass es einen Agent startet und den Wert, welchen der Agent liefert, im Dokument selbst abspeichert?
Falls ihr mich nicht verstanden habt:
1. Dokument startet Agent
2. Agent liefert einen Wert (String)
3. Dokument greift diesen String auf
4. Dokument speichert den Wert
Für einige von Euch bestimmt eine einfach Sache, für mich als ANFÄNGER nicht so trivial!
Vielen Dank im voraus!
Gruß
Aretni
-
Wie und wo soll der Agent denn gestartet werden?
Ein Agent kann keinen Wert zurückliefern. Das können nur Funktionen. Du kannst aber den String innerhalb des Agenten in das Dokument schreiben und das Dokument dann speichern.
Der Ablauf würde dan so ausehen:
1. Agent wird gestartet
2. Agent ermittelt Wert
3. Agent schreibt Wert in Dokument
4. Agent speichert Dokument
Axel
-
Wenn ich das von Axel aufgreifen darf:
1. Agent wird gestartet
heißt - mit "Set doc = sess.DocumentContext" kommts du auf das geöffnete Dokument
2. Agent ermittelt Wert
hier gibts den von dir genannten String
3. Agent schreibt Wert in Dokument
doc.feldname = string
4. Agent speichert Dokument
call doc.save(true,false)
wenn du den gerade ermittelten Wert nicht gleich im Browser anzeigen willst müsste es das gewesen sein!
-
Wenn ich das von Axel aufgreifen darf:
1. Agent wird gestartet
heißt - mit "Set doc = sess.DocumentContext" kommts du auf das geöffnete Dokument
2. Agent ermittelt Wert
hier gibts den von dir genannten String
3. Agent schreibt Wert in Dokument
doc.feldname = string
4. Agent speichert Dokument
call doc.save(true,false)
wenn du den gerade ermittelten Wert nicht gleich im Browser anzeigen willst müsste es das gewesen sein!
Vielen Dank für die schnelle Hilfe
doc = sess.DocumentContext
-> ist doc eine Variable oder soll ich hier den Namen meines Dokumentes eintragen?
Wenn ich den Agent speichern will sagt Notes mir, sie sei nicht deklariert!
Alles andere hab ich soweit verstanden.
-
Name des Dokuments? Nennst Du das Hasi oder so? ;D
doc ist hier ein Objekt vom Typ NotesDocument.
Von mir noch eine Alternative, wenn das Zieldokument nicht direkt im Zugriff steht (zum Beispiel, der Wechselkurs, um den es lt. Deinen anderen Threads ja wohl geht, soll in ein Setup- oder ProfileDocument geschrieben werden): Du startest den Agent mit NotesAgent.Run (NoteID). Die NoteID musst und kannst Du vorher ermitteln. Dann weisst Du auch im Agent, wie Du das NotesDocument instantiieren und dorthin zurückschreiben kannst.
Bernhard
-
Kann mir bitte jemand erklären was genau unter
Set doc = sess.DocumentContext
zu verstehen ist und wie ich auf ein Dokument zugreifen kann ????
PS: Hab erst vor ca. 3 Wochen mit Lotus angefangen und meine Fragen sind berechtigt :) (Für euch bestimmt lächerlich)
-
Aus der Designerhilfe:
DocumentContext property
Beispiel
Read-only. The in-memory document when an agent starts.
Hinweis This property is not implemented in COM.
Defined in
NotesSession
Data type
NotesDocument
Syntax
To get: Set notesDocument = notesSession.DocumentContext
Usage
For an agent activated in a view through the Notes client UI, the in-memory document is the document highlighted in the view.
For an agent run from a browser with the OpenAgent URL command, the in-memory document is a new document containing an item for each CGI (Common Gateway Interface) variable supported by Domino. Each item has the name and current value of a supported CGI variable. (No design work on your.....
Gerade für Anfänger - was wir alle mal waren- ist die Designerhilfe Goldwert ;-)
-
ich habe jetzt folgendes gemacht:
Dim doc As NotesDocument
Dim session As NotesSession
Set session = New NotesSession
Set doc = session.DocumentContext
doc.HtmlAnzeige = gHTMLCode
Call doc.Save(True,False)
Ich habe ein Feld mit dem Namen "HtmlAnzeige", wie kann ich auf dieses Feld zugreifen oder geht das nicht direkt?
Wenn ich doc. eintippe wird mein Feld (HtmlAnzeige) nicht in der Liste aufgeführt. Mein String der übergeben werden soll heißt gHtmlCode und laut ServerConsole ist auch was in dem String eingetragen und zwar der XML-Code aus dem Internet (bis dahin funkst bei mir alles)
Die Noteshilfe bringt mich hier nicht weiter.
Wie kann ich nun auf das Dokument zugreifen, oder ein neues erstellen und den Wert von gHtmlCode darin abspeichern?
Plz help! ???
-
Die Felder eines Dokumentes werden - da sie sehr volatil sind - beim TypeAhead in der Liste nie angeführt. Hinschreiben kann man sie trotzdem.
Als Alternative kannst/solltest Du Dir NotesDocument.ReplaceItemValue() in der Designer-Hilfe ansehen.
-
Hallo
Feldnamen werden nicht als Methode/Eigenschaft bei eintsprechenden Objekten angezeigt.
Wie kann ich nun auf das Dokument zugreifen,
z.B.:
doc.getItemValue( "FeldName" )
oder ein neues erstellen
z.B.:
set doc = db.CreateDocument
und den Wert von gHtmlCode darin abspeichern
z.B.:
call doc.ReplaceItemValue( "FeldName" , "Wert" )
call doc.Save( TRue , TRue )
Die Noteshilfe bringt mich hier nicht weiter.
i.R. ist die Hilfe super.
Wenn es nicht ausreicht, dann gibt es noch super Bücher.
-
Vielen dank für die hilfreichen Tipps.
Wenn ich jetzt folgendes ausführe:
Set session = New NotesSession
Set doc = session.DocumentContext
doc.getItemValue( "HtmlAnzeige" )
Call doc.ReplaceItemValue( "HtmlAnzeige" , "gHTMLCode" )
Call doc.Save( True , True )
Dann kommt die Errormeldung: Object variable not set
Wat nu?
Anscheinend greift er nicht auf das Feld zu oder er weiß nicht wo genau es liegt, vermute ich jetzt mal...
-
1) Errorhandling einbauen
2) Code im Debugger laufen lassen
3) In welcher Zeile kommt der Fehler.
-
Wenn das der komplette Code ist, fehlen die Deklarationen der Variablen (siehe Designerhilfe unter "Dim").
-
Call doc.ReplaceItemValue( "HtmlAnzeige" , "gHTMLCode" )
Ist gHTMLCode eine Variable oder willst Du wirklich den STRING "gHTMLCode" in das Feld schreiben?
Ist not doc is Nothing ??
-
Call doc.ReplaceItemValue( "HtmlAnzeige" , "gHTMLCode" )
Ist gHTMLCode eine Variable oder willst Du wirklich den STRING "gHTMLCode" in das Feld schreiben?
Ist not doc is Nothing ??
Jup, ich will den String gHTMLCode in das Feld schreiben.
-
Wenn das der komplette Code ist, fehlen die Deklarationen der Variablen (siehe Designerhilfe unter "Dim").
Der rest liegt in Declarations:
Dim gHTMLCode As String
Dim gDateTime As NotesDateTime
Dim gBaseURL As String
Dim iDoc As NotesDocument
Dim doc As NotesDocument
Dim session As NotesSession
Und das in Init:
Sub Initialize
gBaseURL="http://www.webservicex.com/CurrencyConvertor.asmx/ConversionRate?FromCurrency=USD&ToCurrency=EUR"
Call getResDatafromJARS()
Messagebox gHTMLCode
Set session = New NotesSession
'Set doc = session.DocumentContext
doc.getItemValue( "HtmlAnzeige" )
Call doc.ReplaceItemValue( "HtmlAnzeige" , "gHTMLCode" )
Call doc.Save( True , True )
End Sub
Call getResDatafromJARS() funkst ohne Probleme es geht eigentlich nur darum den String in ein Feld zuschreiben bzw. in ein Dokument, so schwer kann das doch nicht sein, oder?
-
in Option liegt auch noch was:
Option Public
Option Declare
Uselsx "*javacon"
Use "JavaSockets"
-
Das "set doc=" ist auskommentiert. doc ist dann Nothing und dann schmeißt Notes auch den Fehler.
Die Zeile "doc.getItemValue( "HtmlAnzeige" )" kannst Du dir sparen.
Ich glaube, Du hast Dirk falsch verstanden. Oben deklarierst Du eine String-Variable gHTMLCode, aber unten schreibst Du dann den Text "gHTMLCode" in das Item. Wenn Du den Inhalt der Variable gHTMLCode in das Item packen willst, mußt Du die Anführungszeichen weglassen.
Und wo wird gHTMLCode ein Wert zugewiesen ?
-
Das "set doc=" ist auskommentiert. doc ist dann Nothing und dann schmeißt Notes auch den Fehler.
Die Zeile "doc.getItemValue( "HtmlAnzeige" )" kannst Du dir sparen.
Ich glaube, Du hast Dirk falsch verstanden. Oben deklarierst Du eine String-Variable gHTMLCode, aber unten schreibst Du dann den Text "gHTMLCode" in das Item. Wenn Du den Inhalt der Variable gHTMLCode in das Item packen willst, mußt Du die Anführungszeichen weglassen.
Und wo wird gHTMLCode ein Wert zugewiesen ?
Ja ich hab das "set doc =" auskommentiert weil ich was testen wollte.
gHTMLCode wird in der "Call getResDatafromJARS()" einen String zu gewiesen. Der in der ServerConsole erfolgreich angezeigt wird. Die funktion getResDatafromJARS() tut nichts anderes außer eine Webseite einzulesen und in dem String gHTMLCode zu speichern.
-
wenn ich den Code für das abspeichern in Dokumenten auskommentiere kommt keine Fehlermeldung, nur wenn ich das:
Set session = New NotesSession
Set doc = session.DocumentContext
Call doc.ReplaceItemValue("HtmlAnzeige" , gHTMLCode )
Call doc.Save( True , True )
hinzunehme...
Also liegt es an den paar Zeilen.
-
Nein, der Fehler, den du hier zuletzt hattest, liegt einzig und allein an der Initialisierung bzw. fehlenden Initialisierung von doc.
-
Geh da doch endlich mal mit dem Debugger durch und ermittle, in welcher Zeile das fehlende Objekt bemängelt wird.
Ich vermute, Du hast gar keine Dokument gewählt / offen und DocumentContext greift ins Leere.
Bernhard
-
Nein, der Fehler, den du hier zuletzt hattest, liegt einzig und allein an der Initialisierung bzw. fehlenden Initialisierung von doc.
und wie mache ich es richtig? Hab fast den ganzen Code gepostet!
Wie gesagt, für euch ist das bestimmt ne Sache von Sekunden ich brauch dafür schon Stunden und bin immer noch nicht dahinter gekommen. Vielleicht sind wir (ich und Notes) keine Freunde?
-
Bernhard hat noch einen Schritt weiter gedacht als ich. Hast du das schon überprüft?
-
heul :'(
Wie kann ich DocumentContext sagen, dass es auf ein Dokument greifen soll :-:?
-
Lies doch bitte strukturiert (!) die DesignerHelp hierzu. Da steht *alles* beschrieben.
Bernhard
-
Lies doch bitte strukturiert (!) die DesignerHelp hierzu. Da steht *alles* beschrieben.
Bernhard
Gut, dann stell ich am besten keine Frage mehr, erst nachdem ich die komplette Hilfe durchgelesen hab und diese mir dann nicht mehr weiterhelfen kann.
Das Problem ist, ich brauche dieses einfache Ding bis morgen früh und ich habe einfach keine Zeit mehr mir die Hilfe durchzulesen, deswegen bitte ich hier um Rat bei Profis die sowas bestimmt in 30 Sekunden hinbekommen würden.
Trotzdem danke für alles!
-
Wenn es "schnell" gehen muss, helfen Dir sicherlich einige Forumsmitglieder gegen den Einwurf kleinerer und größerer Münzen, dann gibts auch fertigen Code.
"Gratis" gibts Hilfe zur Selbsthilfe.
P.S: Was in der Anfangsdiskussion unterging - wie wird denn der Agent gestartet (manuell, zeitgesteuert, übers Web ...) und welche Parameter (Suchen, ...) sind für ihn denn definiert? Ev. ist der DocumentContext ja leer, weil der Agent nicht auf die markierten Dokumente läuft oder übers Web aufgerufen wird (steht auch in der Designer Hilfe ;) ).
-
Zu den 30 Sekunden: Von hier aus ist es unmöglich festzustellen, was Du gemacht hast, damit NotesSession.DocumentContext in die Hose geht. Was es dabei zu beachten gilt, steht nicht "in der ganzen Hilfe", sondern in genau dem einen betreffenden Dokument der DesignerHelp.
Bernhard
-
Wenn es "schnell" gehen muss, helfen Dir sicherlich einige Forumsmitglieder gegen den Einwurf kleinerer und größerer Münzen, dann gibts auch fertigen Code.
"Gratis" gibts Hilfe zur Selbsthilfe.
P.S: Was in der Anfangsdiskussion unterging - wie wird denn der Agent gestartet (manuell, zeitgesteuert, übers Web ...) und welche Parameter (Suchen, ...) sind für ihn denn definiert? Ev. ist der DocumentContext ja lehr, weil der Agent nicht auf die markierten Dokumente läuft oder übers Web aufgerufen wird (steht auch in der Designer Hilfe ;) ).
Wo ist denn der Schlitz für die Münzen an meinem PC?
Was würde mich denn so ein paar Zeilen Code kosten?
-
OK. Und in welcher Zeile genau?
Wo ist deine Fehlerbehnadlung?
-
Du hast immer noch eine der entscheidenden Fragen vom Anfang beantwortet.
Wo und wie startest du den Agenten?
Wenn das geklärt ist können wir weitermachen.
Axel
-
Du hast immer noch eine der entscheidenden Fragen vom Anfang beantwortet.
Wo und wie startest du den Agenten?
Wenn das geklärt ist können wir weitermachen.
Axel
Der Agent liegt auf einem Server.
Dieser wird über einen anderen Agenten (heißt runonserver) gestartet:
Sub Initialize
Dim xS As New NotesSession
Dim xAgent As NotesAgent
Set xAgent = xS.CurrentDatabase.getAgent("Waehrungstest")
Call xAgent.runonServer()
End Sub
Waehrungstest, so heißt mein Agent von dem die ganze Zeit die rede ist.
Ich gehe auf Agents, rechtsklickt auf runonserver, dann auf run...
Dann sehe ich in der ServerConsole dass er den Agenten ausführt und was aus dem Internetzieht und dieses dann auf der Console printet.
Wie gesagt, das funktioniert alles ohne Probleme.
-
Und weiter mit dem "ausdernasezieh":
Wie ist der Agent (der Zweite, der die tatsächliche Arbeit macht, nicht der runonserver) konfiguriert ..... ?
-
Und weiter mit dem "ausdernasezieh":
Wie ist der Agent (der Zweite, der die tatsächliche Arbeit macht, nicht der runonserver) konfiguriert ..... ?
Weil Chef sagen, ich soll Agent so starten...
Chef morgen früh erst wieder da :(
-
Ich gehe auf Agents, rechtsklickt auf runonserver, dann auf run...
Und wie soll da bitte ein Dokument im Kontext der Aktion stehen?
-
Ich gehe auf Agents, rechtsklickt auf runonserver, dann auf run...
Und wie soll da bitte ein Dokument im Kontext der Aktion stehen?
Das Runonserver ist nur dazu da, das der Server mit der Außenwelt Kontakt aufnehmen kann.
Wenn der Agent dann läuft ist das Runonserver nicht mehr notwendig...
-
Beantworte mir doch bitte folgende einfache Frage: Welches Dokument sollte im Kontext einer Aktion stehen, wenn dies auf dem Server ein Agent ist? Das ist doch absurd.
Bernhard
-
ich denke da fehlt einiges an Hintergrundwissen etc. ...
Ein ContextDocument gibt es in dieser Konstilaition nicht.
Das kann man im Agenten ja sehr leicht abfangen ;-) (Hinweise dazu gibt es hier in den antworten).
Wenn unbedingt der Agent über einen anderen Agenten getriggert werden muss (weil Cheffe es so sagt), dann kann man dem Agenten beim Aufruf eine NoteID eines Docs (NotesDocument) mitgeben.
Aber dazu ist es wichtig die DesignerHilfe zu lesen!!!
Wenn eine fertige Lösung gewünscht ist, können wir gerne ein Angebot zukommen lassen .
-
Wenn unbedingt der Agent über einen anderen Agenten getriggert werden muss (weil Cheffe es so sagt), dann kann man dem Agenten beim Aufruf eine NoteID eines Docs (NotesDocument) mitgeben.
Siehe Posting #4. Wir haben hier ja eigentlich schon alles gesagt. Und wenn Cheffe das haben will, aber (noch) kein dazu fähiges Personal hat, muss Cheffe Taler in die Hand nehmen.
Bernhard
PS: Ich klinke mich hier jetzt aus - muss Taler verdienen.
-
Und wenn Cheffe das haben will, aber (noch) kein dazu fähiges Personal hat, muss Cheffe Taler in die Hand nehmen.
Anscheinend will der Chef keinen Taler in die Hand nehmen, sonst würde er nicht .. :-X :-X :-X :-X ...
Wir haben hier ja eigentlich schon alles gesagt.
Ja. Die Lösung ist hier beschrieben ..