Удаление личных представлений.

  • Автор темы root
  • Дата начала
R

root

Гость
#1
Дизайнер->База->Shared Code->Script Libraries->New Lotus Script Library-Declarations
Код:
Const APIModule = "NNOTES" 
Const NOTE_CLASS_VIEW= &H0008
Declare 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 Function NSFDbOpen Lib APIModule Alias "NSFDbOpen" _
( Byval PathName As String, DbHandle As Long) As Integer
Declare Function NSFDbClose Lib APIModule Alias "NSFDbClose" _
( Byval DbHandle As Long) As Integer
Declare Function NIFFindPrivateDesignNote Lib "NNOTES" Alias "NIFFindPrivateDesignNote" _
( Byval hdb As Long, Byval NoteName As String, Byval NoteClass As Integer, NoteID As Long ) As Integer
Создаем процедуру в этой же библиотеки.
Код:
Sub DeletePrivateView(db As NotesDatabase, vname As String)


'Для открытия базы на сервере, используется функция для получения полного пути. 
p$ = String(1024, " ")
OSPathNetConstruct 0, db.Server, db.FilePath, p$ 

'Эта функция берет путь к базе данных открывает ее и возращает ссылку на нее.
Dim hDB As Long
NSFDbOpen p$, hDB

'Эта функция фозвращает ID часного представления(form, view, folder, helpindex, macro, field, 
'or replication formula ) 
Dim retNoteID As Long
Dim result As Integer
result = NIFFindPrivateDesignNote(hDB, vname, NOTE_CLASS_VIEW, retNoteID)

' если результат что то а не ноль тогда представления не найдены
If result = 0 Then
Dim doc As NotesDocument
' Получение приватного представления по ID
Set doc = db.GetDocumentByID( Hex$(retNoteID) ) 
Call doc.Remove( True )
Print "Removing : " & vname
End If

' Закрытие базы.
NSFDbClose hDB

End Sub
Сохраняем и называем его Delete Private Views


Designer->База данных->Other-Database Resource->DataBase Script
в Options пишем
Код:
Use "Delete Private Views"
в функции Query close пишем
Код:
Call DeletePrivateView(Source.Database , "здесь пишем название своего представления ")
'хочу сразу предупредить у меня представления на русском не работали только на английском
 

TIA

:-)
Lotus team
15.05.2009
790
1
#2
Дизайнер->База->Shared Code->Script Libraries->New Lotus Script Library-Declarations
Уточню, что данный пример удаляет только SPOFU (серверные), но не SDPOFU (десктопные) представления. Т.к. NIFFindPrivateDesignNote, да и вообще всё C API не имеет доступа к десктопному файлу. Выдержка из справки на NIFFindPrivateDesignNote:

However, private folders that are stored in the user's desktop file, rather than in the database, cannot be accessed by the C API. Also, the C API cannot store private folders in the user's desktop file. Private folders are stored in the user's desktop file only by the Notes user interface and only if the user does not have the access right to create private folders in the database.