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

Тема в разделе "Работа с API", создана пользователем root, 9 апр 2007.

  1. root

    root Гость

    Дизайнер->База->Shared Code->Script Libraries->New Lotus Script Library-Declarations
    Код (Text):
    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
    Создаем процедуру в этой же библиотеки.
    Код (Text):
    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 пишем
    Код (Text):
    Use "Delete Private Views"
    в функции Query close пишем
    Код (Text):
    Call DeletePrivateView(Source.Database , "здесь пишем название своего представления ")
    'хочу сразу предупредить у меня представления на русском не работали только на английском
     
  2. TIA

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    Уточню, что данный пример удаляет только 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.
     
Загрузка...

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