Создать копию документа

  • Автор темы oxystile
  • Дата начала
Статус
Закрыто для дальнейших ответов.
O

oxystile

Гость
#1
Доброе!
нужно из открытого документа иметь возможность создавать новый
CopyAllItems не использую, так как легче ручками прописать какие поля копируются, чем "затирать" те, кот. копировать не стоит

так вот
Set docA=cuid.Document
Set docB = New NotesDocument( db )
docB.Form="Document"

и надо скопировать вложения из поля Attach docA в такое же поле docB, но не выходит
не через AppendRTItem, не через CopyItemToDocument или же CopyItem
переменные item и rtitem обозначаю правильно, согласно хелпу

подскажите как Attach скопировать :(
 
U

ukr

Гость
#2
Код:
Dim rtitem As NotesRichTextItem
Dim rtitembody As NotesRichTextItem

Set rtitem = New NotesRichTextItem(docB, "Body")
Set rtitembody = docA.GetFirstItem("Body")
Call rtitem.AppendRTItem(rtitembody)
Должно работать
ВопросиК: А новый документ создается и открывается или просто создается?
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
2
36
Россия, Калуга
#3
oxystile
Открытый документ был уже сохранен с вложениями?
Или добавляются вложения (без сохранения), а потом ты пытаешься создать новый документ?

Добавь перед копированием метод notesUIDocument.Refresh(True).
 
O

oxystile

Гость
#4
спасибо :(, код со всех сторон правильный, но результат странный получился...
в поле Attach вложение не попало, а разместилось в конце документа, причем безликое
Body на Attach заменила, так что не поэтому
Set rtitem = New NotesRichTextItem(docB, "Attach")
Set rtitembody = docA.GetFirstItem("Attach")
Call rtitem.AppendRTItem(rtitembody)

о! причем еще такая особенность, если запустить код дебаггером, пройдясь по каждой строчке кода, то все отлично! Attach копируется в Attach
ощущение, что лотус просто медленно понимает чего от него хотят

док-т создается, на основе текущего (открытого) док-та.
Порой необходимо зерегистрировать в базе несколько однотипных документов, кот. отличается только значениями в 2-3 полях
 
K

K-Fire

Гость
#5
Имхо вместо notesUIDocument.Refresh(True) лучше использовать RTItem.Update
 
U

ukr

Гость
#7
Второй вариант надеюсь поможет:

Код:
Dim ws As New NotesUIWorkspace
Dim docB As NotesDocument

Set docB = New NotesDocument( db )

[Здесь ты копируешь все поля, кроме поля "Attach"]			 

Call ws.CurrentDocument.GotoField("Attach")
Call ws.CurrentDocument.SelectAll
Call ws.CurrentDocument.Copy

Call ws.EditDocument(True, docB)
Call ws.CurrentDocument.GotoField("Attach")
Call ws.CurrentDocument.Paste
 

Omh

Well-Known Member
Lotus team
04.07.2007
2 210
1
37
Латвиджа, Рига
#8
ukr
Нормальные человеки делают код так, что бы работало на background'е, ибо неизвестно, откуда этому коду запускаться.

oxystile
Как насчёт CopyItemToDocument?
 
U

ukr

Гость
#9
Omh
Я советовал код на тот вариант, если возникает потребность создать второй документ такой же как и первый, только с определенными пустыми полями и уже открытый.

док-т создается, на основе текущего (открытого) док-та.
Порой необходимо зерегистрировать в базе несколько однотипных документов, кот. отличается только значениями в 2-3 полях
Тогда вопрос по поводу backgrounda может сняться.
 
O

oxystile

Гость
#10
получился CopyItemToDocument, наверно, в прошлый раз чета не так написала ;)
спасибо всем!!!:):):)

п.с. но ни notesUIDocument.Refresh(True) , ни RTItem.Update не использую
сперва у меня
Set docB = New NotesDocument( db )
' присвоение полей
Call ws.EditDocument(True, docB )
-и открытие на редактирование, чтобы дополнить инфой
 
Статус
Закрыто для дальнейших ответов.