• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

Выборочное удаление

  • Автор темы PaKo
  • Дата начала
P

PaKo

Есть вид, в нем документы созданные по 3-м формам. Пользователь может удалить только один тип документа.
Как в querydocumentdelete удалить то что надо и запретить то что удалять нельзя?

Код:
Sub Querydocumentdelete(Source As Notesuidatabase, Continue As Variant)
If Source.Documents.Count=0 Then
Exit sub
End If

Dim doc As NotesDocument
Set doc=Source.Documents.Getfirstdocument()
While Not doc Is Nothing
If doc.form(0)="Problem" Then
Continue = True
Else
Continue = False
End If
Print doc.form(0)
Set doc=source.Documents.Getnextdocument(doc)
Wend
End Sub
Вот мой код, но при таком раскладе удаляются все доки что выделены.
 
N

nvyush

Попробуйте так:
Код:
Sub Querydocumentdelete(Source As Notesuidatabase, Continue As Variant)
Dim docs As NotesDocumentCollection
Dim doc As NotesDocument
Dim nextDoc As NotesDocument

Set docs = Source.Documents
Set doc = docs.Getfirstdocument()

Do Until doc Is Nothing
Set nextDoc = docs.Getnextdocument(doc)
If doc.form(0)="Problem" Then
'Continue = True
Else
docs.DeleteDocument(doc) 'удаляем из коллекции удаляемых
End If
Print doc.form(0)
Set doc = nextDoc
Loop
End Sub
 

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
nvy
главное сверху написать
Continue = false ' блокируем лотусиное удаление ВООБЩЕ :facepalm:
 
P

PaKo

ToxaRat
Ну это само собой.


Добавлено: Вообщем попробовал предложенный вариант. Вот код:
Код:
Sub Querydocumentdelete(Source As Notesuidatabase, Continue As Variant)
Continue=False
Dim docs As NotesDocumentCollection
Dim doc As NotesDocument
Dim nextDoc As NotesDocument

Set docs = Source.Documents
Set doc = docs.Getfirstdocument()

Do Until doc Is Nothing
Set nextDoc = docs.Getnextdocument(doc)
If doc.form(0)="Problem" Then
'Continue = True
Else
Call docs.Deletedocument(doc) 'удаляем из коллекции удаляемых
End If
Print doc.form(0)
Set doc = nextDoc
Loop
Continue=True
End Sub

Все равно удаляются все доки. Если в конце не вставить Continue=True то ничего не происходит.

Upd.
Заменил Continue=True на docs.Removeall(True) и все заработало.
 
H

hosm

вместо Continue=True
call docs.RemoveAll(True)
упс, не заметила, пока пыталась перелогиниться, что уже дописали :facepalm:
 
30.05.2006
1 345
12
BIT
0
Querydocumentdelete - интерфейсный бантик.

Обходится лёгким движением левой задней ноги юзера
 

rinsk

Lotus Team
12.11.2009
1 151
125
BIT
3
Далеко не каждый юзер знает, что такое отладчик, да ещё может юзать его "левой задней ногой". С другой стороны, что мешает скрыть дизайн рабочей базы?

не... Это он о том, как правильно - а не как можно:D
 
N

nvyush

Это он о том, как правильно - а не как можно
Поделитесь сакральными знаниями, как правильно.
Я использую вариации на тему вышеприведённого кода (только у пользователей в ТУД сброшена галка удаления, и документы только помечаются удалёнными).
 

rinsk

Lotus Team
12.11.2009
1 151
125
BIT
3
Поделитесь сакральными знаниями, как правильно.
Я использую вариации на тему вышеприведённого кода (только у пользователей в ТУД сброшена галка удаления, и документы только помечаются удалёнными).
Дак сами и озвучили эти сакральные знания:D только бы я их поменял местами - "в ТУД сброшена галка удаления" + "вариации на тему вышеприведённого кода"
 
30.05.2006
1 345
12
BIT
0
Далеко не каждый юзер знает, что такое отладчик, да ещё может юзать его "левой задней ногой". С другой стороны, что мешает скрыть дизайн рабочей базы?
Зачем отладчик?? Достаточно File->Preferenses..->ToolBar preferenses ..
 
H

hosm

могу ошибаться, но вроде Simple Action "Delete document" забивает на Querydocumentdelete.
 
N

nvyush

могу ошибаться, но вроде Simple Action "Delete document" забивает на Querydocumentdelete.
Что-то я не нашёл возможности использовать в "умных кнопках" простые действия (клиент 8.0.Х). А давать простым пользователям права на создание агентов считаю непозволительной роскошью ;) .
 
30.05.2006
1 345
12
BIT
0
Если я правильно понял, это намёк на SmartButton? Проверять лень, но мне помнится, что там допустимы только дог-формулы, а разве @Command([MoveToTrash]) или @Command([EditClear]) обходят Querydocumentdelete?
Там допустима формула FIELD any:=@DeleteDocument
 
N

nvyush

Там допустима формула FIELD any:=@DeleteDocument
Это да. Но речь-то шла об удалении документов, а не о редактировании. А что касается @SetField(), то можно, конечно, не давать на документы авторских прав вообще, а все обновления производить серверными агентами, только нужно адекватно оценивать угрозы и выбирать способы защиты. Далеко не всегда требуется возводить крепостные стены от гусей.
 
30.05.2006
1 345
12
BIT
0
Это да. Но речь-то шла об удалении документов, а не о редактировании. А что касается @SetField(), то можно, конечно, не давать на документы авторских прав вообще, а все обновления производить серверными агентами, только нужно адекватно оценивать угрозы и выбирать способы защиты
Это "редактирование" и есть удаление. Защищать от него отъёмом авторских прав - это как раз возведение китайских стен. Адекватная мера - галка "Удаление" в ACL (как тут уже говорилось)
 
N

nvyush

Это "редактирование" и есть удаление.
Извиняюсь, спутал "FIELD any:=@DeleteDocument" с "FIELD any:= @DeleteField" (таким способом можно поудалять все поля в документе, потому я и завёл речь о правах автора на документ).
Что касается @DeleteDocument, то в соответствии со справкой дизайнера "This function works only in agents". Недоверяя справке, проверил формулу "FIELD any:=@DeleteDocument" в "умной кнопке" — не работает (клиент 8.0.Х). Формулы "@Command([EditClear])" и "@Command([MoveToTrash])" в "умной кнопке" работают, но не обходят Querydocumentdelete, т.е. если скрыть дизайн, даже отладчик не поможет обойти запрет удаления.
 
T

turumbay

т.е. если скрыть дизайн, даже отладчик не поможет обойти запрет удаления.
не смартбаттонами едиными: например от агента в локальной базе защиты все равно нету...
а вызов агента можно уже и на смартбаттон вешать :)
 
Мы в соцсетях:

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