Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: Gravedigger am 16.01.04 - 13:29:46
-
Hallo,
kann jemand was mit der Fehlermeldung "Document is not from this collection" anfangen.
Der Fehler tritt bei folgenden Codezeilen auf:
>>>START<<<
Set appldoc = appldc.GetFirstDocument
While Not appldoc Is Nothing
If(appldoc.fdDeleted(0) <> "True") Then
Call logEntry(4, "Anwendungsdokument noch nicht gelöscht => Löschantrang")
appldoc.fdStatus = "Löschantrag"
appldoc.fdDeleteDateRequest = Now
Call appldoc.save(True, True)
Call mailApplDelete(appldoc) <- Fehler anscheinend hier
End If
Set appldoc = appldc.GetNextDocument(appldoc)
Wend
>>>ENDE<<<
Danke
Max
-
den Fehler hatte ich mal nach der Umstellung von 4.6 auf R5.
ich habe die DocumentCollection dann mal anders durchlaufen und es hat funktioniert
statt so
Set appldoc = appldc.GetFirstDocument
While Not appldoc Is Nothing
...
Set appldoc = appldc.GetNextDocument(appldoc)
Wend
hab ichs mal so probiert:
hab ich
for i = 1 to appldc.count
Set appldoc = appldc.GetNthDocument(i)
...
next
vielleicht klappts bei dir auch.
Leider weiß ich nicht _warum_ das so war und wo der Fehler lag.
-
Was passiert bei
Call mailApplDelete(appldoc)
genau? Wird das Dokument gelöscht, so wie der Name vermuten lässt. Falls ja, wird die Fehlermeldung durch
Set appldoc = appldc.GetNextDocument(appldoc)
produziert, da es GetNextDocument(appldoc) nicht mehr gibt.
Die Methode von Thomas Völk mit dem NthDocument sollte gehen. Wobei das sehr unperformant bei sehr vielen Dokumenten in der Collection ist.
Performanter wäre mit einem 2. Dokument zu arbeiten.
Andreas
-
Was passiert bei
Call mailApplDelete(appldoc)
genau? Wird das Dokument gelöscht, so wie der Name vermuten lässt.
Nicht ganz. Hier wird eine Email versendet, deswegen "mail...".
Dank euch, funktionert einwandfrei.
Nice weekend.
-
Thomas:
8tung:
for i = 0 to appldc.count -1
Set appldoc = appldc.GetNthDocument(i)
...
next
Ansonsten: Glombi hat recht, mit einem zweiten Doc-Object, wenn es um Löschungen geht.
Max:
Was sagt denn der Debugger, wo der Fehler auftritt? Vermutlich nicht, wo Du es glaubst, sondern beim GetNextDocument.
-
for i = 0 to appldc.count -1
Set appldoc = appldc.GetNthDocument(i)
...
next
äh, Zitat aus der Hilfe:
Set notesDocument = notesDocumentCollection.GetNthDocument( n% )
n%:
Integer. A number indicating the document to return. Use 1 to indicate the first document in the collection, 2 to indicate the second document, and so on.
-
Nicht nur, dass die DesignerHelp das sagt - das IST auch so.
Es ist aber auch so, dass bei grösseren Collection das GetNthDocument verheerende Performanceeinbrüche beschert, da jedesmal der Pointer von der Basis der Collection aus neu gebildet werden muss. Wenn man sich den Fortschritt zum Bleistift per Print-Statement anzeigen lässt, so kann man am Anfang gerade noch so die Hunderter-Stellen lesen, aber nach wenigen Tausend Docs kann man dann jedem Document einzeln die Hand schütteln.
Wirklich performant ist GetNextDocument - und das funktioniert ! Der Fehler muss also irgendwo anders liegen.
Was macht den mailAppDelete () mit appldoc ? Wird da ewendudel (SEMEAPHOROS !!!) was neu instantiiert (der Aufruf erfolgt ja by reference !) ? Das würde die Fehlermeldung ganz zwanglos erklären ;-)
Ciao,
Bernhard
-
Sorry für die Falschmeldung beim GetNthDocument, zeigt, wie nie ich diese Funktion brauche ..... :-) ... sonst ist doch das immer nullbasierend...... tja... die Ausnahme bestätigt die Regel.
Dudelsack ist eingetragen ;)
-
... sonst ist doch das immer nullbasierend...
Jaja, "sonst". Aber hier macht es ja wegen NotesDocumentCollection.Count wirklich Sinn - das passt schon ;-)
Ciao,
Bernhard
-
Passt schon, ist aber auch eine der ganz wenigen Stellen, wo der Count unfrisiert gleich passt ;D