Autor Thema: Agent - Kundennummer prüfen  (Gelesen 4074 mal)

Offline dengao

  • Frischling
  • *
  • Beiträge: 19
Agent - Kundennummer prüfen
« am: 07.02.07 - 13:26:02 »
Hallo zusammen,

ich habe eine Datenbank erstellt wo eine Geräteausgabe vermerkt wird. In der Ausgabemaske soll nach Eingabe der Kundennummer geprüft werden ob der Kunde nicht schon ein Gerät bekommen hat. Wenn ja soll eine Meldung am Bildschirm erscheinen.
Leider kann ich die Prüfung nicht direkt in der Eingabemaske machen sondern über einen Agent, da die Mitarbeiter nicht alle Dokumente sehen können (Leserfeld).
Mit diesem LS rufe ich den Agent auf:

Sub Exiting(Source As Field)
   Dim s As New NotesSession
   Dim db As NotesDatabase
   Dim doc As NotesDocument
   Dim doc2 As NotesDocument
   Dim agent As NotesAgent
   Dim ws As New NotesUIWorkspace
   
   Set db = s.CurrentDatabase
   Set doc2=ws.CurrentDocument.Document

 'Dokument erstellen um Kundennummer zu übergeben
   Set doc = New NotesDocument(db)
   doc.Kundennummer = doc2.GetItemValue("Kundennummer")
   Call doc.Save(True, False)
   
  'Agent mit übergabe der Dokumenten ID starten
   Set agent = db.GetAgent("Kdpruf")
   Call agent.Run(doc.NoteID)
End Sub


Der Agent sieht so aus:

Sub Initialize
   Dim ws As New NotesUIWorkspace
   Dim doc As NotesDocument
   Dim note As NotesDocument
   Dim kunde As Variant
   Dim gefkunde As Variant
   Dim session As New NotesSession
   Dim collection As NotesDocumentCollection
   Dim sSelection As String
   Dim dtCutOff As New NotesDateTime("")
   Dim zaehler As Long
   Dim mtext As String
   Dim filiale As Variant
   Dim erstellt As Variant
   Dim kdname As Variant
   Dim umtext As String
   Dim agent As NotesAgent
   Dim db As NotesDatabase
   
   Set db=session.CurrentDatabase
   Set agent = session.CurrentAgent
   
   zaehler=0   
   Set doc=db.GetDocumentByID(agent.ParameterDocID)
   kunde= doc.Kundennummer(0)
   Call doc.Remove(True)
   
'Alle Dokumente des Kunden mit dem Formular Ausgabe suchen
   sSelection = |Form = "Ausgabe"|
'Führe Suche aus
   Set collection = session.CurrentDatabase.Search(sSelection, _
   dtCutOff, 0)
   
   Set note = collection.GetFirstDocument
   While Not note Is Nothing
      gefkunde=note.GetItemValue("Kundennummer")
      If gefkunde(0) = kunde(0) Then
         zaehler=zaehler+1
         erstellt=note.Created
         filiale=note.GetItemValue("Filiale")
         kdname=note.GetItemValue("KdName")
         mtext= mtext & filiale(0) & "          " & erstellt & "          "& kdname(0) & Chr(10)
      End If
      Set note = collection.GetNextDocument(note)
   Wend
   umtext= Chr(10) & Chr(10) & "Filiale   Ausgabe am                         Kunde" & Chr(10) & "-----------------------------------------------------------------------------"& Chr(10)
'Wieviele Leser hat der Kunde bereits?
   If zaehler> 0 Then
      Messagebox "Der Kunde hat bereits " & zaehler & " Geräte bekommen"& Chr(10) & umtext & mtext & Chr(10) & "Bitte prüfen Sie ob der Kunde noch ein Gerät benötigt.", _
      48, "Wichtiger Hinweis"
   End If
End Sub


Kann mir ggf. jemand einen Tipp geben was ich falsch mache?

Danke

Offline DerAndre

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.655
  • Geschlecht: Männlich
  • Keep cool!
Re: Agent - Kundennummer prüfen
« Antwort #1 am: 07.02.07 - 13:34:26 »
What´s the problem?

Errorhandling wäre gut und Du hast keinerlei überprügung ob der Agent gelaufen ist oder nicht, Du rufst Ihn einfach nur auf.

Agenten lassen keine Interaktion mit dem Benutzer zu. Schau mal in der Hilfe nach agent.run.

P.S. Agenten laufen mit Benutzerrechten.

André

Elterninitiative diabetischer Kinder und Jugendlicher e.V.
-----------------------------------------------------------------------------
Fliegen ist die Kunst auf den Boden zu Fallen, aber daneben.
-----------------------------------------------------------------------------
Etwas mehr Hardware dazu zu kaufen ist viel billiger als
Software besser zu machen. ( Niklaus Wirth )

Offline dengao

  • Frischling
  • *
  • Beiträge: 19
Re: Agent - Kundennummer prüfen
« Antwort #2 am: 07.02.07 - 14:06:23 »
Agenten lassen keine Interaktion mit dem Benutzer zu. Schau mal in der Hilfe nach agent.run.
Kann ich dann kein "Messagebox" aufrufen? Wenn ich den Agent umbiege und über "Aktionen" aufrufe hat der mir die Messagebox gezeigt.
P.S. Agenten laufen mit Benutzerrechten.
Dann hilft mir mein Ansatz nicht weiter. Gibt es denn mit "collection" eine Möglichkeit alle Dokumente (auch die die nicht gelesen werden dürfen) zu bekommen?

klaussal

  • Gast
Re: Agent - Kundennummer prüfen
« Antwort #3 am: 07.02.07 - 14:16:36 »
Mach doch einen Knopf in der Maske. Dahinter steckt sinngemäss der Code des o.a. Agenten und dann wertest du das Ergebnis aus.

Ohne den Knopf gedrückt zu haben lässt sich z.Bsp. das Doc nicht speichern, o.ä.

Offline DerAndre

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.655
  • Geschlecht: Männlich
  • Keep cool!
Re: Agent - Kundennummer prüfen
« Antwort #4 am: 07.02.07 - 14:18:56 »
Die Idee ist gut, aber Löst das Problem wegen der fehlenden Leseberechtigung nicht...
André

Elterninitiative diabetischer Kinder und Jugendlicher e.V.
-----------------------------------------------------------------------------
Fliegen ist die Kunst auf den Boden zu Fallen, aber daneben.
-----------------------------------------------------------------------------
Etwas mehr Hardware dazu zu kaufen ist viel billiger als
Software besser zu machen. ( Niklaus Wirth )

Driri

  • Gast
Re: Agent - Kundennummer prüfen
« Antwort #5 am: 07.02.07 - 14:22:09 »
Zitat
P.S. Agenten laufen mit Benutzerrechten.

Das stimmt so nicht. Wenn man per Script einen Agenten aufruft und in diesem Agenten ein RunOnBehalf setzt, läuft der Agent auch mit der dort eingetragenen Berechtigung.

An den Agenten kann man eine NoteID übergeben. Das entsprechenden Dokument kann der Agent dann auslesen und ggf. verändern.
Man müßte dann bei erfolgreichem Lauf des Agents das Dokument im UI refreshen oder besser neu öffnen und könnte so eine Statusmeldung ausgeben, z.B. in einem berechneten Feld.

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: Agent - Kundennummer prüfen
« Antwort #6 am: 07.02.07 - 14:25:51 »
Dann hilft mir mein Ansatz nicht weiter. Gibt es denn mit "collection" eine Möglichkeit alle Dokumente (auch die die nicht gelesen werden dürfen) zu bekommen?

Nicht wirklich. So lange du Aktionen ausführst die den Benutzerrechten unterliegen, kommst du an Dokumente, die mit Leserfeldern geschützt sind, nicht ran.

Nur mal so eine Idee. Verwalte doch im eigentlichen Dokument die Anzahl der Ausgaben. Ohne die DB genau zu kennen ist das aber nur ein Schuss ins Blaue.

Axel
 
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: Agent - Kundennummer prüfen
« Antwort #7 am: 07.02.07 - 14:26:59 »
Zitat
P.S. Agenten laufen mit Benutzerrechten.

Das stimmt so nicht. Wenn man per Script einen Agenten aufruft und in diesem Agenten ein RunOnBehalf setzt, läuft der Agent auch mit der dort eingetragenen Berechtigung.

An den Agenten kann man eine NoteID übergeben. Das entsprechenden Dokument kann der Agent dann auslesen und ggf. verändern.
Man müßte dann bei erfolgreichem Lauf des Agents das Dokument im UI refreshen oder besser neu öffnen und könnte so eine Statusmeldung ausgeben, z.B. in einem berechneten Feld.


Das ist soweit auch richtig, aber das löst meines Erachtens nicht das Problem mit der fehlenden Interaktivität mit dem Benutzer.


Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline DerAndre

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.655
  • Geschlecht: Männlich
  • Keep cool!
Re: Agent - Kundennummer prüfen
« Antwort #8 am: 07.02.07 - 14:33:28 »
Stimmt Ingo, Asche über mein Haupt.

Ich sehe gerade was...

Warum muß das im Exciting vom Feld stattfinden???
Was passiert, wenn ich mich niemals in dieses Feld reintraue?
André

Elterninitiative diabetischer Kinder und Jugendlicher e.V.
-----------------------------------------------------------------------------
Fliegen ist die Kunst auf den Boden zu Fallen, aber daneben.
-----------------------------------------------------------------------------
Etwas mehr Hardware dazu zu kaufen ist viel billiger als
Software besser zu machen. ( Niklaus Wirth )

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Agent - Kundennummer prüfen
« Antwort #9 am: 07.02.07 - 14:34:12 »
@Axel: Doch - interaktiv ausgewertet wird doch nach dem agent.RunOnServer das per NoteID bezeichnete Dokument mit dem Ergebnis des Agentlaufs.

Ich wage allerdings zu bezweifeln, dass die Architektur der Gesamtlösung dem angestrebten Ziel gerecht wird: Der Benutzer muss sehen, was er nicht sehen darf ...

Bernhard

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: Agent - Kundennummer prüfen
« Antwort #10 am: 07.02.07 - 15:22:40 »
@Axel: Doch - interaktiv ausgewertet wird doch nach dem agent.RunOnServer das per NoteID bezeichnete Dokument mit dem Ergebnis des Agentlaufs.

Die Interaktivität meinte ich nicht, sondern die Benutzerschnittstelle (Messagebox) und auch die NotesUI- Klassen. Damit dürfte es doch bei Agent.Run und .RunOnServer vorbei sein.

Ich wage allerdings zu bezweifeln, dass die Architektur der Gesamtlösung dem angestrebten Ziel gerecht wird: Der Benutzer muss sehen, was er nicht sehen darf ...

Da bin ich deiner Meinung.


Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Agent - Kundennummer prüfen
« Antwort #11 am: 07.02.07 - 15:24:47 »
Jo, bei Agent.Run und .RunOnServer ist es mit jeglichem UI-Zeugs vorbei. Daher ja auch das NotesDokument zum Datenaustausch Ui -> Agent -> UI.

Bernhard

Offline DerAndre

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.655
  • Geschlecht: Männlich
  • Keep cool!
Re: Agent - Kundennummer prüfen
« Antwort #12 am: 07.02.07 - 15:35:56 »
Jetzt brauch ich mal leichte Schläge auf den Hinterkopf...  ;D

Im Exciting ist die letzte Zeile call agent.run...

Das ganze UI.Zeugs steht im Agent

Oder hab ich jetzt Tomaten auf den Augen... Hilfeeeeee...
André

Elterninitiative diabetischer Kinder und Jugendlicher e.V.
-----------------------------------------------------------------------------
Fliegen ist die Kunst auf den Boden zu Fallen, aber daneben.
-----------------------------------------------------------------------------
Etwas mehr Hardware dazu zu kaufen ist viel billiger als
Software besser zu machen. ( Niklaus Wirth )

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Agent - Kundennummer prüfen
« Antwort #13 am: 07.02.07 - 15:39:45 »
Und wo ist jetzt Dein Problem?

Driri

  • Gast
Re: Agent - Kundennummer prüfen
« Antwort #14 am: 07.02.07 - 15:43:08 »
Zitat
Die Interaktivität meinte ich nicht, sondern die Benutzerschnittstelle (Messagebox) und auch die NotesUI- Klassen. Damit dürfte es doch bei Agent.Run und .RunOnServer vorbei sein.

Ich habe nicht von der Verwendung von UI-Methoden gesprochen.

Ich bin davon ausgegangen, daß die Aktion aus einem Dokument heraus ausgelöst wird. In dem Moment muß zur Not das Dokument gespeichert und das dann vorhandene Backgrounddokument per NoteID an den Agenten übergeben werden.
Der Agent kann dann seine Ergebnisse in das Backgrounddokument eintragen und nach Beendigung wird das UI-Dokument geschlossen und über das Backgroundokument neu geöffnet.

Dann muß man sich nur noch Gedanken machen, wie man damit umgeht, wenn der User das evtl. neu erstellte Dokument gar nicht speichern will/darf/kann.

Offline DerAndre

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.655
  • Geschlecht: Männlich
  • Keep cool!
Re: Agent - Kundennummer prüfen
« Antwort #15 am: 07.02.07 - 15:48:07 »
Daher ja auch das NotesDokument zum Datenaustausch Ui -> Agent -> UI.

Den Satz versteh ich jetzt nicht. Nach dem Aufruf des Agenten im UI passiert doch nichts mehr.

Grübel...

Sorry wenn ich da gerade was nervig bin. Liegt wohl am schlechten Allgemeinzustand meinerseits..
André

Elterninitiative diabetischer Kinder und Jugendlicher e.V.
-----------------------------------------------------------------------------
Fliegen ist die Kunst auf den Boden zu Fallen, aber daneben.
-----------------------------------------------------------------------------
Etwas mehr Hardware dazu zu kaufen ist viel billiger als
Software besser zu machen. ( Niklaus Wirth )

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Agent - Kundennummer prüfen
« Antwort #16 am: 07.02.07 - 15:51:21 »
Nach dem Aufruf des Agents im UI passiert JETZT nichts mehr. Dass das ganze Verfahren geändert werden muss, sollte doch aus der bisherigen Diskussion hervorgegangen sein  ;)

Bernhard

Offline DerAndre

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.655
  • Geschlecht: Männlich
  • Keep cool!
Re: Agent - Kundennummer prüfen
« Antwort #17 am: 07.02.07 - 15:53:38 »
 ::)

Bernhard verzeih mir. Das ist natürlich Richtig, dieser Aspekt ist irgendwie nicht mehr bis zu mir durchgedrungen...  :P
André

Elterninitiative diabetischer Kinder und Jugendlicher e.V.
-----------------------------------------------------------------------------
Fliegen ist die Kunst auf den Boden zu Fallen, aber daneben.
-----------------------------------------------------------------------------
Etwas mehr Hardware dazu zu kaufen ist viel billiger als
Software besser zu machen. ( Niklaus Wirth )

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Agent - Kundennummer prüfen
« Antwort #18 am: 07.02.07 - 15:58:31 »
Macht doch nichts - wir haben es ja geklärt  :)
Hoffentlich steigt jetzt auch der Fragesteller noch durch  ;D

Bernhard

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz