• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Ошибка в Stampall

  • Автор темы wowa
  • Дата начала
W

wowa

Добрый день, что делать, если в строке 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
 
H

hosm

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

Akupaka

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

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

K-Fire

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

hosm

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

wowa

Тогда уже StampAll использовать без особого толку :)
Хотя, смотря в код, я вообще не понимаю, почему его использовали!

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

Да я не писал эту ерунду. Свалили великие разработчики в отпуск, вот и замещаю их, времени вообще нет читать что-то.
Есть главный док, у него есть респонсы. Если хоть один респонс - конфликт, то удалить все респонсы. Насколько я понял.

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

Не правда, все по делу. Пару дней назад пришло сообщение что я тут очень давно не появлялся, вот и решил зайти пару раз :)
 
A

Akupaka

Не правда, все по делу
Та я про флуд в шутку :)

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

hosm

Только тут надо быть осторожным, иногда, т.е. по невыясненным причинам, при многократных сменах связей (doc.MakeResponse) появляются странные баги с документом.
а что за баги-то, в чем проявляются?:)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!