Domino 9 und frühere Versionen > ND8: Entwicklung

- Notes-Fehler: Es wurden keine Dokumente kategorisiert - nach StampAll

(1/1)

@Dirk:
Hallo Notes Forum,

habe folgenden Agenten geschrieben, (Alle Dokumente; Menue Aktionen; Privat)
leider erhalte ich immer die Fehlermeldung:
"Notes-Fehler: Es wurden keine Dokumente kategorisiert"
bei der Ausführung von -->Call dcResponses.StampAll( "fldReaders" , doc.fldReaders)

Kann vielleicht jemand was damit anfangen?
Zur Info:
dc.count() > ca 2500 Dokumente
dcResponses.count() > 0 bis 10 Dokumente
doc.fldReaders >  String-Liste


Sub Initialize
   Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim dc As NotesDocumentCollection
   Dim dcResponses As NotesDocumentCollection   
   Dim doc As NotesDocument
   
   Dim x As Integer
   Dim strSearch As String   
   
   Set db = session.CurrentDatabase
   strSearch = {(Form = "frm_EAP")}
   Set dc=db.Search(strSearch,Nothing,0)
   
   For x = 1 To dc.Count()
      Set doc= dc.GetNthDocument(x)      
      If Not doc Is Nothing  Then
         Set dcResponses = doc.Responses()
         Call dcResponses.StampAll( "fldReaders" , doc.fldReaders)
      End If      
   Next
   
End Sub


Vielen Dank
Dirk

Grischu:
So würd ich das schreiben.

Wenn ein Dokument noch nie ein Antwortdokument hatte ist doc.Responses nicht initialisiert. Warum - keine Ahnung.


--- Code: ---Sub Initialize
   Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim dc As NotesDocumentCollection
   Dim dcResponses As NotesDocumentCollection  
   Dim doc As NotesDocument
  
   Dim x As Integer
   Dim strSearch As String  
  
   Set db = session.CurrentDatabase
   strSearch = {(Form = "frm_EAP")}
   Set dc=db.Search(strSearch,Nothing,0)

   Set doc = dc.GetFirstDocument  
   Do until doc is nothing
       if not dc.Responses is nothing then
          Set dcResponses = doc.Responses
          if dcResponses.count>0 then
             Call dcResponses.StampAll( "fldReaders" , doc.fldReaders)
          End if
       End if
       Set doc = dc.GetNextDocument(doc)
   Loop
  
End Sub


--- Ende Code ---

koehlerbv:
Noch ein Nachtrag, Dirk: Der folgende Code ist in 99,9% der Fälle der schlechtest denkbare. GetNthDocument berechnet jedes Mal den Zeiger auf das xte Dokument neu - und zwar von Anfang an! Am Anfang geht das fix. Ab 100 wird es träge, aber 1000 kann man den Dokumenten schon hinterherschauen und bald kommt dann schon der Moment, wo man in aller Ruhe jedem Dokument die Hand schütteln kann!


--- Zitat von: @Dirk am 07.04.10 - 15:47:54 ---   For x = 1 To dc.Count()
      Set doc= dc.GetNthDocument(x)      
      If Not doc Is Nothing  Then
         Set dcResponses = doc.Responses()
         Call dcResponses.StampAll( "fldReaders" , doc.fldReaders)
      End If      
   Next

--- Ende Zitat ---

Es gibt Ausnahmefälle, aber ... siehe oben.
Um Grössenordnungen schneller:

--- Code: ---Set NotesDocument = NotesDocumentCollection.GetFirstDocument
While Not (NotesDocument Is Nothing)
   .. do what a man have to do
   Set NotesDocument = NotesDocumentCollection.GetNextDocument (NotesDocument)
Wend
--- Ende Code ---

Dem, was Grischu bereits geschrieben hat, ist natürlich nichts hinzuzufügen (ausser: Doch, das ist durchaus erklärbar).

HTH,
Bernhard

@Dirk:
Vielen Dank für die Hinweise,

hatte mir mit einer Schleife geholfen und eure Vorschläge eben eingebaut.

Sieht jetzt so aus:

   Set doc= dc.GetFirstDocument()   
   Do Until doc Is Nothing
      If Not doc.Responses() Is Nothing Then         
         Set dcResponses = doc.Responses()
         Set docTmp = dcResponses.GetFirstDocument()
         Do Until docTmp Is Nothing
            Call docTmp.ReplaceItemValue(...   


Grischu:

--- Zitat ---ausser: Doch, das ist durchaus erklärbar
--- Ende Zitat ---

Das bestreite ich nicht, ich weiss die Erklärung nur nicht    ;D

Navigation

[0] Themen-Index

Zur normalen Ansicht wechseln