Autor Thema: aus mehreren Adressaten jeweils ein dokument mache  (Gelesen 1477 mal)

Offline bordi

  • Frischling
  • *
  • Beiträge: 25
  • Geschlecht: Männlich
  • Per Aspera - Ad Astra
    • Bordis Homepage
Ich möchte aus Dokumente in einer Datenbank, die mehrere Adressaten (SendTo) besitzen, einzelne Dokumente mit jeweils einem Adressaten machen.
Dieser Agent soll "vor eingang neuer mail" laufen.
leider funktioniert er nicht wie gewünscht, da am ende in jedem dokument, der selbe Adressat drinsteht.
was mache ich falsch???
danke für die hilfe

'****** Sinn des Agenten ist es die Lesefelder zu füllen, damit die Abteilungen nur ihre eigenen Dokumente lesen können
Sub Initialize
     Dim session As New NotesSession
     Dim db As NotesDatabase
     Dim dc As NotesDocumentCollection
     Dim doc As NotesDocument
     Dim item As NotesItem
     Set db = session.CurrentDatabase
     Set dc = db.allDocuments
     Set doc = dc.GetFirstDocument
     Dim gruppe As String
     Dim i As Integer
     Dim flagitem As NotesItem
     Dim max As Integer
     Dim sendtosave() As String
     
     While Not(doc Is Nothing)
           If Not (doc.HasItem( "processed" ) ) Then '*** Dokument schon durch Agent bearbeitet worden?
                 Set flagitem = New NotesItem( doc, "processed", 1 ) 'flag = 1 '*** Dokumentstatus wird als bearbeitet gesetzt
                 
                 max = Ubound(doc.SendTo)
                 Redim sendtosave(0 To max) As String      
                 
                 'SendTo-Feld zwischenspeichern
                 For i = 0 To max
                       sendtosave(i) = doc.SendTo(i)            
                 Next
                 
                 For i = 0 To Ubound(sendtosave)
                       'Nur gültige Adressaten zulassen                  
                       If Not Strright (sendtosave(i), "#") = ""  Then
                             'Richtigen Adressaten setzen                              
                             Set item = doc.ReplaceItemValue( "SendTo", sendtosave(i) )
                             
                             'Dokument wird gespeichert
                             Call doc.Save(True, True)
                             Call session.UpdateProcessedDoc( doc )            
                       End If
                 Next
                 
           End If
           'Nächstes unbearbeitetes Dokument
           Set doc = dc.GetNextDocument(doc)
     Wend
     
End Sub
stets zu suchen, stets zu finden und niemals aufzugeben, ist unser Ziel!

Offline Rob Green

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.651
  • Geschlecht: Männlich
    • Meipor
Re: aus mehreren Adressaten jeweils ein dokument m
« Antwort #1 am: 28.08.02 - 15:03:05 »
1. Frage: wo werden die neuen Docs erstellt in Deinem Codesnippet?

2. Frage: wenn Du das Teil im Client laufen läßt und den Debugger anhast, läuft alles reibungslos durch?
« Letzte Änderung: 01.01.70 - 01:00:00 von 1034200800 »
Vielleicht verdirbt Geld wirklich den Charakter.
Auf keinen Fall aber macht Mangel an Geld ihn besser.
(John Steinbeck)

Meiporblog: http://www.meipor.de/blog
allg. Unternehmerblog: http://www.m-e-x.de/blog

Glombi

  • Gast
Re: aus mehreren Adressaten jeweils ein dokument m
« Antwort #2 am: 28.08.02 - 18:17:48 »
Hi bordi,

Du erstellt ja gar keine neuen Dokumente, sondern iterierst im Dok. über alle Einträge im Feld SendTo und trägst dann den letzten ein.
Ausserdem wird kein Lesefeld gesetzt.

Wenn ich das richtig verstanden habe, will Du pro Eintrag im Feld SendTo eine Kopie des Dokuments erstellen (sofern ein "#" vorkommt).

Das könntest Du dann so machen:

dim newdoc as NotesDocument

For i = 0 To Ubound(sendtosave)
   'Nur gültige Adressaten zulassen    
   If Not Strright (sendtosave(i), "#") = ""  Then
    'Richtigen Adressaten setzn      

set newdoc = doc.CopyToDatabase( db )
newdoc.processed = 1

    Set item = newdoc.ReplaceItemValue( "SendTo", sendtosave(i) )

'Lesenamensfeld setzen
item.IsReaders = true
     
    'Dokument wird gespeichert
    Call newdoc.Save(True, True)  
    Call session.UpdateProcessedDoc( doc )  
   End If
  Next

« Letzte Änderung: 01.01.70 - 01:00:00 von 1034200800 »

Offline bordi

  • Frischling
  • *
  • Beiträge: 25
  • Geschlecht: Männlich
  • Per Aspera - Ad Astra
    • Bordis Homepage
Re: aus mehreren Adressaten jeweils ein dokument m
« Antwort #3 am: 28.08.02 - 18:22:24 »
1. hier:

For i = 0 To Ubound(sendtosave)
   'Nur gültige Adressaten zulassen    
   If Not Strright (sendtosave(i), "#") = ""  Then
    'Richtigen Adressaten setzen      
    Set item = doc.ReplaceItemValue( "SendTo", sendtosave(i) )
     
    'Dokument wird gespeichert
    Call doc.Save(True, True)  
    Call session.UpdateProcessedDoc( doc )  
   End If
  Next

2. im debugger zeigt er das bearbeitete sendto feld richtig gefüllt an.
zum beispiel bei einem dokument, das reinkommt mit drei adressaten, soll er drei dokumente mit jeweils einem der drei adressaten machen. wie gesagt im debugger stimmts, aber nachher habe ich drei mails mit einem identischen adressaten im sendto feld.

tja, keine ahnung was für einen mist ich mache, oder ob es am server liegt?
???
« Letzte Änderung: 01.01.70 - 01:00:00 von 1034200800 »
stets zu suchen, stets zu finden und niemals aufzugeben, ist unser Ziel!

Offline bordi

  • Frischling
  • *
  • Beiträge: 25
  • Geschlecht: Männlich
  • Per Aspera - Ad Astra
    • Bordis Homepage
Re: aus mehreren Adressaten jeweils ein dokument m
« Antwort #4 am: 28.08.02 - 18:27:40 »
danke glombi !!!

das probiere ich morgen mal aus.
ich hatte auch schon die idee mit "copytodatabase"
aber auf einmal hatte ich jede mail mehrfach.
mit "processed = 1" und "newdoc" anstatt "doc"
sollte es aber klappen

cu bordi
« Letzte Änderung: 01.01.70 - 01:00:00 von 1034200800 »
stets zu suchen, stets zu finden und niemals aufzugeben, ist unser Ziel!

Offline Rob Green

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.651
  • Geschlecht: Männlich
    • Meipor
Re: aus mehreren Adressaten jeweils ein dokument m
« Antwort #5 am: 29.08.02 - 00:04:18 »
bordi,

ok, jetzt sehe ich, wo das neu setzen "angeblich" erfolgt. Mittlerweile hat ja glombi genau den richtigen Ansatz und ichversuch mal den Fehler aufzuzeigen.
...
    'Dokument wird gespeichert
    Call doc.Save(True, True)  
...

Zu den Flags True:
der erste Flag besagt bei "True", daß Notes brutalst das Document auf jeden Fall speichert (Versionsdoc), WENN ein Dritter das gleiche Doc gerade im Edit Zugriff hat.

Wenn das erste Flag aber "FALSE" ist (Dein Fall), dann verzweigt Notes lieb WENN ein Dritter das gleiche Doc im Zugriff hat auf das zweite Flag. Das zweite Flag sagt "mach nix" = FALSE oder "mach halt ein Response" = TRUE.

Beide Fälle gelten aber nur dann, wenn ein Speicherkonflikt besteht. Kurzum: die Flags sind für die Handhabung von Parallelzugriffen auf Dokumente gedacht und nicht, um neue Docs per se zu erstellen.

Daher wundert es mich, daß Du anscheinend Dokumente mit diesem Script erstellt hast und würde sonst sagen, wenn das nicht das Problem wäre, das man Methoden wie gombli oder zB makeresponse verwendet.

Weiß jemand Rat, warum dennoch Docs erstellt wurden oder reiner Zufall?
Vielleicht verdirbt Geld wirklich den Charakter.
Auf keinen Fall aber macht Mangel an Geld ihn besser.
(John Steinbeck)

Meiporblog: http://www.meipor.de/blog
allg. Unternehmerblog: http://www.m-e-x.de/blog

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz