Autor Thema: Dokument des Agenten greifen  (Gelesen 7594 mal)

Offline shizen

  • Junior Mitglied
  • **
  • Beiträge: 75
  • www.maik-kurzhals.de
    • www.maik-kurzhals.de
Dokument des Agenten greifen
« am: 12.11.03 - 14:22:07 »
Hallo

ich rufe für bestimmte Dokumente einen Agenten auf und dort läuft ein Script, wie greif ich das Dokument auf dem der Agent gerade läuft?
über Session krieg ich nur die Datenbank
vieleicht über UIWorkspace?

Grüße

Offline ata

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re:Dokument des Agenten greifen
« Antwort #1 am: 12.11.03 - 14:26:39 »
... wenn ich dich richtig verstehhe, dann möchtest du auf das Dokument zugreifen können, daß der Agent gerade in der Mache hat - ist das so?

... wenn ja, dann gib ein Merkmal des Dokumentes, das gerade abgearbeitet wird in eine Notes.ini-Variable. Dort kannst du dann auslesen, welches Dokument gerade berbeitet wird. Am Ende des Agenten wird diese Ini-Variable dann auf leer gesetzt...

ata
Grüßle Toni :)

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re:Dokument des Agenten greifen
« Antwort #2 am: 12.11.03 - 14:35:38 »
Einfacher ...


Alle zur Bearbeitung bereitgestellten Dokumente stehen in UnprocessedDocuments der CurrentDatabase also:

Dim DC As NotesCollection
Dim S As New NotesSession
Set DC=S.CurrentDatabase.UnprocessedDocuments
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline ata

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re:Dokument des Agenten greifen
« Antwort #3 am: 12.11.03 - 14:42:25 »
... und wie erfährst du dann, welches der markierten Dokumente gerade in der Mache des Agenten ist?

ata
Grüßle Toni :)

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re:Dokument des Agenten greifen
« Antwort #4 am: 12.11.03 - 14:44:40 »
Im Script ist das erst in der Mache, wenn Dus bearbeitest, that's up to you, das Doc muss man sich ja eh holen.

Je nach Situation kann man auch mit NotesUIWorkspace.CurrentDocument.Document arbeiten.
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline ata

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re:Dokument des Agenten greifen
« Antwort #5 am: 12.11.03 - 14:49:06 »
@Semeaphoros

... ich glaube wir reden aneinander vorbei:

Ein Agent bearbeitet bestimmte Dokumente => von Frontend und markiert ist keine Sprache, es könnte auch ein geschedulter Agent sein, der sich bestimmte Dokumente per db.Search zieht. Und hier greift UnprocessedDocuments nicht...

ata
Grüßle Toni :)

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re:Dokument des Agenten greifen
« Antwort #6 am: 12.11.03 - 14:51:33 »
Neinnein, es geht um Lotusscript und Lotusscript hat mal überhaupt kein Dokument in der Mache, ausser Du grabscht es Dir selber. Und bei DBSearch kannst Du das Zumüllen der Notes.Ini ebenfalls vergessen.
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline ata

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re:Dokument des Agenten greifen
« Antwort #7 am: 12.11.03 - 15:20:22 »
... ich wollte dich nicht in Rage bringen...

Die Notes.ini wird nicht zugemüllt, wenn du die Variable zum Ende leerst. Beim nächsten Start von Notes ist die Variable in der INI wieder weg. man kann sich auch ein Setup-Doc für einen solchen Fall bauen, in dem das gehandelt wird. Da ist der Zugriff eben umständlicher...

... man startet einen Agenten, der per LS bestimmte Dokumente abarbeitet - egal wie sie initialisiert werden. Nun möchtest du herausfinden, welches Dokument da gerade im Durchlauf des Agenten bearbeitet wird. Er hat eventuell 1000 Dokumente, die er in einer Schlaufe durchläuft. Bei welchem ist er gerade?

... wenn es nur um die Info geht, dann reicht ein Print, möchte er aber gleichzeitig auf das Dokument zugreifen, dann benötigt bestimmte Informationen zu dem aktuellen Dokument - und da gibt es zum Beispiel die Notes.ini. Wenn man richtig damit umgeht wird nicht zugemüllt...

ata
Grüßle Toni :)

Offline shizen

  • Junior Mitglied
  • **
  • Beiträge: 75
  • www.maik-kurzhals.de
    • www.maik-kurzhals.de
Re:Dokument des Agenten greifen
« Antwort #8 am: 12.11.03 - 15:47:51 »
Hallo

es geht so wie Semeaphoros es geschrieben hat, ob es sauber ist keine Ahnung, wie testen noch.
Jetzt hab ich aber ein anderes Problem, ich muss ein Richtextfeld aus einem Dokument nehmen, in eine Variable geben und dann in ein anderes einfügen.
Hab sowas immer umgangen, weil ich nie eine Lösung gefunden habe.
Wie kann ich sowas machen?

Grüße

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re:Dokument des Agenten greifen
« Antwort #9 am: 12.11.03 - 15:53:48 »
Mach nur, war vielleicht etwas "laut" meine Antwort, aber nur im "Streitgespräch" lernen die Zuhörer .......... Sorry, wenn ich etwas heftig getönt habe, war nicht so gemeint.

Also, es stimmt, was Du sagst zur Notes.ini

Die Erfahrung zeigt: mehr als die Hälfte der Porgrammierer lassen den Mist in der Ini stehen !!

Schlussendlich war es eine Notlösung, um überhaupt eine Art der Kommunikation zwischen Prozessen zu ermöglichen. Seit es die Profil-Dokumente gibt, besteht in der Regel kein Grund mehr, sowas in die Notes.ini zu schreiben, ganz abgesehen davon, dass die Notes.ini ja nicht mitrepliziert, wenn die DB verteilt ist. Und der Umgang mit Profildokumenten ist weissgott nicht wirklich komplizierter als die .ini

Zum anderen: wenn das Programm in einem LS-Agenten nicht weiss, welches Doc es gerade bearbeitet, dann ist aber der Programmierer wirklich selber Schuld, schliesslich, wie ich schon gesagt habe, gibts in LS kein Doc automatisch, man muss es sich holen. Und so hab ich auch die Frage verstanden, wie komme ich überhaupt an das aktuelle Dokument heran ......
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline ata

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re:Dokument des Agenten greifen
« Antwort #10 am: 12.11.03 - 15:54:02 »
... man kann zwar den Inhalt eines Richtextfeldes an ein anderes Richtext-Feld anhängen, jedoch kann es da zu ziemlichen Problemen kommen, wenn du große Grafiken darin hast, oder etwa große Dateianhänge...

ata
Grüßle Toni :)

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re:Dokument des Agenten greifen
« Antwort #11 am: 12.11.03 - 16:06:46 »
Jo, die Datenmenge kann zum Problem werden, hier der Befehl, der es tut:

Call notesRichTextItem.AppendRTItem( notesRichTextItem2 )
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline ata

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re:Dokument des Agenten greifen
« Antwort #12 am: 12.11.03 - 16:22:38 »
@Semeaphoros

... nichts für ungut...
... deine Erfahrung zu Notes-Programmierern kann ich bestätigen, daher habe ich auch extra erwähnt, daß die Notes.ini-Variable wieder geleert werden soll...

ata
Grüßle Toni :)

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re:Dokument des Agenten greifen
« Antwort #13 am: 12.11.03 - 16:26:23 »
Ja, eben, deshalb auch immer wieder von mir der Hinweis auf Zumüllen, wenn jemand notes.ini erwähnt, leider braucht es manchmal deutliche Sprache ...... leider .....  :(
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline ata

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re:Dokument des Agenten greifen
« Antwort #14 am: 12.11.03 - 16:34:07 »
... übrigens ist die Arbeit mit dem Profildokument nicht unproblematisch, da sich das Dokument kontinuierlich im Cache befindet. Da hier mit einem Agenten gearbeitet wird könnte das auch schief gehen.

... ich arbeite sowohl mit Profildokumenten, als auch mit den INI-Variablen. Mit INI-Variablen aber immer, wenn Agenten im Spiel sind - alte Angewohnheit - gebranntes Kind scheut das Feuer  ::)

ata
Grüßle Toni :)

Glombi

  • Gast
Re:Dokument des Agenten greifen
« Antwort #15 am: 12.11.03 - 16:40:08 »
Mit dem Agenten ginge es auch so: Wenn Du den Agenten aufrufst, kannst Du die Doc-ID mitgeben. Diese kannst Du dann im Agenten abfragen: Dazu gibt es die Methode
agent.ParameterDocID

Übergabe der DocID an Agenten:
call agent.Run(doc.NoteID)

Beispiele aus der Hilfe:
This agent runs the agent named "Agent to be run parameter LotusScript," passing it the NoteID of a newly created document.
Sub Initialize
    Dim s As New NotesSession
    Dim db As NotesDatabase
    Dim doc As NotesDocument
    Dim agent As NotesAgent
    Set db = s.CurrentDatabase
    REM Create document containing data to be passed
    Set doc = New NotesDocument(db)
    doc.TriggerUserName = s.UserName
    Call doc.Save(True, False)
    REM Start agent and pass NoteID of document
    Set agent = db.GetAgent("Agent to be run parameter LotusScript")
    If agent.Run(doc.NoteID) = 0 Then
        Messagebox "Agent ran",, "Success"
    Else
        Messagebox "Agent did not run",, "Failure"
    End If
End Sub

This is "Agent to be run parameter LotusScript." It accesses the passed NoteID through ParameterDocID, accesses the referenced document, and removes it.
Sub Initialize
    Dim s As New NotesSession
    Dim agent As NotesAgent
    Set agent = s.CurrentAgent
    Dim db As NotesDatabase
    Dim doc As NotesDocument
    Set db = s.CurrentDatabase
    REM Get document used for passing data
    Set doc = db.GetDocumentByID(agent.ParameterDocID)
    REM Send mail containing passed data
    Dim memo As New NotesDocument(db)
    memo.Form = "Memo"
    memo.SendTo = s.UserName
    memo.Subject = "Message from LotusScript agent"
    memo.Body = "The agent was started by " & doc.TriggerUserName(0)
    Call memo.Send(False)
    REM Delete document used for passing data
    Call doc.Remove(True)
End Sub

Andreas
« Letzte Änderung: 12.11.03 - 16:45:13 von Glombi »

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re:Dokument des Agenten greifen
« Antwort #16 am: 12.11.03 - 16:53:21 »
Die Hilfe ist allerdings da etwas ungenau. Wenn man unter ParameterDocID nachschaut, steht da folgendes:


Read-only. Returns the NoteID of a document passed to the agent by Run  or RunOnServer.


..... würde eigentlich heissen, dass man das DOCUMENT und nicht die DocID als Parameter übergeben müsste .... Was ist da richtig? Das Beispiel oder die Beschreibung ???

Uebrigens erst ab 5.0.2

Ata: Profildokumente sind spätestens ab R4.6 sehr zuverlässig. Unter 4.1, als sie eingeführt wurden, waren sie tatsächlich sehr "flaky", replizierten nicht immer und haben auch sonst noch so ein paar Sprünge gemacht, aber unterdessen sind Deine Befürchtungen unbegründet.
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline shizen

  • Junior Mitglied
  • **
  • Beiträge: 75
  • www.maik-kurzhals.de
    • www.maik-kurzhals.de
Re:Dokument des Agenten greifen
« Antwort #17 am: 12.11.03 - 16:56:18 »
Hallo

aus dem bisherigen hab ich mir folgendes zusammengebastelt:
es funzt sowiet fast, aber bei Call rtitem.AppendRTItem(doc.Body) kommt ein Mismatch und ich kann mir nicht vorstellen warum?  :-[ :-[ :-[


   Dim NotesColl As NotesDocumentCollection
   Dim session As New NotesSession
   Dim mailbox As New NotesDatabase("","")
   Dim current As NotesDatabase
   Dim maildoc As NotesDocument
   Dim rtitem As NotesRichTextItem
   Dim dummy As Variant
   Dim i As Integer
   Dim doc As NotesDocument
   Dim sendto As String
   Dim sendas As String
   Dim subject As String
   
   Set NotesColl=session.CurrentDatabase.UnprocessedDocuments   
   
   If NotesColl.count>0 Then
      Set doc=notescoll.GetFirstDocument
      For i = 1 To NotesColl.count
         sendas="CN=Agent/O=lwb"
         sendto=doc.subject(0)
         subject=doc.From(0)
         ' get handle to mail.box on the users current mail server
         Set current = session.CurrentDatabase
         Call mailbox.Open( current.server, "mail.box" )
           ' Create a new document in the severs mail box
         Set maildoc = mailbox.CreateDocument
         maildoc.Form = "Memo"
         maildoc.From = sendas
         maildoc.SendFrom = sendas
         maildoc.SendTo = sendto
         maildoc.Recipients = sendto
         maildoc.Subject = subject
         Set rtitem = maildoc.CreateRichTextItem("Body")
         Call rtitem.AppendRTItem(doc.Body)
         maildoc.PostedDate = Now()
         maildoc.ComposedDate = Now()
         maildoc.DeliveredDate = Now()
         maildoc.Principal = sendas
         maildoc.EncryptOnSend = False
         Call maildoc.Save( True, False )         
         Set doc=notescoll.GetNextDocument(doc)
      Next i
   End If

Glombi

  • Gast
Re:Dokument des Agenten greifen
« Antwort #18 am: 12.11.03 - 17:00:40 »
Das Call rtitem.AppendRTItem(...) verlangt ein RichTextItem als Parameter.
Also

dim bodyrtitem as NotesRichTextItem
Dim NotesColl As NotesDocumentCollection
   Dim session As New NotesSession
   Dim mailbox As New NotesDatabase("","")
   Dim current As NotesDatabase
   Dim maildoc As NotesDocument
   Dim rtitem As NotesRichTextItem
   Dim dummy As Variant
   Dim i As Integer
   Dim doc As NotesDocument
   Dim sendto As String
   Dim sendas As String
   Dim subject As String
   
   Set NotesColl=session.CurrentDatabase.UnprocessedDocuments  
   
   If NotesColl.count>0 Then
      Set doc=notescoll.GetFirstDocument
set bodyrtitem = doc.GetFirstItem("Body")
      For i = 1 To NotesColl.count
         sendas="CN=Agent/O=lwb"
         sendto=doc.subject(0)
         subject=doc.From(0)
         ' get handle to mail.box on the users current mail server
         Set current = session.CurrentDatabase
         Call mailbox.Open( current.server, "mail.box" )
           ' Create a new document in the severs mail box
         Set maildoc = mailbox.CreateDocument
         maildoc.Form = "Memo"
         maildoc.From = sendas
         maildoc.SendFrom = sendas
         maildoc.SendTo = sendto
         maildoc.Recipients = sendto
         maildoc.Subject = subject
         Set rtitem = maildoc.CreateRichTextItem("Body")
         Call rtitem.AppendRTItem(bodyrtitem)
         maildoc.PostedDate = Now()
         maildoc.ComposedDate = Now()
         maildoc.DeliveredDate = Now()
         maildoc.Principal = sendas
         maildoc.EncryptOnSend = False
         Call maildoc.Save( True, False )        
         Set doc=notescoll.GetNextDocument(doc)
      Next i
   End If

Glombi

  • Gast
Re:Dokument des Agenten greifen
« Antwort #19 am: 12.11.03 - 17:02:09 »
Die Hilfe ist allerdings da etwas ungenau. Wenn man unter ParameterDocID nachschaut, steht da folgendes:


Read-only. Returns the NoteID of a document passed to the agent by Run  or RunOnServer.


..... würde eigentlich heissen, dass man das DOCUMENT und nicht die DocID als Parameter übergeben müsste .... Was ist da richtig? Das Beispiel oder die Beschreibung ???
So wie in den Beispielen.

Andreas
« Letzte Änderung: 12.11.03 - 17:02:38 von Glombi »

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz