Ошибка в Stampall

wowa

Well-known member
01.02.2007
845
0
#1
Добрый день, что делать, если в строке Call argdoccol.stampall("deleted","1") ошибка: Notes erorr: Document has been deleted

Код:
Function checkColConflicts(argdoccol As NotesDocumentCollection) As NotesDocumentCollection
Dim session As New NotesSession
Dim db As NotesDatabase
Dim doc As notesdocument
Set db = session.currentdatabase

If argdoccol Is Nothing Then
Set checkcolConflicts = db.search("test",Nothing,0)
Exit Function
End If
If argdoccol.count = 0 Then
Set checkColConflicts = argdoccol
Exit Function
Else
Set doc = argdoccol.getfirstdocument
While Not doc Is Nothing
If doc.hasitem("$Conflict") Then
Call argdoccol.stampall("deleted","1") ' Notes erorr: Document has been deleted
Set checkcolConflicts = db.search("test",Nothing,0)
Exit Function
End If
Set doc = argdoccol.getnextdocument(doc)
Wend
Set checkcolConflicts = argdoccol
End If

End Function
 

hosm

* so what *
18.05.2009
2 442
6
#2
проверять каждый документ из коллекции перед использованием stampall на doc.IsDeleted и убрать из коллекции лишние (где doc.IsDeleted=True), или как-то обрабатывать эту ошибку (on error ... goto ... - например, в обработчике пройтись по всем неудаленным документам коллекции), или просто "гасить" (on error ... resume next)
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#3
проверять каждый документ из коллекции перед использованием stampall на doc.IsDeleted и убрать из коллекции лишние
Тогда уже StampAll использовать без особого толку :)
Хотя, смотря в код, я вообще не понимаю, почему его использовали!

wowa, ты ж нафлудил уже на "мегагуру", а хелп читать ленишься! :)
Зачем ты использовал тут StampAll?! Ты же ранее пошел проверять каждый док из коллекции на $Conflict!
У тебя при наличии хотя бы одного документа-конфликта в коллекции все документы коллекции будут отмечены "deleted" = "1"!
Еще и search дублируется зачем-то, можно было бы просто в результат функции пихать ту же коллекцию. Либо условие поиска нам приведено неверное/нереальное. А, если реальное, то какое-то оно странное о.О
 
K

K-Fire

#4
А это нормально что в цикле идет перебор документов в коллекции и в каждой итерации делается stampall? :)
 

hosm

* so what *
18.05.2009
2 442
6
#6
ну, в моей первоначальной версии ответа была фраза "просто не использовать его". Думаю, можно обойтись обработчиком - если не получилось по-быстрому всё обработать StampAll, то в коде, вызываемом по "on error ... goto ... " делать это долго и нудно)
 

wowa

Well-known member
01.02.2007
845
0
#7
Тогда уже StampAll использовать без особого толку :)
Хотя, смотря в код, я вообще не понимаю, почему его использовали!

wowa, ты ж нафлудил уже на "мегагуру", а хелп читать ленишься! ;)
Зачем ты использовал тут StampAll?! Ты же ранее пошел проверять каждый док из коллекции на $Conflict!
У тебя при наличии хотя бы одного документа-конфликта в коллекции все документы коллекции будут отмечены "deleted" = "1"!
Еще и search дублируется зачем-то, можно было бы просто в результат функции пихать ту же коллекцию. Либо условие поиска нам приведено неверное/нереальное. А, если реальное, то какое-то оно странное о.О
Да я не писал эту ерунду. Свалили великие разработчики в отпуск, вот и замещаю их, времени вообще нет читать что-то.
Есть главный док, у него есть респонсы. Если хоть один респонс - конфликт, то удалить все респонсы. Насколько я понял.

Добавлено:
wowa, ты ж нафлудил уже на "мегагуру", а хелп читать ленишься! ;)
Не правда, все по делу. Пару дней назад пришло сообщение что я тут очень давно не появлялся, вот и решил зайти пару раз :)
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#8
Та я про флуд в шутку :)

Есть главный док, у него есть респонсы. Если хоть один респонс - конфликт, то удалить все респонсы. Насколько я понял.
А если другие респонсы являются результатом многочасового труда односельчан? Что-то тут не так. Может надо было из респосов только конфликты удалить?
Только в таком случае, "удаление" отметкой флагом не предотвращает от возврата потом этого помеченного документа в качестве ответного в коллекции, с помощью doc.Responses.
Поэтому, тут надо удалять либо совсем, либо отмечать док и удалять связь. А в случае восстановления документа и связь восстанавливать.
Только тут надо быть осторожным, иногда, т.е. по невыясненным причинам, при многократных сменах связей (doc.MakeResponse) появляются странные баги с документом.