Как перенести вложенные текстовые вложения из одного документа в другой - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть 2 документа, которые должны работать таким образом, чтобы можно было передавать файлы между ними.Тем не менее, это не работает.Исключение, которое я получаю, это Exception occurred calling method NotesDocument.save() Notes error: One or more of the source document's attachment are missing. Run Fixup to delete the document in the source database. Это происходит после того, как я пытаюсь вызвать функцию save() для документа, в который я только что передал файлы из первого.

Функции приведены ниже:

function transferFiles(docToGetFrom, docToTransferTo, fileFieldFromFirstName, fileFieldFromSecondName) 
{
    var rit1:NotesRichTextItem = getFirstNotesRichTextItem(docToGetFrom, fileFieldFromFirstName);
    docToTransferTo.copyItem(rit1, fileFieldFromSecondName);
    deleteAllFilesFromDocument(docToGetFrom, fileFieldFromFirstName);

    docToTransferTo.save();
}

function getFirstNotesRichTextItem(documentToGetFrom, fileFieldName) 
{
    if (documentToGetFrom == null)
    {
        return(null);
    }
    if (!documentToGetFrom.hasItem(fileFieldName))
    {
        return(null);
    }
    var rit1:NotesRichTextItem = documentToGetFrom.getFirstItem(fileFieldName);

    return rit1;
}

function deleteAllFilesFromDocument(documentToDeleteFrom, fileFieldName) 
{
    var arr = getAllEmbeddedObjects(documentToDeleteFrom, fileFieldName);

    for(var i = 0; i < arr.length; i++)
    {
        arr[i].remove();
    }

    documentToDeleteFrom.save();

}

function getAllEmbeddedObjects(documentToGetFrom, fileFieldName) 
{

    var rit1:NotesRichTextItem = getFirstNotesRichTextItem(documentToGetFrom, fileFieldName);
    if (rit1 == null)
    {
        return(null);
    }
    try
    {
    var arr=rit1.getEmbeddedObjects();
    return arr;
    }
    catch(e)
    {
        return(null);
    } 

}

В соответствии с простой логикой, мне нужно сделать следующее, чтобы заставить его работать:

  1. Получить вложения из документа A
  2. Скопировать их в документ B
  3. Удалить вложения из документа A
  4. Позвонить save() по A
  5. Позвонить save() по B

Я сделал точно так же,но тем не менее получите это неприятное исключение.Кроме того, я попытался решить проблему, установив OLEDisableFX в 1, но безуспешно.Я предполагаю, что с методом copyItem() что-то должно быть не так (полагаю, что он может корректно работать только с простыми типами данных).В чем проблема?Заранее спасибо. enter image description here

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Используйте метод CopyItemToDocument класса NotesItem.Ниже приведен код, который я использовал в агенте LotusScript, но метод CopyItemToDocument также доступен в Java и SSJS.

    If doc.Hasitem("RTF1") Then
        Set item = Nothing
        Set item = doc.getFirstItem("RTF1")
        Call item.Copyitemtodocument(targetdoc, "targetRTF")
        Call item.Remove()
    End If
0 голосов
/ 04 декабря 2018

Возможно, вам потребуется отсоединить вложение от исходного документа и прикрепить его к целевому документу.См. Класс NotesEmbeddedObject для примеров.

...