Domino 9 und frühere Versionen > ND6: Entwicklung
Antwortdokumente und Leser und Autorenfelder
pete_bla:
Hi,
"Erstellen"\"Abschnitt"\"Kontrollierter Zugriff"
"Create"\"Section"\"Controlled Access"
Relevant dabei ist der Typ (2.Eigenschaftsreiter)
"Berechnet zur Anzeige"
Schau Dir mal "Zugriffskontrollierte Abschnitte" / "controlled-access section" an (hier im Forum oder in der Desinger Hilfe).
Aber für Leseinschänkungen sind sie leider nicht wirksam.
Gruss Pete(r).
cash:
Habe mir das mit den Abschnitten mal angeschaut. Für die Datenbank ist es wohl eher nichts aber evtl für andere die ich mal erstelle...
Also bleibt mir nur der Weg über Agenten....
den Script einfach im Agenten zu kopieren klappt leider nicht "Variant does not Contain an Object"
Nur leider verstehe ich LS nicht und kann so auch selber nichts machen. Kann mir evtl. einer helfen?
Gruß
Thomas
pete_bla:
Hi,
--- Zitat von: cash am 09.10.07 - 10:49:29 ---den Script einfach im Agenten zu kopieren klappt leider nicht "Variant does not Contain an Object"
--- Ende Zitat ---
liegt daran, dass du auf das "Source" = NotesUIdocument = "Dokument das dem User Offen da liegt", worauf das UI hindeutet, zugreifen willst:
--- Zitat von: cash am 05.10.07 - 13:57:18 ---Sub Querysave(Source As Notesuidocument, Continue As Variant)
...
' If Source.IsNewDoc Then Exit Sub 'Wenn UIDoc neu ist dann verlasse Script
' Set doc = Source.Document 'UIDoc zu Backend-doc
End Sub
--- Ende Zitat ---
Ausserdem wird das "Source As NotesUIdocument" im QuerySave automatisch übergeben, du müsstes es aber noch initieren mit z.B. "NotesUIWorkspace.Currentdocument"
Es wird aber auch scheitern, wenn du den Agenten vom User aus starten willst, da dann der Agent im Namen des Users läuft und es auch nicht darf.
Du benötigst also einen Agenten, der die Aktualisierung vom Server (mit dessen Berechtigung) aus macht, z.B. ein "Zeitgesteuerter"/"scheduled"- Agenten, der wiederum wissen muss, welche Dokumente du "ändern" willst.
Hierbei kannst Du aber nicht über das UI-Dokument arbeiten,
sondern nur im Hintergrund auf das NotesDocument. (in deinem code das 'doc')
(OK hier gibts auch Ausnahmen, aber die sind hier irrelevant.)
z.B. kannst Du so vorgehen:
alle "Hauptdokument" die geändert wurde (-> Änderungszeit oder Flag) einsammeln,
und von denen dann die Unterdokumente zu aktualisieren.
Ich kann Dir gerade nicht alles verraten, aber hierzu noch ein paar Stichworte:
NotesView
getDocumentsByKey()
NotesDocumentCollection
getFirstDocument() / getNextDocument(Doc)
Such mal hier im Forum oder schau dazu in die Desinger-Hilfe
Gruss, Pete(r)
cash:
so nach langer Zeit komme ich mal wieder zu meinen Problem...
Ich habe jetzt einiges abgeändert. Da ich aber keinen Plan vom Script habe fehlt mir noch was:
Derzeitiger Script:
Sub Initialize
Dim session As New NotesSession
Dim db As NotesDatabase
Dim view As NotesView
Dim respdoc As NotesDocument
Dim parent As NotesDocument
Set db = session.CurrentDatabase
Set view = db.GetView("Alles")
' hier muß noch das Parent.Doc gesetzt werden
' Set parent = alle Dokumente die geändert werden
While Not (parent Is Nothing)
Set respdoc = db.GetDocumentByUNID(parent.ParentDocumentUNID)
If parent.HasItem("leser_response") Then
respdoc.leser_response = parent.leser_response
Call respdoc.Save(True, True, True)
End If
' hier wieder das Parent.Doc ziehen
' Set parent = nächstes Doc was sich verändert hat
Wend
End Sub
Den würde ich per Agenten vom Server signiert ausführen lassen...
Ich habe 2 Kommentare eingefügt wo ich nicht weiter weiß. Kann mir da bitte jemand auf die Sprünge helfen? Und mach gucken ob das überhaupt so funktionieren könnte?
Driri:
Ich würde das vermutlich folgendermaßen realisieren :
1) Button mit Script versehen, daß das Dokument speichert und dann den benötigten Agent aufruft. Beim Aufruf übergibt man die ID des Dokumentes (also des Parents) an den Agent.
Das sieht in etwas so aus, Deklarationen und so habe ich weggelassen :
--- Zitat ---Set agent = db.GetAgent("<Name des Agents>")
Call agent.RunOnServer(doc.NoteID)
--- Ende Zitat ---
2) Im Agent liest Du dann die übergebene ID aus und holst Dir damit das Parentdokument.
--- Zitat ---Set agent = session.CurrentAgent
Set parent = db.GetDocumentByID(agent.ParameterDocID)
--- Ende Zitat ---
Eine Schleife kannst Du dir dann im Agent sparen, denn der Agent arbeitet immer nur auf das aktuell vom User geänderte Dokument.
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln