如何将RTF附件从一个文档传输到另一个文档

时间:2018-12-04 07:10:01

标签: xpages lotus-notes attachment richtext

我有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. 在A上致电save()
  5. 在B上致电save()

我做的完全一样,但是却得到了这个讨厌的异常。另外,我尝试通过将 OLEDisableFX 设置为1来解决此问题,但没有好运。我假设方法copyItem()一定有问题(我猜想它只能与简单的数据类型一起正常工作)。有什么问题?预先感谢。enter image description here

2 个答案:

答案 0 :(得分:3)

您可能需要将附件与源文档分离,并将其附加到目标文档。有关示例,请参见NotesEmbeddedObject类。

答案 1 :(得分:2)

使用NotesItem类的CopyItemToDocument方法。以下是我在LotusScript代理中使用的一些代码,但是Java和SSJS中也提供了CopyItemToDocument方法。

    If doc.Hasitem("RTF1") Then
        Set item = Nothing
        Set item = doc.getFirstItem("RTF1")
        Call item.Copyitemtodocument(targetdoc, "targetRTF")
        Call item.Remove()
    End If