• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

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

  • Автор темы SparkLone
  • Дата начала
S

SparkLone

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

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

Код:
у формы:
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 базовой формы.. Хотя еще не знаю насколько это реально, так, мысли вслух..
Буду благодарен за любую помощь )
 
K

Kee_Keekkenen

пока документ открыт его не удалишь..
 
S

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

Не работает правда, но что они тогда имели ввиду?
И может подскажете как по другому решить эту проблему? Был бы весьма признателен...
 
H

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.

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

SparkLone

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

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

Код:
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
Ооой.. Стыдно то как.. А я матерился на тупой Lotus, мол даже доотладить после
Call uidoc.DeleteDocument не дает, мол документ закрывается и отладки больше можно не ждать.. А он видимо сваливался с Exception'ом (или с чем там Лотус падает)
Мда.. Видимо все таки надо думать в другую сторону..
Any ideas? )
 
H

Hedg

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

SparkLone

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

Обучение наступательной кибербезопасности в игровой форме. Начать игру!