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

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

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

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

Softdeletions и документы типа ответ

  • Автор темы Guest
  • Дата начала
G

Guest

При удалении документа ответ он не отображается в карзине вчем может быть причина?
 
G

Guest

Код:
Sub Querydocumentdelete(Source As Notesuidatabase, Continue As Variant)
On Error Goto ERRORHANDLER
Dim db As NotesDatabase
Set db = Source.Database
Dim strMsg As String
Dim workspace As New NotesUIWorkspace
Dim noteid As String
Dim rc As NotesDocumentCollection
Dim dc As NotesDocumentCollection
Set dc = Source.Documents
Dim doc As NotesDocument

Dim g As Integer
For g=1 To Source.Documents.Count
Set doc = Source.Documents.GetNthDocument( g )
If( doc.IsUIDocOpen ) Then
noteid = doc.NoteID
Delete doc
Set doc = Source.Database.GetDocumentByID( noteid )
End If
Call doc.Remove( True )
Next
Continue = False
Call workspace.ViewRefresh
EXITSCRIPT:
Exit Sub
ERRORHANDLER:
Call ErrorMessage("Database Script: QueryDocumentdelete")
Resume EXITSCRIPT
End Sub

Добавлено: Все разобрался в свойствах View надо снять галочку Отбражать ответные документы ввиде иерархии
<table valign="top" style='margin:0;width:100%;border:1px dashed red;'>[tr]<td align='middle' bgcolor='#ff6060' valign='top' width='1%'>
<FONT color='#ffffff' size='+3'> ! </font>
</td><td align="midle" valign='top' style='background:#fff;'>Не забываем про теги кода</td>[/tr]</table>
 
N

nvyush

Ник0лай
Вместо
Код:
For g=1 To Source.Documents.Count
Set doc = Source.Documents.GetNthDocument( g )
...
Next
привыкайте пользовать
Код:
Set doc = docs.GetFirstDocument
Do Until doc Is Nothing
....
Set doc = docs.GetNextDocument(doc)
Loop
(в контексте удаления документов в представлении, кмк, лучше их перебирать от конца к началу).
Удаление родительских документов не означает автоматического удаления дочерних, нужно перебирать коллекцию респонсов, причем рекурсивно. Похоже, Вы удаляете родителей, а отклики болтаются в базе беспризорниками.

P.S. Ещё одна мысль — событие Querydocumentdelete используют для отмены удаления (путём Continue = False - для всех, удаления из коллекции Source.Documents - выборочно) или для удаления связанных документов. У Вас же в коде присутствует doc.Remove(True) для удаляемого документа. Экспериментов не проводил, но по логике документ удаляется дважды, соответственно один раз в корзину, второй - из корзины, т.е. совсем.
 
H

hosm

Я бы советовала получать сразу следующий документ коллекции:
Код:
Dim nextDoc as NotesDocument
Set doc = docs.GetFirstDocument
Do Until doc Is Nothing
Set nextDoc = docs.GetNextDocument(doc)
....
Set doc = nextDoc 
Loop
 
N

nvyush

Я бы советовала получать сразу следующий документ коллекции:
Ну, если нужно удалять документы из коллекции, то разумеется. Только я в Querydocumentdelete перебираю доки "снизу вверх", чтобы в иерархических вьюхах сперва обработать/удалить отклики, а потом родителей. Натыкался на грабли - удаляю док и его отклики и nextDoc указывает в пустоту.
Код:
Dim prevDoc as NotesDocument
Set doc = docs.GetLastDocument
Do Until doc Is Nothing
Set prevDoc = docs.GetPrevDocument(doc)
...
Set doc = prevDoc 
Loop
 
Мы в соцсетях:

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