• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

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

Gandliar

Lotus Team
16.02.2004
557
26
BIT
56
Привет!

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

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

garrick

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

Domino-Designer

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

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

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

Gandliar

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

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

И case sensitive c вами.

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

Kizarek86

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

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

VladSh

начинающий
Lotus Team
11.12.2009
1 790
157
BIT
108
Я с приватных вьюх ушёл на шаредные из-за того, что их можно создавать программно. Есть папка-шаблон (с ключиком), на её основе с помощью 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 790
157
BIT
108
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 790
157
BIT
108
А самое главное, как бд переоткрыть?
Код:
'переоткрываем БД, чтобы вновь созданная папка отобразилась в слева в мини-вью "Мои папки"
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 948
609
BIT
251
Ведь если индекс в папках обновлять не надо, то в видах все наоборот. Боюсь, что для большого количества пользователей совсем не вариант.
индекс для всего обновляется, зависит от того - где (сервер/клиент)
зависит от задачи - для пользователей возможно сделать категоризированную вьюшку (по его имени) и выводить её в форме, по имени пользователя (embedded view)
в доке может быть мультивэлью поле с именами порльзователей
 

VladSh

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

kolka

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

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

lmike

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

VladSh

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

lmike

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

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