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

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

    Скидки до 10%

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

Notesrichtextitem в новом документе

Gandliar

Lotus Team
16.02.2004
556
26
BIT
40
Здравствуйте!

Подскажите пожалуйста как победить проблему:

1. есть документ с читательскими правами, содержащий notesrichtextitem с файлами
2. Для того чтобы отредактировать, создается документ копия, копируются в него все айтемы, открывается на редактирование
3. По кнопке сохранить айтемы из копии копируются в промежуточный документ и сохраняются, запускается серверный агент который переписывает айтемы из промежуточного в исходный документ.

первый раз сохраняет нормально
второй раз - пишет что аттачменты в документе копии побиты

Получается, когда ричтекст копируется в новый документ у него остается некая связь с исходным ричтекстом
и когда в исходном документе удаляется и заменяется ричтекст, то в новой открытой копии атачменты бьются

Как победить?
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
217
Здравствуйте!

Подскажите пожалуйста как победить проблему:

1. есть документ с читательскими правами, содержащий notesrichtextitem с файлами
2. Для того чтобы отредактировать, создается документ копия, копируются в него все айтемы, открывается на редактирование
3. По кнопке сохранить айтемы из копии копируются в промежуточный документ и сохраняются, запускается серверный агент который переписывает айтемы из промежуточного в исходный документ.

первый раз сохраняет нормально
второй раз - пишет что аттачменты в документе копии побиты

Получается, когда ричтекст копируется в новый документ у него остается некая связь с исходным ричтекстом
и когда в исходном документе удаляется и заменяется ричтекст, то в новой открытой копии атачменты бьются

Как победить?
ваще не должно быть никакой связи, м.б. чёт в коде неправильное?
 

Gandliar

Lotus Team
16.02.2004
556
26
BIT
40
Принцип - из исходного документа А делается копия Б и открывается на редактирование. Копия редактируется и изменения сохраняются через промежуточный документ С в исходный А

Агент открывающий копию документа на редактирование

Код:
Dim workspace As New NotesUIWorkspace
    Dim uidoc As NotesUIDocument
    Set uidoc = workspace.CurrentDocument
    Dim doc As NotesDocument
    Set doc = uidoc.Document
    Dim session As New NotesSession
    Dim db As NotesDatabase
    Set db = session.CurrentDatabase
    'Все проверки прошли, откроем на редактирование в документе копии
    Dim docCopy As NotesDocument
    Set docCopy = db.Createdocument()
    Call doc.Copyallitems(docCopy, True)
    'UNID оригинального документа
    Call docCopy.Replaceitemvalue("masterUnid", doc.Universalid)
    docCopy.Getfirstitem("masterUnid").Savetodisk = False
    Call docCopy.Replaceitemvalue("SaveOptions", "0")
    docCopy.Getfirstitem("SaveOptions").Savetodisk = False
    'Закроем текущий документ и откроем копию на редактирование 
    Call uidoc.Close(true)
    'Откроем копию на редактирование
    Call workspace.Editdocument(True, docCopy, , , , True)

Агент сохраняющий из открытой копии в исходный документ (через промежуточный документ)

Код:
im workspace As New NotesUIWorkspace
    Dim uidoc As NotesUIDocument
    Set uidoc = workspace.CurrentDocument
    Dim doc As NotesDocument
    Set doc = uidoc.Document
    Dim session As New NotesSession
    Dim db As NotesDatabase
    Set db = session.CurrentDatabase
    Call uidoc.Refresh(true)
  
    Dim docProfile As NotesDocument
    Set docProfile = db.Createdocument()
    Call docProfile.Replaceitemvalue("form", "test3") 
    Call docProfile.Replaceitemvalue("masterUnid", doc.Getitemvalue("masterUnid")(0))
    Dim item As NotesItem
    Set item = doc.Getfirstitem("files") 
    Call item.Copyitemtodocument(docProfile, "files") 
    Call docProfile.Save(True, True)
    Dim docProfileUnid As String
    docProfileUnid = docProfile.Universalid
    Delete docProfile
      
    Set docProfile = db.Getdocumentbyunid(docProfileUnid)         
    Dim docSource As NotesDocument
    Set docSource = db.Getdocumentbyunid(docProfile.Getitemvalue("masterUnid")(0))
    If docSource.Hasitem("files") Then Call docSource.Removeitem("files")
    Set item = docProfile.Getfirstitem("files")
    Call item.Copyitemtodocument(docSource, "files") 
    Call docSource.Save(true, true)

После первого сохранения в открытом документе почему то повреждается аттачмент и второй раз не сохраняется.
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
217
если uidoc.Close(true) то delete uidoc сделать невозможно.
если uidoc.Close() то delete uidoc сделать можно, но не помогает.
точно? у меня всё так и работает... (в 9.0.1)
в любом случае - основная цель дестроить бэкэндовый док, можно его тогда, как и в агенте
 
Мы в соцсетях:

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