Domino 9 und frühere Versionen > ND6: Entwicklung

Zugriff auf DB-Profile über Agent

(1/2) > >>

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