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

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

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

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

Формула отбора для приватного вида

Gandliar

Lotus Team
16.02.2004
556
26
BIT
40
Привет!

Есть ли смысл для приватного вида менять формулу @isMember(@name([CN];@userName);поле_автор) на @isMember("конкретный автор";поле_автор) ?

Заранее благодарю.
 

garrick

Lotus Team
26.10.2009
1 351
151
BIT
188
А что значит "конкретный автор"? В каком оно формате? Сам предпочитаю при сравнении имён как строк предварительно приводить их к одному виду, чтобы чего не вышло.
 

Domino-Designer

Людям надо поморгать!
Lotus Team
06.12.2011
616
223
BIT
9
@garrick, он хочет вместо вычисляемого значения константу поставить

@Gandliar, если вид только для него, то да. А если это шаблон приватного вида для многих, то нет.

И case sensitive c вами.
 
  • Нравится
Реакции: NetWood

Gandliar

Lotus Team
16.02.2004
556
26
BIT
40
@garrick, он хочет вместо вычисляемого значения константу поставить

@Gandliar, если вид только для него, то да. А если это шаблон приватного вида для многих, то нет.

И case sensitive c вами.

Именно вместо @username подставить константу. На queryopen приватного вида 1 раз. Вот у меня есть сомнения увеличит ли это быстродействие. Формула отрабатывает при втором открытии и вид соответственно пересчитывается еще раз. Вид обновляемый auto, after first use
 
  • Нравится
Реакции: Vertigo и Domino-Designer

Kizarek86

Green Team
20.07.2007
871
7
BIT
38
Я ушел от приватных вьюх с @username , на общее представление.
Делаем первую колонку $UserName с выводом в неё категории из нужных полей,
и на PostOpen вьюхи
@SetViewInfo([SetViewFilter]; @username; "$UserName"; @True)

если так будете делать нужно во все вьюхи которые без этого условия добавлять сброс, тоже на PostOpen
@SetViewInfo([SetViewFilter]; ""; "$UserName"; @True)
 
  • Нравится
Реакции: Vertigo и Domino-Designer

VladSh

начинающий
Lotus Team
11.12.2009
1 786
157
BIT
78
Я с приватных вьюх ушёл на шаредные из-за того, что их можно создавать программно. Есть папка-шаблон (с ключиком), на её основе с помощью EnableFolder создаю папку, заменяю $Flags на "3PFYV", добавляю IsAuthors-поле, куда сую текущего юзера. Программно переоткрываю БД и вуаля!.. Нужно только при увольнении юзера чистить его папки агентом на сервере.
 
  • Нравится
Реакции: Domino-Designer

kolka

Green Team
16.02.2013
32
7
BIT
0
Программно переоткрываю БД
А можно этот момент поподробнее?

Страдаю с геморроем от SPFU фолдеров. Они когда создаются не наследуют флаг "Evaluate actions for every document change". Ставлю флаг принудительно через DXL, чищу кеш в cache.ndk.
Ну и вторая проблема с ними - если в фолдере много документов, то за время его очистки можно чай попить.

Хочу попробовать вот это:
Я с приватных вьюх ушёл на шаредные из-за того, что их можно создавать программно. Есть папка-шаблон (с ключиком), на её основе с помощью EnableFolder создаю папку
Тут речь про фолдеры или вьюшки?

EnableFolder (NotesDatabase - LotusScript®)
Given a folder name, enables the folder.
 

VladSh

начинающий
Lotus Team
11.12.2009
1 786
157
BIT
78
kolka
Я про папки писал. Но проблем с видами по идее быть не должно, только нужно будет правильно $Flags указать. Если надо, выложу код для папок.

Добавлено: для видов всё должно быть проще - EnableFolder там не нужен, достаточно скопировать элемент дизайна, переименовать и дать доступы.
 

kolka

Green Team
16.02.2013
32
7
BIT
0
Я про папки писал.
Я папки создаю фоновым открытием-закрытием по 4005 ошибке.
Общая логика:
1.очистить папку
2. закинуть коллекцию в папку

Во время очистки ловлю 4005. По ней создаётся папка.
Во время закидывания коллекции пробую сперва всю коллекцию кинуть, если ошибка, то тогда доки поштучно. Код внизу.

А самое главное, как бд переоткрыть?

Код:
Option Public
Option Declare
Use "libCachedObjects"
Use "libTracer"
Sub Initialize
    registerModule "libFolderHelper"
End Sub
Public Sub putCollectionToFolder( coll As NotesDocumentCollection, argTargetFolderName As String )
    On Error GoTo catch
 
    If coll Is Nothing Then
        GoTo finally
    End If
 
    If coll.Getfirstdocument() Is Nothing Then
        GoTo finally
    End If
 
    On Error GoTo catchPutAllInFolderFailed
    Call coll.PutAllInFolder( argTargetFolderName, True )
    On Error GoTo catch
    logDebug "collection sent to folder in one step"
 
    GoTo finally
catchPutAllInFolderFailed:
    logWarn "error: " & CStr( Err ) & " on line " & CStr( Erl ) & " " & Error
    Call putCollToFolderDocsInLoop( coll, argTargetFolderName )
    Resume finally
catch:
    throwException
finally:
End Sub

Private Sub createSPFUFolder( argFolderName As String )
    On Error Resume Next
 
    Dim ws As New NotesUIWorkspace
    Dim uidb As NotesUIDatabase
    Set uidb = ws.Currentdatabase
    Call uidb.OpenView( argFolderName )
    Dim uiview As NotesUIView
    Set uiview = ws.CurrentView
 
    If Not uiview Is Nothing Then
        Call uiview.Close()
    End If
End Sub

Public Sub cleanFolder( folderName As String )
    On Error GoTo catch
    On Error 4005 GoTo catchSPFUFolderDoesNotExist
 
    Dim argFolder As NotesView
    Set argFolder = getDB( DB_CURRENT ).getView( folderName )
 
    Call argFolder.Allentries.Removeallfromfolder( folderName )
 
    GoTo finally
catchSPFUFolderDoesNotExist:
    Call createSPFUFolder( folderName )
    Resume finally
catch:
    throwException
finally:
End Sub

Private Sub putCollToFolderDocsInLoop( coll As NotesDocumentCollection, argTargetFolderName As String )
    On Error GoTo catch
 
    logDebug "putting docs in folder one-by-one"
 
    Dim docNext As NotesDocument
    Set docNext = coll.Getfirstdocument()
    While Not docNext Is Nothing
        Dim doc As NotesDocument
        Set doc = docNext
        Set docNext = coll.Getnextdocument( doc )
     
        Call doc.Putinfolder( argTargetFolderName )
    Wend
 
    GoTo finally
catch:
    Resume finally
finally:
End Sub
 

VladSh

начинающий
Lotus Team
11.12.2009
1 786
157
BIT
78
А самое главное, как бд переоткрыть?
Код:
'переоткрываем БД, чтобы вновь созданная папка отобразилась в слева в мини-вью "Мои папки"
Call nuiws.CurrentDatabase.Close()
Call nuiws.OpenDatabase(ndb.Server, ndb.FilePath, "", "", True)
MsgBox "Папка '" + sFolderName + "' успешно создана." + Chr(13) + "Если она не отобразилась, переоткройте БД.", 64, MSGT_PRODUCT
Чтобы это работало на клиенте, нужно давать пользователям доступ Editor и галку "Create SHARED folders/views".
Если не хочется - создавать папку на сервере, но тогда при создании папки из Basic-клиента и переоткрытии БД папка в аутлайне мигает, но сразу же исчезает, - нужно только вручную переоткрывать БД.
 
  • Нравится
Реакции: kolka

kolka

Green Team
16.02.2013
32
7
BIT
0
Код:
Call nuiws.CurrentDatabase.Close()
Call nuiws.OpenDatabase(ndb.Server, ndb.FilePath, "", "", True)
Провел следственный эксперимент - действительно работает! Спасибо, почему-то был уверен что так нельзя.

Чтобы это работало на клиенте, нужно давать пользователям доступ Editor и галку "Create SHARED folders/views".
Если не хочется - создавать папку на сервере, но тогда при создании папки из Basic-клиента и переоткрытии БД папка в аутлайне мигает, но сразу же исчезает, - нужно только вручную переоткрывать БД.
А вот тут эксперимент показал, что достаточно Author + Create personal folders/views. Без галки создаются десктопные папки - вот они не подходят для работы.
1545151563021.png


VladSh сказал(а):
для видов всё должно быть проще - EnableFolder там не нужен, достаточно скопировать элемент дизайна, переименовать и дать доступы.
Руки чешутся попробовать. Интересно как себя индексер поведет. Ведь если индекс в папках обновлять не надо, то в видах все наоборот. Боюсь, что для большого количества пользователей совсем не вариант.
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
215
Ведь если индекс в папках обновлять не надо, то в видах все наоборот. Боюсь, что для большого количества пользователей совсем не вариант.
индекс для всего обновляется, зависит от того - где (сервер/клиент)
зависит от задачи - для пользователей возможно сделать категоризированную вьюшку (по его имени) и выводить её в форме, по имени пользователя (embedded view)
в доке может быть мультивэлью поле с именами порльзователей
 

VladSh

начинающий
Lotus Team
11.12.2009
1 786
157
BIT
78
индекс для всего обновляется, зависит от того - где (сервер/клиент)
Это точная инфа? Там же нет формулы отбора?
Индекс для папок должен обновляться только в случае добавления или удаления документа в/из папки.
 

kolka

Green Team
16.02.2013
32
7
BIT
0
Это точная инфа? Там же нет формулы отбора?
Индекс для папок должен обновляться только в случае добавления или удаления документа в/из папки.
Отбор документов не должен обновляться (хотя что насчет удаленных документов?), а значения в колонках - хз.

зависит от задачи - для пользователей возможно сделать категоризированную вьюшку (по его имени) и выводить её в форме, по имени пользователя (embedded view)
Такое тоже используем, но пара моментов напрягает:
- нет сортировки по колонкам
- нет search this view
- некоторые кнопки вместо документов во вьюшке видят форму, в которую она встроена
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
215
некоторые кнопки вместо документов во вьюшке видят форму, в которую она встроена
про то как можно сделать я недавно описывал...
кнопки д.б. во вьюшке и не пытаться использовать NotesUIView/CurrentDocument/DocumentContext
вполне устраивает Find, есть БД с 2лямами доков (вместе с респонсами), по основным 10ок тысяч - сотрудники не пользуют ничего кроме Ctrl-F во вьюшках (обычных) и не сортируют, им так удобнее
потому - не вижу это серьезным препятствием
зато снимает весь гимор с папками и приватными вьюшками
 

VladSh

начинающий
Lotus Team
11.12.2009
1 786
157
BIT
78
сотрудники не пользуют ничего кроме Ctrl-F во вьюшках (обычных) и не сортируют, им так удобнее
зато снимает весь гимор с папками и приватными вьюшками
Вечный спор, что лучше самолёт или бульдозер :) Оба имеют право на жизнь; выбрать что-нибудь можно только для конкретных условий и требований, а не как панацея.
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
215
Вечный спор, что лучше самолёт или бульдозер :) Оба имеют право на жизнь; выбрать что-нибудь можно только для конкретных условий и требований, а не как панацея.
справедливо, но я так ниразу и не захотел использовать (в срезе индивидульно для юзера) ни папки, ни приватные вьюшки (эти ваще даже не пытался из-за известных особенностей)
 
Мы в соцсетях:

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