а подробнее, что и как происходит?
знаю о баге когда объект NotesDocument пропадает в памяти, если выходит за рамки области видимости объекта БД из которой он был получен (часто ошибка вылазит при использовании функций, кот возвращают док из какой-то БД, которая открывается в той же функции)
но твое утверждение я не понял, не встречался, видать... не похоже на то о чем я написал выше?.. хотя, возможно суть в том же...
Попробовал собственный пример и понял, что много воды уже утекло.
Теперь вполне срабатывает вариант простого копирования RT-поля в новый документ.
И закрытие БД-источника не приводит к ошибкам. Т.е. нижеследующий код корректен.
Код:
Dim ws As New NotesUIWorkspace
Dim db As NotesDatabase
Dim doc As NotesDocument, forward As NotesDocument
Dim uidoc As NotesUIDocument
Dim sourcebody As NotesRichTextItem
Set uidoc = ws.CurrentDocument
Set doc = uidoc.Document
Set db = New NotesDatabase("", "")
Call db.OpenMail
'Обновление RichText из интерфейса в back-end
If uidoc.EditMode Then Call uidoc.Refresh(True)
Set sourcebody = doc.getfirstitem ( "Body" )
Set forward = db.CreateDocument
if IsValidItem(sourcebody) then Call sourcebody.copyitemtodocument( forward, "Body" )
forward.Form = "Memo"
forward.Subject = doc.Subject ( 0)
Call ws.editdocument ( True, forward )
А причину старой баги всё же расскажу, т.к. многим может оказаться полезным.
Многие знают, что физически вложения не хранятся в самой ноте. Нота имеет лишь ссылку (в виде RRV) на системную ноту (object), в которой и располагаются вложения. При копировании вложений, нотес не выполняет сразу перенос вложения (зачастую весьма объёмного), а как-бы запоминает ссылку на источник. За счёт чего сама операция копирования (например CopyItemToDocument) выполняется быстро. Ссылки бывают на файловую систему, на другую ноту другой или текущей БД, на буфер обмена (точнее тоже на ноту в локальной спец-БД, в файле вида C:\Temp\notesD80BDD\~editclp.ncf). При сохранении ноты с новым вложением, нотес по ссылке получает источник вложения и копирует его в новую внутреннюю ноту для вложения. При закрытии хэндла БД, закрываются и полученные через него хэндлы нот. Т.е. описанная Akupaka ситуация с пропаданием NotesDocument. Так вот, если ссылка была на ноту-источник из другой БД, и эта БД закрыта, то ссылка не может разрешиться, т.к. нота-источник теперь тоже закрыта.
Думаю, что исправление баги заключалось в том, что раньше ссылка на ноту-источник была в виде хэндла, а теперь, наверно, в виде RRV. RRV -- это что-то типа NoteId.
Если конкретнее говорить, то имеется база данных шаблонов документов и база данных проектов.
в бд проектов необходимо реализовать возможность копировать размещенное в бд шаблонов вложение. причем вид в представлении д.б следующим:
- Проект 1
>файл1
>файл2...
- Проект 2
> файл3....
OlyaZ, а вы все-таки расскажите подробнее о своей задаче. Понял, что есть документ-шаблон с вложениями. Что нужно каким-то образом пренести вложения из шаблона в БД проектов. Каким образом?
Сколько Notes-документов в вашем примере создано в БД проекты - 2? По какому принципу определяется, какое вложение в какой документ-проект должно попасть? Или всё совсем не так?