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

  • Автор темы Автор темы 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
Вот мой код, но при таком раскладе удаляются все доки что выделены.
 
Попробуйте так:
Код:
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
 
nvy
главное сверху написать
Continue = false ' блокируем лотусиное удаление ВООБЩЕ :facepalm:
 
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) и все заработало.
 
вместо Continue=True
call docs.RemoveAll(True)
упс, не заметила, пока пыталась перелогиниться, что уже дописали :facepalm:
 
Querydocumentdelete - интерфейсный бантик.

Обходится лёгким движением левой задней ноги юзера
 
Далеко не каждый юзер знает, что такое отладчик, да ещё может юзать его "левой задней ногой". С другой стороны, что мешает скрыть дизайн рабочей базы?

не... Это он о том, как правильно - а не как можно:D
 
Это он о том, как правильно - а не как можно
Поделитесь сакральными знаниями, как правильно.
Я использую вариации на тему вышеприведённого кода (только у пользователей в ТУД сброшена галка удаления, и документы только помечаются удалёнными).
 
Поделитесь сакральными знаниями, как правильно.
Я использую вариации на тему вышеприведённого кода (только у пользователей в ТУД сброшена галка удаления, и документы только помечаются удалёнными).
Дак сами и озвучили эти сакральные знания:D только бы я их поменял местами - "в ТУД сброшена галка удаления" + "вариации на тему вышеприведённого кода"
 
Далеко не каждый юзер знает, что такое отладчик, да ещё может юзать его "левой задней ногой". С другой стороны, что мешает скрыть дизайн рабочей базы?
Зачем отладчик?? Достаточно File->Preferenses..->ToolBar preferenses ..
 
могу ошибаться, но вроде Simple Action "Delete document" забивает на Querydocumentdelete.
 
могу ошибаться, но вроде Simple Action "Delete document" забивает на Querydocumentdelete.
Что-то я не нашёл возможности использовать в "умных кнопках" простые действия (клиент 8.0.Х). А давать простым пользователям права на создание агентов считаю непозволительной роскошью ;) .
 
Если я правильно понял, это намёк на SmartButton? Проверять лень, но мне помнится, что там допустимы только дог-формулы, а разве @Command([MoveToTrash]) или @Command([EditClear]) обходят Querydocumentdelete?
Там допустима формула FIELD any:=@DeleteDocument
 
Там допустима формула FIELD any:=@DeleteDocument
Это да. Но речь-то шла об удалении документов, а не о редактировании. А что касается @SetField(), то можно, конечно, не давать на документы авторских прав вообще, а все обновления производить серверными агентами, только нужно адекватно оценивать угрозы и выбирать способы защиты. Далеко не всегда требуется возводить крепостные стены от гусей.
 
Это да. Но речь-то шла об удалении документов, а не о редактировании. А что касается @SetField(), то можно, конечно, не давать на документы авторских прав вообще, а все обновления производить серверными агентами, только нужно адекватно оценивать угрозы и выбирать способы защиты
Это "редактирование" и есть удаление. Защищать от него отъёмом авторских прав - это как раз возведение китайских стен. Адекватная мера - галка "Удаление" в ACL (как тут уже говорилось)
 
Это "редактирование" и есть удаление.
Извиняюсь, спутал "FIELD any:=@DeleteDocument" с "FIELD any:= @DeleteField" (таким способом можно поудалять все поля в документе, потому я и завёл речь о правах автора на документ).
Что касается @DeleteDocument, то в соответствии со справкой дизайнера "This function works only in agents". Недоверяя справке, проверил формулу "FIELD any:=@DeleteDocument" в "умной кнопке" — не работает (клиент 8.0.Х). Формулы "@Command([EditClear])" и "@Command([MoveToTrash])" в "умной кнопке" работают, но не обходят Querydocumentdelete, т.е. если скрыть дизайн, даже отладчик не поможет обойти запрет удаления.
 
т.е. если скрыть дизайн, даже отладчик не поможет обойти запрет удаления.
не смартбаттонами едиными: например от агента в локальной базе защиты все равно нету...
а вызов агента можно уже и на смартбаттон вешать :-)
 
Мы в соцсетях:

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