Domino 9 und frühere Versionen > ND6: Entwicklung
Ideen zu einer Klasse
Speedy:
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:
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
Tode:
ä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
Glombi:
Das gilt auch bei RunOnServer?
Falls es so ist, umso besser! Da bin ich mir aber nicht 100% sicher.
Andreas
Speedy:
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!
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln