Autor Thema: Antwortdokumente und Leser und Autorenfelder  (Gelesen 13796 mal)

Offline cash

  • Aktives Mitglied
  • ***
  • Beiträge: 138
Antwortdokumente und Leser und Autorenfelder
« am: 05.10.07 - 13:57:18 »
Hallo,

ich versuche gerade eine Workflow-Datenbank zu erstellen wo mit Anwortdokuemten gearbeitet wird.

Ich habe hier im Forum folgenden Code gefunden:

Sub Querysave(Source As Notesuidocument, Continue As Variant)
   
'------------------------------------------------------------------------------------------------------------------   
'Zweck: Feldwerte werden beim Speichern in alle Antwort-Dokumente übernommen   
'------------------------------------------------------------------------------------------------------------------   
'   Dim session As New NotesSession
'   Dim db As NotesDatabase
'   Dim dc As NotesDocumentCollection
'   Dim doc As NotesDocument
'   Set db = session.CurrentDatabase
   
'   If Source.IsNewDoc Then Exit Sub 'Wenn UIDoc neu ist dann verlasse Script
   
'   Set doc = Source.Document 'UIDoc zu Backend-doc
   
   
   'alle Antwortdocs des Backend-Docs werden in die Collection aufgenommen
'   Set dc = doc.Responses
   
   'Setze alle Felder der Collection, gespeichert wird automatisch   
'   Call dc.StampAll( "leser_response" , doc.leser_response(0) )
   
End Sub

Der im Quersave der Hauptdokumentes ist und die Änderungen die im Feld leser_response gemacht werden in allen Antwortdokumenten schreibt.

Leider bringt der Code einen Fehler, da der User der durch einen Button z. B. einen neuen Leser in das Feld einfügt kein Autorenrecht auf die Antwortdokumente hat. In der Regel hat keiner mehr Autorenrechte (bis auf die mit der Rolle Admin für den Notfall ;-))
das Feld leser_response regelt aber wer die Antwortdokumente lesen darf und das kann je nach Workflowverlauf ein anderer sein.

Wie kann ich mein Problem lösen?

Gruß

Thomas

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: Antwortdokumente und Leser und Autorenfelder
« Antwort #1 am: 05.10.07 - 15:24:57 »
Was mir da spontan einfällt wäre, dass du das Füllen der Leserfelder über einen Agenten regelst, der mit der Admin-ID bzw. Server-ID signiert ist.

Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline cash

  • Aktives Mitglied
  • ***
  • Beiträge: 138
Re: Antwortdokumente und Leser und Autorenfelder
« Antwort #2 am: 05.10.07 - 16:02:39 »
oh man das ich auf einen agenten nicht selber gekommen bin...

Werde es mal testen... Vielen Dank

Gruß

Thomas

Offline pete_bla

  • Senior Mitglied
  • ****
  • Beiträge: 455
  • Geschlecht: Männlich
  • dot net gitz net!
Re: Antwortdokumente und Leser und Autorenfelder
« Antwort #3 am: 05.10.07 - 16:20:53 »
Hi,

ja das liegt eben im System, wer nicht autor / leser ist darf auch keine änderungen an den Lesern / Autoren machen.

Als Alternative könntest Du mit Gruppen arbeiten für die "Grobe Einschränkung" auf die Dokumente
und das Autorenrecht individuell auf Abschnitte einschränken (Zugriffsgesteuerte Abschnitte - zugriff berechnet)

Ich verwende die gerne für Workflow-Konzepte.

Gruss Pete(r)
pete(r)

Offline cash

  • Aktives Mitglied
  • ***
  • Beiträge: 138
Re: Antwortdokumente und Leser und Autorenfelder
« Antwort #4 am: 08.10.07 - 13:22:41 »
Wie kann ich denn ein Autorenrecht individuell auf einen Abschnitte einschränken?

Dann würde ich einen Abschnitt erstellen nur mit dem Statusfeld (immer versteckt) und dort Autor jeder!?

Oder sieht dann auch wieder jeder das Dokument?

Gruß

Thomas

Offline pete_bla

  • Senior Mitglied
  • ****
  • Beiträge: 455
  • Geschlecht: Männlich
  • dot net gitz net!
Re: Antwortdokumente und Leser und Autorenfelder
« Antwort #5 am: 08.10.07 - 15:18:07 »
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).
pete(r)

Offline cash

  • Aktives Mitglied
  • ***
  • Beiträge: 138
Re: Antwortdokumente und Leser und Autorenfelder
« Antwort #6 am: 09.10.07 - 10:49:29 »
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

Offline pete_bla

  • Senior Mitglied
  • ****
  • Beiträge: 455
  • Geschlecht: Männlich
  • dot net gitz net!
Re: Antwortdokumente und Leser und Autorenfelder
« Antwort #7 am: 09.10.07 - 14:02:08 »
Hi,

den Script einfach im Agenten zu kopieren klappt leider nicht "Variant does not Contain an Object"

liegt daran, dass du auf das "Source" = NotesUIdocument = "Dokument das dem User Offen da liegt", worauf das UI hindeutet, zugreifen willst:
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
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)
pete(r)

Offline cash

  • Aktives Mitglied
  • ***
  • Beiträge: 138
Re: Antwortdokumente und Leser und Autorenfelder
« Antwort #8 am: 17.10.07 - 12:48:56 »
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

  • Gast
Re: Antwortdokumente und Leser und Autorenfelder
« Antwort #9 am: 17.10.07 - 13:06:09 »
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)

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)

Eine Schleife kannst Du dir dann im Agent sparen, denn der Agent arbeitet immer nur auf das aktuell vom User geänderte Dokument.

Offline cash

  • Aktives Mitglied
  • ***
  • Beiträge: 138
Re: Antwortdokumente und Leser und Autorenfelder
« Antwort #10 am: 17.10.07 - 15:15:28 »
die idee finde ich zwar gut... funktioniert nur leider nicht in meinen Fall denn das Parent Dok im spezielen das Feld Response_Leser wird z. B. gefüllt wenn ein Mitarbeiter ein Antwortdokument als erledigt kennzeichnet (im Queryclose wird dann das Feld im Hauptdokument geändert).

Gruß

Thomas

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: Antwortdokumente und Leser und Autorenfelder
« Antwort #11 am: 17.10.07 - 15:18:26 »
Dann rufst du den Agent eben aus dem QueryClose-Event auf anstatt ihn über einen Button zu starten.


Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline cash

  • Aktives Mitglied
  • ***
  • Beiträge: 138
Re: Antwortdokumente und Leser und Autorenfelder
« Antwort #12 am: 18.10.07 - 12:59:08 »
so ich habe jetzt den Script wie folgt geändert:

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")
   Set agent = session.CurrentAgent
   Set parent = db.GetDocumentByID(agent.ParameterDocID)
   
   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
   
   
End Sub

Wenn ich Testhalber den Agent aus dem Menü aufrufe kommt Invalid Note id

Da es ein komplexter Workflow ist ist es sehr mühselig jedesmal zig Stationen zu durchlaufen bis man dann sieht ob das ganze im Querclose laufen würde...

Gruß

Thomas

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: Antwortdokumente und Leser und Autorenfelder
« Antwort #13 am: 18.10.07 - 13:11:09 »
Der Hase liegt hier im Pfeffer:

  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

Das Parent-Dokument hat keine ParentDocumentID. Wenn du auf die Antworten zugreifen willst musst du das über parentdoc.Responses machen. Damit bekommst du eine Collection mit allen Antworten, die es zu dem Dokument gibt, zurück. Damit kannst du dann weiterarbeiten.


Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline cash

  • Aktives Mitglied
  • ***
  • Beiträge: 138
Re: Antwortdokumente und Leser und Autorenfelder
« Antwort #14 am: 18.10.07 - 17:31:38 »
ok hier mein neuer Script: Fehlermeldung: Object variable not set

   Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim view As NotesView
   Dim dc As NotesDocumentCollection
   Dim respdoc As NotesDocument
   Dim parent As NotesDocument
   
   
   Set db = session.CurrentDatabase
   Set view = db.GetView("Alles")
'ich bin im Querclose eines Antwortdokumentes und das hat die Doc-ID vom Hauptdokument   
   Set parent = db.GetDocumentByID(respdoc.ParentDocumentUNID)
   
      Set dc = parent.Responses
   
   Call dc.StampAll( "leser_response" , parent.leser_response(0) )


Gruß Thomas

(wenn ich das schaffe kaufe ich mir mal Bücher über Script)

Offline pete_bla

  • Senior Mitglied
  • ****
  • Beiträge: 455
  • Geschlecht: Männlich
  • dot net gitz net!
Re: Antwortdokumente und Leser und Autorenfelder
« Antwort #15 am: 18.10.07 - 17:48:59 »
Hi,

zu "Fehlermeldung: Object variable not set" fällt mir zuerst ein:
für Fehler immer gut:  Thema: Best Practices: Error Handling in Lotus Script
 (zumindest fürs Entwickeln mit Ausgabe) wie  z.B.:
Code
Sub blablabla
  on error goto hell
  ' ----------------
  ' dein code hier
  ' ----------------

  exit sub ' function 'oderwasauchimmer
hell:
  print {error #} & Cstr(err()) & { } & error() & { in line } & { } &  Cstr(erl())
  exit sub ' function 'oderwasauchimmer
End sub ' function 'oderwasauchimmer
 
ausserdem muss das
Code
Set parent = db.GetDocumentByID(respdoc.ParentDocumentUNID)
so lauten:
Code
Set parent = db.GetDocumentByUNid(respdoc.ParentDocumentUNID)
verwechsle NoteID (NotesDocument.NoteID) und
UNID (@DocumentUniqueID / NotesDocument.UniversalID) nicht!
und ich denk dass es bei
Code
Set dc = parent.Responses
oder dem call dc.stampall knallt.

darum zuvor noch eine Abfrage ob du überhaupt eine NotesDocumentCollection hast
Code
if dc.count > 0 then
    Call dc.StampAll( "leser_response" , parent.leser_response(0) )
end if
(wobei eine da sein muss, da du ja aus einem Antwortdokument kommst - ist dennoch besser!)

Grüsse, Pete(r)
pete(r)

Offline cash

  • Aktives Mitglied
  • ***
  • Beiträge: 138
Re: Antwortdokumente und Leser und Autorenfelder
« Antwort #16 am: 19.10.07 - 10:07:22 »
jetzt kommt die Fehlermeldung:

error #91 Objectveriable not set in line 18

und line 18 wäre dann genau die geänderte Zeile:

Set parent = db.GetDocumentByUNid(respdoc.ParentDocumentUNID)

Gruß

Thomas

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Antwortdokumente und Leser und Autorenfelder
« Antwort #17 am: 19.10.07 - 10:46:05 »
Und wo instantiierst Du respdoc? Damit muss ja 'Object variable not set' kommen.

Wenn ich das richtig verstehe, bist Du im QueryClose eines Antwortdokuments? Dann müsste die Zeile lauten:
Set parent = db.GetDocumentByUNid(Source.Document.ParentDocumentUNID)

Bernhard

Offline cash

  • Aktives Mitglied
  • ***
  • Beiträge: 138
Re: Antwortdokumente und Leser und Autorenfelder
« Antwort #18 am: 19.10.07 - 11:36:38 »
ja mit der Zeile funktioniert es dann im queryclose...

aber ich muß das ja als scipt laufen lassen und im queryclos muß der Script ausgeführt werden...

Im Script habe ich nun die folgenden Zeile

Set parent = db.GetDocumentByUNidSource.Document.ParentDocumentUNID)

gegen diese beiden ausgetauscht:

Set agent = session.CurrentAgent
Set parent = db.GetDocumentByID(agent.ParameterDocID)
   


Es kommt folgende Fehlermeldung:

Notes error: Im Hintergrund ausgeführter oder eingebeteter Agent verwendet einen nicht unterstützen Auslöser und Suchtyp

Gruß

Thomas


Im Querclose steht jetzt:

Sub Queryclose(Source As Notesuidocument, Continue As Variant)
   
   Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim doc As NotesDocument
   Dim agent As NotesAgent
   
   Set db = session.CurrentDatabase
   Set doc = db.GetDocumentByUNid(Source.Document.ParentDocumentUNID)
   Set agent = db.GetAgent("Agent_Leser")
   
   Call agent.RunOnServer(doc.NoteID)
   
   
End Sub






So sieht jeztt der Script aus:

Sub Initialize
   
   On Error Goto hell
   
   
   Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim dc As NotesDocumentCollection
   Dim agent As NotesAgent
   Dim respdoc As NotesDocument
   Dim parent As NotesDocument
   
   Set db = session.CurrentDatabase
   
   Set agent = session.CurrentAgent
   Set parent = db.GetDocumentByID(agent.ParameterDocID)
   'Set parent = db.GetDocumentByUNid(Source.Document.ParentDocumentUNID) ´wenn der Script im Queryclose ist
   
   Set dc = parent.Responses
   
   If dc.count > 0 Then
      Call dc.StampAll( "leser_response" , parent.leser_response )
   End If
   
   
   Exit Sub
hell:
   Print {error #} & Cstr(Err()) & { } & Error() & { in line } & { } &  Cstr(Erl())
   Exit Sub
   
End Sub

Offline cash

  • Aktives Mitglied
  • ***
  • Beiträge: 138
Re: Antwortdokumente und Leser und Autorenfelder
« Antwort #19 am: 23.10.07 - 08:43:20 »
habe nun noch mehr probiert aber komme einfach nicht weiter?

Was will mir die Fehlermeldung sagen? Bzw. wo könnte jetzt noch der Fehler liegen?

Gruß

Thomas

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz