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

  • Автор темы root
  • Дата начала
Статус
Закрыто для дальнейших ответов.
R

root

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

Elena Nefedova

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

root

#3
Для: Elena Nefedova
если каждый раз при открытии бд автоматически их удалять и чистить cache.ndk. Можно по подробней про эти процедуры.
Чистить это значить просто удалить?
а как автоматически удалить Частные представления.
 
N
#4
Для: 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

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

GROMILA

Well-known member
08.04.2004
297
0
#5
Сергей,
накропай базку плиз и прикрепи сюды плиз :(
а лучше залей на CODEBASE, а тут размести ссылку

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

root

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

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

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

Дизайнер 7 .
 
R

root

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