Не получается удалить документ из базы

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

  1. SparkLone

    SparkLone Гость

    Доброго времени суток.

    В продолжении темы конверта RTF2HTML.обсуждение
    Ситуация следующая - есть форма, соджержащая поле RTF, содержимое которого перед отправкой (через отдельное приложение посредством COM) нужно сконвертить в HTML. Это потребовало того, что перед каждой попыткой отправки необходимо сохранять документ.
    Теперь прикрутил возможность того, чтобы при попытке закрытии формы - выводился диалог который спрашивал, - отправлять item, или нет. Соответственно если не отправлять - нужно удалить из базы сохраненную (перед отправкой, в случае если item отправиться не смог) версию. Перепробовал кучу вариантов, ну хоть ты тресни не получается.
    А теперь по коду:

    Код (Text):
    у формы:
    Sub Queryclose(Source As Notesuidocument, Continue As Variant)
    On Error Goto ErrHandler

    If Not ClearClosing Then
    Dim ws As New NotesUIWorkspace
    If ws.DialogBox("CloseConfirmation",True ,True , True,False ,False ,False ,"Thru Lotus Desktop" , , True, True)
    Then
    ' User clicked "Send" or    "Discard"
    action = Source.FieldGetText("CloseAction")
    If action = "Send"
    Then
    ...
    Else
    //action = Discard
    //здесь один из вариантов по тому как удалить документ (взято из "Examples: Remove method" стандартной лотусовской документации)          
    Dim session As New NotesSession
    Dim db As NotesDatabase
    Dim workspace As New NotesUIWorkspace
    Dim uidoc As NotesUIDocument
    Dim docA As NotesDocument
    Dim s As String

    Set db = session.CurrentDatabase
    Set uidoc = workspace.CurrentDocument
    Set docA = uidoc.document
    s = docA.UniversalID
    uidoc.Close
    Call uidoc.deletedocument()

    Set docB = db.getDocumentByUNID(s)
    Call docB.Remove(True)
    Call workspace.viewrefresh()
    End If
    Else
    ' User clicked "Cancel"
    ...
    End If
    Else
    ...
    End If
    Exit Sub

    ErrHandler:
    ....
    Exit Sub   
    End Sub
    Может кто сталкивался с проблемой?
    В общем не знаю, то ли это действительно сложно сделать, то ли это я такой "гЭний" :)

    В данный момент уже подумываю поменять вектор куда копать.. Данная форма открывается с базовой, может можно как то на Queryclose для текущей формы лишь помечать текущий документ как удаленный, а удалять из базы по тому же Queryclose базовой формы.. Хотя еще не знаю насколько это реально, так, мысли вслух..
    Буду благодарен за любую помощь )
     
  2. Kee_Keekkenen

    Kee_Keekkenen Well-Known Member

    Регистрация:
    5 сен 2006
    Сообщения:
    616
    Симпатии:
    4
    пока документ открыт его не удалишь..
     
  3. SparkLone

    SparkLone Гость

    Ну что то вроде того я уже и понял, но меня смущает фраза в оригинальной лотусовской документации
    This script gets the universal ID of the current UI document, marks the document for deletion and closes it. The script then retrieves the back-end NotesDocument object from the database and removes it with the NotesDocument Remove method.
    Код (Text):
    ession As New NotesSession
    Dim db As NotesDatabase
    Dim workspace As New NotesUIWorkspace
    Dim uidoc As NotesUIDocument
    Dim docA As NotesDocument
    Dim s As String

    Set db = session.CurrentDatabase
    Set uidoc = workspace.CurrentDocument
    Set docA = uidoc.document
    s = docA.UniversalID
    Call uidoc.deletedocument()
    Set docB = db.getDocumentByUNID(s)
    Call docB.Remove(True)
    Call workspace.viewrefresh()
    Не работает правда, но что они тогда имели ввиду?
    И может подскажете как по другому решить эту проблему? Был бы весьма признателен...
     
  4. Hedg

    Hedg Гость

    Call uidoc.deletedocument() - отработает только в том случае если докумет открыт только для просмотра.

    Marks the current document for deletion and closes it. The NotesUIDocument object is no longer available once you call this method.

    Код (Text):
    Sub Click(Source As Button)
    Dim workspace As New NotesUIWorkspace
    Dim uidoc As NotesUIDocument
    Set uidoc = workspace.CurrentDocument
    If Not ( uidoc.EditMode ) Then
    Call uidoc.DeleteDocument
    End If
    End Sub
     
  5. SparkLone

    SparkLone Гость

    Ооой.. Стыдно то как.. А я матерился на тупой Lotus, мол даже доотладить после
    Call uidoc.DeleteDocument не дает, мол документ закрывается и отладки больше можно не ждать.. А он видимо сваливался с Exception'ом (или с чем там Лотус падает)
    Мда.. Видимо все таки надо думать в другую сторону..
    Any ideas? )
     
  6. Hedg

    Hedg Гость

    Может повесить запуск агента в форме на выходе который его в бекграунде грохнет????
     
  7. SparkLone

    SparkLone Гость

    Вариант, как раз над чем то подобным и думал. Правда думал не про агент, а просто на то же Queryclose повесится у основной формы. Вариант сильно хуже?
    Осталось как то помечать документы для удаления и научиться работать с search'ем (за Лотус сел буквально на днях).
    В любом случае, спасибо, хоть знаю теперь, что в верном направлении думал )
     
Загрузка...

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