'note Item Not Found'

vital

Больной Компом Детектед
29.01.2006
2 432
33
#2
А я нашел..
To code around the issue in earlier releases, do not use a CopyItem method. Instead use the ExtractFile method (of the NotesEmbeddedObjects class) to write the attachment to disk. Then use the EmbedObject method (of the NotesRichTextItem class) to attach the file.
 

yerke

Well-known member
28.08.2007
392
0
#3
у меня здесь не идет речь об аттачах

есть NotesDocumentCollection с рт_полями (а там текст, инлайн картинки, формула)

создаю новый NotesDocument, где расположен рт_поля, куда копирую значения рт_полей с NotesDocumentCollection
с помощью CopyItemToDocument

потом при открытии
NotesDocument иногда вылетает ошибка
 

TIA

:-)
Lotus team
15.05.2009
790
3
#4
Был такой косяк. Копирование РТ-поля происходит приблизительно так. В целевой документ изначально копируется содержимое исходного РТ-поля и соответствующие $File, но $File указывает не на целевую БД, а на БД-источник. Только при сохранении целевого документа происходит физический перенос вложения и только после этого $File начинает указывать на целевую БД. Так вот, если в на момент сохранения целевой БД. БД-источник будет закрыта (не будет открытых хэндлов), то копирования вложения не происходит. При этом РТ-поле продолжает указывать на $File. Ещё, если попытаться отобразить св-ва вложения в целевом документе, то показывается ругательный месадж не помню какого содержания. Т.е. вложение получается "битым".

Вобщем, если копирование РТ-полей происходит из документов одной БД в документы другой, тогда проверьте, есть ли хоть одна переменная, указывающая на БД-источник (из которой получен NotesDocumentCollection) на момент сохранения целевого документа (NotesDocument)
 

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 231
17
#5
Как вариант перевесить копирование на серверного агента, а сервер можно хоть самый последний вжарить и проблемы больше не будет
 

yerke

Well-known member
28.08.2007
392
0
#6
Вобщем, если копирование РТ-полей происходит из документов одной БД в документы другой, тогда проверьте, есть ли хоть одна переменная, указывающая на БД-источник (из которой получен NotesDocumentCollection) на момент сохранения целевого документа (NotesDocument)
то есть надо аннулировать хендлы на рт поля
после копирования
а как?
так Set rtitem = Nothing?


рисунок 1
схема копирования
 

Вложения

TIA

:-)
Lotus team
15.05.2009
790
3
#7
то есть надо аннулировать хендлы на рт поля
Нет. Надо чтобы была переменная содержащая БД-источник. Т.е. не надо ничего аннулировать.
Вот, например, в следующем примере на момент tDoc.Save (целевого документа), нет ссылки на БД-источник. Потому что БД получена в foo2,а при выходе из foo2 обнуляется и переменная sdb, содержащая ссылку на БД-источник.

Sub foo1()
...
Set tDoc = ...
call foo2( tDoc )
call tDoc.Save(...)
End sub


Sub foo2(tDoc as NotesDocument)
Dim sdb as NotesDatabase
Dim nc as NotesDocumentCollection
Set sdb = ...
Set nc = sdb. ...
Set doc = nc.GetFirstDocument
While not doc is nothing
...
doc. CopyItemToDocument( tDoc, ... )
...
Wend
End Sub
 

yerke

Well-known member
28.08.2007
392
0
#8
Нет. Надо чтобы была переменная содержащая БД-источник. Т.е. не надо ничего аннулировать.
Вот, например, в следующем примере на момент tDoc.Save (целевого документа), нет ссылки на БД-источник. Потому что БД получена в foo2,а при выходе из foo2 обнуляется и переменная sdb, содержащая ссылку на БД-источник.
нет не помогает

даже если переменная базы источника и
переменная целевого документа содержатся в одном контексте (внутри одной функции или sub'а)
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 567
263
#10
чем не подходит копирование дока целиком, удаление "ненужного", добавление "нужного" ?
 

nvyush

Lotus team
22.04.2009
2 317
0
#12
yerke
Конечно криво, но что если попробовать сперва копирнуть нужные доки в целевую базу, а затем уже из копий тянуть РТ поля? Темповые доки потом грохнуть.
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 567
263
#14
и зачем "это"? Не понимаю глубины архитектурного экзерциза
а что бум делатьс файлом, у кот название совпадёт, а ежели текст дублируется - и это тока первые грабли

не разу не пробовал с пом ДХЛ так извращаться, но в первом приближении - копируем все РТ и подчиненные ноды, затем файлноды...
 

yerke

Well-known member
28.08.2007
392
0
#15
ладно
если не возможно избавиться от "note Item Not Found"

но есть другой вопрос
как ее обработать как ран тайм еррор
кажется нельзя?

ибо я не смог ее поймать с конструциией On Error
ни в PostOpen, ни в QueryOpen, ни в Initialize формы
 
13.03.2009
625
1
#16
но есть другой вопрос
как ее обработать как ран тайм еррор
кажется нельзя?
факт. не ловится эта дрянь. индусам - низачот.

а вообще - рано сдались, как мне кажется.
попробуйте добиться устойчивого появления ошибки. выложите код, железно приводящий к такому рез-ту.
ну не может такого быть, чтобы не было вокэраунда...