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