Domino 9 und frühere Versionen > ND6: Entwicklung
Zugriff auf DB-Profile über Agent
chris2212:
Hallo,
kaum ist das eine Problem gepostet hab ich auch schon das nächste...
Zum Problem:
In meiner BM-DB kann der AL seine Urlaubsvertretung bestimmen,
für diesen Zeitraum soll die Vertretung über zwei Agenten in der ACL
eingetragen werden und nach Ablauf der Zeit wieder aus der ACL gelöscht werden.
Hat soweit auch funktioniert, die Informationen werden in drei versteckte Felder
mit Mehrfachwerten geschrieben.
Ich habe das setzen und entfernen der ACL-Einträge "nur" mit Schaltflächen
direkt auf der Maske getestet. :-[
Das Dokument in dem die Informationen hinterlegt sind soll es nur einmal in der
Datenbank geben.
Das wollte ich mit @Command([EditProfileDocument]) erreichen, wenn ich jetzt meinen Agent aus der Agent-List starte bekomme ich Object Variable not Set.
-> Set doc = ws.CurrentDocument.Document hier bleibt der Debuger stehen.
ws = Dim ws as new NotesUIWorkspace
Die Document Selection für den Agent habe ich auf die Maske gesetzt.
Meine Frage:
Wie komme ich mit meinem Agent auf dieses Dokument?
Für jede Hilfe dankbar.....
Gruß
Christian
Glombi:
Hi,
Du musst erst den ws setzen dann das doc. Ausserdem das ws = ...weglassen.
Dim ws as new NotesUIWorkspace
Set doc = ws.CurrentDocument.Document
Andreas
chris2212:
@Glombi
Ich hab da mal wieder "Mist" geschrieben den keiner verstehen kann...
Auch auf die Gefahr hin das jeder hier über die umständliche Umsetzung
lacht, ist hier der Code....
Der - Agent
Options-Bereich:
Option Public
Option Explicit
Use "ScriptLib"
Initialize-Bereich:
Call setNewACLEntry
Die Sub in der ScriptLib:
Sub setNewACLEntry
Dim session As New NotesSession
Dim ws As New NotesUIWorkspace
Dim doc As NotesDocument
Dim strCurrentdate As String
Dim counter As Integer
Dim db As NotesDatabase
Dim acl As NotesACL
Dim entry As NotesACLEntry
Dim strACLEntry As String
Set db = session.CurrentDatabase
Set acl = db.ACL
counter = -1
Set doc = ws.CurrentDocument.Document
strCurrentDate = Today()
Forall b In doc.ApproverDateFrom
counter = counter + 1
If strCurrentDate = b Then
strACLEntry = doc.ApproverName(counter)
Set entry = acl.GetEntry(strACLEntry)
If ( entry Is Nothing ) Then
Call acl.CreateACLEntry(strACLEntry,ACLLEVEL_AUTHOR)
Set entry = acl.GetEntry(strACLEntry)
If ( entry Is Nothing ) Then
End If
entry.UserType = ACLTYPE_PERSON
entry.EnableRole("AL")
End If
End If
End Forall
Call acl.Save
Call currentLog.Close
End Sub
In der Maske befinden sich drei versteckte Felder(mit Mehrfachwerten) wo ich die
Informationen zur Urlaubsvertretung gespeichert habe.
Im Agent selbst ist eigentlich nur ein Call auf eine Sub in der ScriptLib.
Ich habe den Code aber auch schon direkt in den Initialize Bereich kopiert
und da hab ich die Fehlermeldung auch bekommen.
Danke & Gruß
Christian
Glombi:
Hi,
wenn ich das richtig verstanden habe, gibt's hier das Problem:
Set doc = ws.CurrentDocument.Document
Offenbar hat der ws kein CurrentDocument.
Wenn der Agent über gewählte Dokumente läuft, musst Du eine NotesDocumentCollection deklarieren und diese mit
set dc = db.UnprocessedDocuments
setzen. Dann weiter
set doc = dc.GetFirstDocument
Andreas
chris2212:
....stimmt, da bleibt er stehen.
Ich hab mir halt gedacht, da es dieses Dokument "nur" einmal in
der Datenbank geben darf, brauche ich keine DocumentCollection...
Wenn ich .unprocessedDocuments verwende, muss ich da nicht manuell
ein Dokument in der aktuellen View markiert haben?
Mit @Command([EditProfileDocument]) wollte ich sicherstellen
das es dieses Dokument nur einmal in der Datenbank gibt.
Soweit ich weis werden ProfileDocumente in keiner Ansicht angezeigt....
Aber es muss dennoch eine Möglichkeit geben das ich mit meinem Agent auf
das eine Dokument komme..
Danke & Gruß
Christian
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln