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

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

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

    root Гость

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

    Elena Nefedova Гость

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

    root Гость

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

    nor Гость

    Репутация:
    0
    Для: root

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

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

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

    Код:
    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":
    Код:
    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", скопированной из открытых источников Интернет:

    Код:
    (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", скопированной из открытых источников Интернет:

    Код:
    (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

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

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

    root Гость

    Репутация:
    0
    Для: nor
    Ок. Спасибо.
     
  7. root

    root Гость

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

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

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

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

    root Гость

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

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