Личные представления Username

Тема в разделе "Lotus - Программирование", создана пользователем root, 27 мар 2007.

Статус темы:
Закрыта.
  1. root

    root Гость

    Опять про море. Есть представлениe
    Код (Text):
    SELECT (@Contains(NextSign;@Name([CN];@UserName)) )
    это во view selection
    NextSign текстовый тип.
    представление - shared. private on first use
    Вопрос что нужно сделать чтоб работало, у меня тут совсем непонятки на одном компьютере работает на другом нет вчем может быть причина.
     
  2. Elena Nefedova

    Elena Nefedova Гость

    Тут можно на форуме поискать - была рекомендация чистить полностью весь пользовательский кэш автоматически.
     
  3. root

    root Гость

    Для: Elena Nefedova
    если каждый раз при открытии бд автоматически их удалять и чистить cache.ndk. Можно по подробней про эти процедуры.
    Чистить это значить просто удалить?
    а как автоматически удалить Частные представления.
     
  4. nor

    nor Гость

    Для: root

    ВАЖНО: Каждый пользователь бд, пользующийся приватными представлениями должен иметь "Create prsonal folders/views" опцию в ACL бд. Если это знчение не было установлено до того как пользователи начали пользоваться бд, то все их приватные представления сохранились локально, не на сервере, потому приведенный ниже код не будет работать для них. Чтобы исправить данную ситуацию необходимо: 1. Удалить приватные представления для каждого пользователя вручную методом удаления иконки бд с рабочей области клиента Lotus Notes пользователя. 2. В дизайнере переименовать приватные представления "Shared, private on first use" (дать им новые имя и алиас, отличные от предыдущих значений). 3. Выставить для каждого пользователя упомянутый бит в ACL бд.

    Далее следут листинг из рабочей бд. (Имена функциям и библиотекам, естественно, можно давать свои).

    Метод "RemovePrivateViewsSilent" необходимо вызывать каждый раз при закрытии бд на событии "Terminate" бд.

    Код (Text):
    Sub RemovePrivateViewsSilent()
    Dim agent As NotesAgent
    Dim cache As NotesDatabase
    Dim docCollection As NotesDocumentCollection

    On Error Goto catch

    Print "Updating private views for " + Me.GetUserName(Me.session.UserName) + "..."          
    ' clear cache.ndk
    Set cache = Me.session.GetDatabase("", "Cache.ndk", False)
    If Not cache Is Nothing Then
    Set docCollection = cache.AllDocuments
    If Not docCollection.Count = 0 Then Call docCollection.RemoveAll(True)
    End If
    ' remove private views                     
    Set agent = Me.db.GetAgent("$RemovePrivateViews")
    If Not agent Is Nothing Then Call agent.Run()      
    Print " "      

    Exit Sub       
    catch:
    Call ErrorProcess()    
    End
    Resume Next

    End Sub

    Агент "agent", приведенный выше, вызывает метод "RemovePrivateViews()" и пользуется библиотекой "FolderFunctions":
    Код (Text):
    Use "FolderFunctions"

    Sub RemovePrivateViews()
    Dim privateViewNames() As String

    On Error Goto catch

    Redim privateViewNames(11)
    privateViewNames(0) = "($myDepartmentSchedulerPr)"
    privateViewNames(1) = "($myDepartmentSchedulersListPr)"
    privateViewNames(2) = "($myDepartmentSchedulersListMonthPr)"
    privateViewNames(3) = "($myProfilePr)"
    privateViewNames(4) = "($mySchedulePr)"
    privateViewNames(5) = "($myShedulerListPr)"
    privateViewNames(6) = "($myYearStatisticEmpl-OOdaysPr)"
    privateViewNames(7) = "($mySchedulerListMonthPr)"
    privateViewNames(8) = "($myTeamSchedulerPr)"
    privateViewNames(9) = "($myTeamSchedulersListPr)"
    privateViewNames(10) = "($myTeamSchedulersListMonthPr)"
    privateViewNames(11) = "($myTeamsPr)"
    For i = 0 To Ubound(privateViewNames)
    Call DeletePrivateFolder(Me.db, privateViewNames(i))
    Next

    Exit Sub
    catch:
    Call ErrorProcess()    
    End
    Resume Next

    End Sub
    Далее следует листинг библиотеки "FolderFunctions", скопированной из открытых источников Интернет:

    Код (Text):
    (Options)

    Option Public
    Option Declare
    Use "ConstantsNotesAPI"

    Public Function IsPrivateFolder(v As Variant) As Boolean
    Dim vdoc As NotesDocument
    Dim item As NotesItem

    IsPrivateFolder = False

    Set vdoc = v.Parent.GetDocumentByUNID(v.UniversalID)
    If Not vdoc Is Nothing Then
    If vdoc.HasItem("$Flags") Then         
    Set item = vdoc.GetFirstItem("$Flags")
    If Instr(item.Values(0), "V") > 0 Then IsPrivateFolder = True
    End If
    End If

    End Function

    Public Function DeletePrivateFolder(db As NotesDatabase, vname$) As Boolean
    Dim p$
    Dim hDB&
    Dim retNoteID&
    Dim result%
    Dim doc As NotesDocument

    On Error Goto err_handler

    DeletePrivateFolder = False

    ' To open a Domino database on a server, use this function to create
    ' the full path specification, and pass this specification as input to NSFDbOpen
    ' or NSFDbOpenExtended.
    p = String(1024, " ")
    OSPathNetConstruct 0, db.Server, db.FilePath, p$

    ' This function takes a pathname to an existing Domino database or database
    ' template (whether on a Lotus Domino Server or a local database), opens the
    ' database, and returns a handle to it. All subsequent access to the database is
    ' carried out via this handle. Use NSFDbClose to close the database file handle
    ' and deallocate the memory associated with it.
    NSFDbOpen p$, hDB

    ' Given the name and NOTE_CLASS_xxx of a private design note (form, view,
    ' folder, helpindex, macro, field, or replication formula ), this function returns the note ID.
    ' Uses the View or Folder name passed to it - vname.
    result = NIFFindPrivateDesignNote(hDB, vname, NOTE_CLASS_VIEW, retNoteID)

    'If result is anything other than 0, the Private Design Note could not be found
    If Not result = 0 Then
    Print GetAPIError(result)
    Exit Function
    End If 
    ' Get the Private View or Folder by its NoteID
    Set doc = db.GetDocumentByID(Hex$(retNoteID))  
    Call doc.Remove(True)

    DeletePrivateFolder = True

    Exit Function
    err_handler:
    Print "Error " & Cstr(Err) & " at line " & Cstr(Erl) & ": " & Error$ + "."
    Exit Function
    Resume Next

    End Function

    Public Function GetPrivateFolder(vname$, valias$) As NotesView
    Dim ses As New NotesSession
    Dim db As NotesDatabase
    Dim p$
    Dim hDB&
    Dim retNoteID&
    Dim result%
    Dim doc
    Dim new_folder_flag As Boolean

    On Error Goto err_handler

    Set GetPrivateFolder = Nothing

    new_folder_flag = False

    Set db = ses.CurrentDatabase

    ' To open a Domino database on a server, use this function to create
    ' the full path specification, and pass this specification as input to NSFDbOpen
    ' or NSFDbOpenExtended.
    p = String(1024, " ")
    OSPathNetConstruct 0, db.Server, db.FilePath, p$

    NSFDbOpen p$, hDB

    result = NIFFindPrivateDesignNote(hDB, vname, NOTE_CLASS_VIEW, retNoteID)

    'If result is anything other than 0, the Private Design Note could not be found
    If result = 0 Then
    Set doc = db.GetDocumentByID(Hex$(retNoteID))
    If doc Is Nothing Then new_folder_flag = True
    Set GetPrivateFolder = db.GetView(vname)
    Else
    Print GetAPIError(result)
    new_folder_flag = True
    End If

    Exit Function
    err_handler:
    Print "Error " & Cstr(Err) & " at line " & Cstr(Erl) & ": " & Error$ + "."
    Exit Function
    Resume Next

    err_api_error:
    Print "API Error " & Cstr(result) & ": " & GetAPIError(result) + "."
    Exit Function
    Resume Next

    End Function

    Public Function GetAPIError(errorCode%) As String
    ' this function translates Notes API error codes into their
    ' corresponding error strings
    Dim errorString As String*256
    Dim returnErrorString$
    Dim resultStringLength&
    Dim errorCodeTranslated%

    ' mask off the top 2 bits of the errorCode that was returned; this is
    ' what the ERR macro in the API does
    errorCodeTranslated = (errorCode And ERR_MASK)

    ' get the error code translation using the OSLoadString API function
    resultStringLength = OSLoadString(0, errorCodeTranslated, errorString, Len(errorString) - 1)

    ' strip off the null-termination on the string before you return it
    If Instr(errorString, Chr(0)) > 0 Then
    returnErrorString = Left$(errorString, Instr(errorString, Chr(0)) - 1)
    Else
    returnErrorString = errorString
    End If

    GetAPIError = returnErrorString
    End Function

    Далее следует листинг библиотеки "ConstantsNotesAPI", скопированной из открытых источников Интернет:

    Код (Text):
    (Options)

    Option Public
    Option Declare

    (Declarations)

    ' Notes C API Constants
    Public Const NOTE_CLASS_DOCUMENT = &H0001
    Public Const NOTE_CLASS_DATA = NOTE_CLASS_DOCUMENT
    Public Const NOTE_CLASS_INFO = &H0002
    Public Const NOTE_CLASS_FORM = &H0004
    Public Const NOTE_CLASS_VIEW = &H0008
    Public Const NOTE_CLASS_ICON = &H0010
    Public Const NOTE_CLASS_DESIGN = &H0020
    Public Const NOTE_CLASS_ACL = &H0040
    Public Const NOTE_CLASS_HELP_INDEX = &H0080
    Public Const NOTE_CLASS_HELP = &H0100
    Public Const NOTE_CLASS_FILTER = &H0200 'This is an Agent, Macro
    Public Const NOTE_CLASS_FIELD = &H0400
    Public Const NOTE_CLASS_REPLFORMULA = &H0800
    Public Const NOTE_CLASS_PRIVATE = &H1000
    Public Const NOTE_CLASS_DEFAULT = &H8000
    Public Const NOTE_CLASS_NOTIFYDELETION = NOTE_CLASS_DEFAULT
    Public Const NOTE_CLASS_ALL = &H7FFF
    Public Const NOTE_CLASS_ALLNONDATA = &H7FFE
    Public Const NOTE_CLASS_NONE = &H0000
    Public Const NOTE_ID_SPECIAL = &HFFFF0000&

    Public Const DESIGN_TYPE_SHARED = 0
    Public Const DESIGN_TYPE_PRIVATE_DATABASE = 1

    Public Const NULLHANDLE = 0
    Public Const MAXDWORD = &HFFFFFFFF
    Public Const MAXWORD = &HFFFF
    Public Const MAXBYTE = &HFF

    ' Error code masks
    Public Const ERR_MASK = &H3FFF
    Public Const PKG_MASK = &H3F00
    Public Const ERRNUM_MASK = &H00FF

    Public Const NOTE_SIGNED = &H0001
    Public Const NOTE_ENCRYPTED = &H0002

    Public Const OPEN_SUMMARY = &H0001
    Public Const OPEN_NOVERIFYDEFAULT = &H0002
    Public Const OPEN_EXPAND = &H0004
    Public Const OPEN_NOOBJECTS = &H0008
    Public Const OPEN_SHARE = &H0020
    Public Const OPEN_CANONICAL = &H0040
    Public Const OPEN_MARK_READ = &H0100
    Public Const OPEN_ABSTRACT = &H0200
    Public Const OPEN_RESPONSE_ID_TABLE  = &H1000
    Public Const OPEN_WITH_FOLDERS = &H00020000

    Public Const UPDATE_FORCE = &H0001
    Public Const UPDATE_NAME_KEY_WARNING = &H0002
    Public Const UPDATE_NOCOMMIT = &H0004
    Public Const UPDATE_NOREVISION = &H0100
    Public Const UPDATE_NOSTUB = &H0200
    Public Const UPDATE_INCREMENTAL = &H4000
    Public Const UPDATE_DELETED = &H8000
    Public Const UPDATE_DUPLICATES = 0

    Public Const CONFLICT_ACTION_MERGE = 1
    Public Const CONFLICT_ACTION_HANDLED = 2

    Public Const UPDATE_SHARE_SECOND = &H00200000
    Public Const UPDATE_SHARE_OBJECTS = &H00400000

    Public Const NOTE_FLAG_READONLY = &H0001
    Public Const NOTE_FLAG_ABSTRACTED = &H0002
    Public Const NOTE_FLAG_INCREMENTAL = &H0004
    Public Const NOTE_FLAG_LINKED = &H0020
    Public Const NOTE_FLAG_INCREMENTAL_FULL = &H0040
    Public Const NOTE_FLAG_CANONICAL = &H4000

    ' Notes C API Declarations

    ' Declarations for POFU (private on first use) folders deletion
    Public Const APIModule = "NNOTES" ' Windows/32 only

    Declare Public Function OSPathNetConstruct Lib APIModule Alias "OSPathNetConstruct" _
    (Byval NullPort As Long, Byval Server As String, Byval FIle As String, Byval PathNet As String) As Integer

    Declare Public Function OSLoadString Lib APIModule (Byval hModule As Long, Byval stringCode As Integer, _
    Byval retBuffer As String, Byval bufferLength As Integer) As Integer

    Declare Public Function NSFDbOpen Lib APIModule Alias "NSFDbOpen" _
    (Byval PathName As String, DbHandle As Long) As Integer

    Declare Public Function NSFDbClose Lib APIModule Alias "NSFDbClose" _
    (Byval DbHandle As Long) As Integer

    Declare Public Function NSFNoteOpen Lib APIModule Alias "NSFNoteOpen" _
    (Byval hDB As Long, Byval NoteID As Long, Byval oFlags As Integer, nHandle As Long) As Integer

    Declare Public Function NSFNoteClose Lib APIModule Alias "NSFNoteClose" _
    (Byval nHandle As Long) As Integer

    Declare Public Function NSFNoteUpdate Lib APIModule Alias "NSFNoteUpdate" _
    (Byval nHandle As Long, Byval uFlags As Integer) As Integer

    Declare Public Function NSFNoteCreate Lib APIModule Alias "NSFNoteCreate" _
    (Byval hDB As Long, nHandle As Long) As Integer

    Declare Public Function NSFNoteDelete Lib APIModule Alias "NSFNoteDelete" _
    (Byval hDb As Long, Byval NoteID As Long, Byval flags As Integer) As Integer

    Declare Public Function NSFNoteSetInfo Lib APIModule Alias "NSFNoteSetInfo" _
    (Byval nHandle As Long, Byval nMember As Integer, V As Any) As Integer

    Declare Public Function NIFFindDesignNote Lib APIModule Alias "NIFFindDesignNote" _
    (Byval hDB As Long, Byval NoteName As String, Byval NoteClass As Integer, NoteID As Long) As Integer

    Declare Public Function NIFFindPrivateDesignNote Lib APIModule Alias "NIFFindPrivateDesignNote" _
    (Byval hDB As Long, Byval NoteName As String, Byval NoteClass As Integer, NoteID As Long) As Integer

    Declare Public Function FolderCreate Lib APIModule Alias "FolderCreate" _
    (Byval hDB As Long, Byval fDB As Long, Byval fNoteID As Long, Byval DBHandle As Long, Byval pszName As String, _
    Byval wNameLen As Integer, Byval DesignType As Integer, dwFlags As Long, fPointer As Long) As Integer

    Если что-то не получается, то пиши сюда, постараюсь помочь.
     
  5. GROMILA

    GROMILA Well-Known Member

    Регистрация:
    8 апр 2004
    Сообщения:
    297
    Симпатии:
    0
    Сергей,
    накропай базку плиз и прикрепи сюды плиз :(
    а лучше залей на CODEBASE, а тут размести ссылку

    думаю рабочее решение по борьбе с лотусиным приватом будет всем интересно.
     
  6. root

    root Гость

    Для: nor
    Ок. Спасибо.
     
  7. root

    root Гость

    Для: nor
    Что то совсем запутался.
    В Other->Database Resource на событие terminate провписал процедуру "RemovePrivateViewsSilent"
    (Тупо вставил, начал ругатся на Ссылку объекта "ME" )
    2. Создал агента с именем "$RemovePrivateViews" в процедуре initialize вставил RemovePrivateViews(подредактировал ее) тоесть в качестве privateViewNames(0) = "Мне на подпись"

    3. В script libraries скопировал две библиотеки.

    P.S пробывал это все отладить на кнопках вообще ошибку NIFFindPrivateDesignNote вызвало с просьбой обратится в Саппорт.

    Дизайнер 7 .
     
  8. root

    root Гость

    Все азобрался, только какойто глюк, если представление русские то он не работает а аглийские все ок.
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей