Autor Thema: Ideen zu einer Klasse  (Gelesen 1740 mal)

Offline Speedy

  • Frischling
  • *
  • Beiträge: 16
  • Geschlecht: Männlich
Ideen zu einer Klasse
« am: 16.10.06 - 17:05:56 »
Hallo Forum,

ich habe hier ein konkretes Problem, zu dem ich mal ein paar Lösungsansätze brauche.

Ich habe in einer Auftragsdatenbank einen Button, der vom Anwender ausgeführt wird.

Der Code hinter diesem Button instantiiert ein neues Object meiner Klasse.
Diese Klasse macht nun folgendes:
Sie sucht in einer anderen DB nach Dokumenten mit bestimmten Schlüsselinformationen.
Diese Schlüsselinfos kommen aus dem Auftrag und werden der Instanz bei der Initalisierung übergeben.

Als Rückinformation der Suche an den Anwender können 4 Mögliche Fälle auftreten:
a) es wurde kein Dokument gefunden
b) es wurden zwar Dokumente gefunden, aber es die nachfolgende Tätigkeit darf grundsätzlich nicht ausgeführt werden
c) lediglich der aktuelle Anwender ist nicht Berechtigt, die nachfolgende Tätigkeit auszuführen
d) der Anwender darf die nachfolgende Tätigkeit ausführen

Das Problem ist aber nun folgendes:
Die Dokumente in der Suchdatenbank enthalten Leserfelder.
In allen Dokumenten ist aber auch ein Rolle eingetragen. Damit wird gewährleistet, über diese Rolle alle Dokumente zu sehen. Dies ist eigentlich nur zu administrativen Zwecken notwendig und diese Rolle ist standardmäßig keinem Anwender zugeordnet. (Sie dient nur dem Maintenance Fall!!)

Eine physikalische Person hat unter Umständen überhaupt keinen Zugriff auf diese Suchdatenbank oder sieht nur die Dokumente die sie auch bearbeiten kann.
Wenn der Anwender, der den Button drückt, also in keinem Leserfeld enthalten ist, werden auch keine Dokumente gefunden oder er hat eben ggf. auch gar keinen Zugriff.

Ich möchte aber nun folgendes Realisieren:
a) die Suche nach den Dokumenten soll mit Hilfe des technischen Users durchgeführt werden
b) das Ergebnis wird an den aktuellen Anwender lediglich weiterleiten.
c) Alle nachfolgenden Tätigkeiten sollten ebenfalls von der Klasse erledigt werden.
d) die Klasse soll aber im Frontend von einem Anwender verwendet werden können.

Beispiel: Anwender drückt Button -> Init myClass mit Werten aus aktuellem Dokument (macht der Code) -> myClass.StarteProzess (macht ebenfalls der Code, wird aber mit Userrechten ausgeführt)

myClass.StarteProzess soll nun die Suche durchführen und das Ergebnis der 4 Möglichkeiten an den Anwender melden (z.B. per Dialogbox) oder aber auch ggf. die nachfolgende Tätigkeit durchführen.
Diese Tätigkeit kann aber ebenfalls nicht mit Userrechten durchfgeführt werden, sondern muss über Funtionen der Klasse realisiert werden.

Der Code der Klasse befindet sich in einer Scriptlibrary der Auftragsdatenbank in der auch der Anwender arbeitet und wir mit einer Applikations-ID signiert.

Wie kann man hier vorgehen?

Glombi

  • Gast
Re: Ideen zu einer Klasse
« Antwort #1 am: 16.10.06 - 17:12:57 »
Mein erster Ansatz wäre:
Du ruft mit
call agent.RunOnServer( DocNoteID )
im Frontend einen Agenten auf dem Server aus, der mit dem technischen User, welcher alles lesen darf, unterzeichnet ist.

Da das Frontend nicht weiß, wann der Agent fertig ist, musst Du solange warten. Das könnte bspw, mit einer Until Schleife gehen.
Der Agent erstellt ein Dokument und schreibt dort alles rein. Am Ende, d.h. wenn der letzte Datensatz abgearbeitet wurde, schreibt er ein Flag-Feld AgentDone = "1".
Deine Schleife prüft nun regelmäßig (mit Sleep) ob das ZieldDokument da ist (Key = DocNoteID = document.NoteID aus dem Quelldocument (Frontend)).

Andreas

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.885
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: Ideen zu einer Klasse
« Antwort #2 am: 16.10.06 - 17:32:32 »
ähhm... das mit dem Warten kannst Du Dir aber sparen @Glombi... Das Script läuft sowieso nicht weiter, bevor der Agent nicht fertig ist.

Gruß
Tode
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Glombi

  • Gast
Re: Ideen zu einer Klasse
« Antwort #3 am: 16.10.06 - 17:33:48 »
Das gilt auch bei RunOnServer?
Falls es so ist, umso besser! Da bin ich mir aber nicht 100% sicher.

Andreas

Offline Speedy

  • Frischling
  • *
  • Beiträge: 16
  • Geschlecht: Männlich
Re: Ideen zu einer Klasse
« Antwort #4 am: 17.10.06 - 07:19:03 »
Danke für den ersten Input.

Habe ein wenig in der Designerhilfe gestöbert und darüber gestolpert, das man in die ACL der Suchdatenbank auch eine Replica-ID der Auftragsdatenbank eintragen kann.
Habe dazu mal einen seperaten Eintrag eingestellt.
Vielleicht ist das ja auch eine Lösung???

Werde das mit dem Aufruf über einen Agenten mal checken!

Offline Speedy

  • Frischling
  • *
  • Beiträge: 16
  • Geschlecht: Männlich
Re: Ideen zu einer Klasse
« Antwort #5 am: 19.10.06 - 08:17:30 »
Habe jetzt ein wenig mit dem RunOnServer herum experimentiert.
Die Sache hat leider einen kleinen Schönheitsfehler.

Wenn der Anwender den Button drückt und dieser Buttoncode einen Agent startet gehen sämtliche Meldungen, die von der Klasse zurückgegeben werden in das Logfile.
Da ich dem Anwender jedoch auch Dialogboxen anzeigen muss habe ich hier ein Problem.

Ausserdem kann ich nur feststellen, ob der Agent erfolgreich gelaufen ist. Sollte die Klasse aber einen Abruch melden (z.B. Sie sind nicht berechtigt...) dann ist der Agent zwar fehlerfrei gelaufen aber das Abrruchkriterium kann ich nicht erkennen.

Eigentlich brauche ich nur 2 Aktionen, die mit gesonderten Rechten ausgestattet sind.
a) eine Suche in der Datenbank (da hier Leserfelder gesetzt sind)
b) Alle gefundenen Dokumente auslesen und als NotesDocument in ein Array der Klasse hinterlegen

Damit könnte die Klasse mit den Rechten des Anwenders gestartet werden und die Meldungen gehen direkt an den Anwender. Der Aufruf des Agenten für die Suche und das auslesen der gefundenen Dokumente würde in einer Private Methode der Klasse sein.

Dazu stellen sich mir ein paar weitere Fragen:
1) vorausgesetzt die Suche wurde mittel RunOnServer aus einer privaten Methode der Klasse gestartet , dann ist die gesamte Logik des Suchens und das auslesen der gefundenen Dokumente im Agenten hinterlegt!
Wie können den dann die gefundenen Dokumente in ein Array meiner Klasse abgelegt werden??

2) Sollten sich die Dokumente dann in meinem Array der Klasse befinden, kann der Anwender weitere Funktionen der Klasse verwenden (z.B. extract Attachment), die auf den Dokumenten des Arrays ausgeführt werden (der Anwender hat ja keinerlei Leserechte auf dem Dokument)?

Gruß
Speedy

Der Teufel ist ein Eichhörnchen und versteckt sich im Detail

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz